深度神经网络学习笔记----AlexNet

深度神经网络学习笔记–AlexNet

https://blog.csdn.net/weixin_44791964/article/details/102748770

用AlexNet网络构建一个图像分类模型

看了无数遍也记不住的 padding 的计算方法:

  • same:out = in/s 向上取整
  • valid: out = (in-f+1)/s 向上取整

1、AlexNet网络的结构

def AlexNet(input_shape=(224, 224, 3), output_shape=4):
    model = Sequential()
    model.add(
        Conv2D(
            filters=96, 
            kernel_size=(11,11),
            strides=(4,4),
            padding='valid',
            input_shape=input_shape,
            activation='relu'
        )
    )  
    model.add(BatchNormalization())
    model.add(
        MaxPooling2D(
            pool_size=(3, 3),
            strides=(2, 2),
            padding='valid'
        )
    )
    model.add(
        Conv2D(
            filters=128, 
            kernel_size=(5,5), 
            strides=(1,1), 
            padding='same',
            activation='relu'
        )
    )
    model.add(BatchNormalization())
    model.add(
        MaxPooling2D(
            pool_size=(3,3),
            strides=(2,2),
            padding='valid'
        )
    )
    model.add(
        Conv2D(
            filters=192, 
            kernel_size=(3,3),
            strides=(1,1), 
            padding='same', 
            activation='relu'
        )
    ) 
    model.add(
        Conv2D(
            filters=192, 
            kernel_size=(3,3), 
            strides=(1,1), 
            padding='same', 
            activation='relu'
        )
    )
    model.add(
        Conv2D(
            filters=128, 
            kernel_size=(3,3), 
            strides=(1,1), 
            padding='same', 
            activation='relu'
        )
    )
    model.add(
        MaxPooling2D(
            pool_size=(3,3), 
            strides=(2,2), 
            padding='valid'
        )
    )
    model.add(Flatten())
    model.add(Dense(1024, activation='relu'))
    model.add(Dropout(0.25))    
    model.add(Dense(1024, activation='relu'))
    model.add(Dropout(0.25))   
    model.add(Dense(output_shape, activation='softmax'))
    model.summary()

    return model

首先将原始图像resize成(224, 224, 3)
然后是一系列卷积、BN、最大池化的操作:


11×11的卷积核,步长为4,padding = ‘valid’,卷积操作输出结果shape为(54, 54, 96)
经过BN归一化,输出shape为(54, 54, 96)
经过最大池化,池化卷积核大小为3×3,步长为2,padding = ‘valid’,池化的结果为
(26, 26, 96)


5×5的卷积核,步长为1,padding= ‘same’,卷积操作输出结果shape为(26, 26, 128)
经过BN归一化,输出shape为(26, 26, 128)
经过最大池化,池化卷积核大小为3×3,步长为2,padding = ‘valid’,池化结果为
(12, 12, 128)


3×3卷积核,步长为1,padding = ‘same’, 卷积操作输出shape为(12, 12, 192)
3×3卷积核,步长为1, padding = ‘same’, 卷积操作输出shape为(12, 12, 192)
3×3卷积核, 步长为1,padding = ‘same’, 卷积操作输出shape为(12, 12, 128)
经过最大池化,池化卷积核大小为3×3,步长为2,padding = ‘valid’, 池化结果为
(5, 5, 128)


把输出的神经元平铺,全连接层将输出的神经元缩减为1024;使用relu激活函数,还有dropout = 0.25


全连接层输出神经数为1024;使用relu激活函数,dropout = 0.25


最后增加一个全连接层,输出的神经元数和分类的总类别数相等,用softmax分类器

2、训练之前的数据处理

用于训练和测试的图像数据分成4类,(B007, IR007, Normal, OR007@3)。
要生成一个.txt文件用于存放每张图片对应的文件名和标签
文件名和标签之间的分隔符是 “;”
深度神经网络学习笔记----AlexNet_第1张图片

3、训练模型

在训练过程中首先读取.txt文件中每一行,每一行都代表一个文件和它对应的标签。将图片数据顺序打乱,把图片格式的数据转化成能够输入到模型的格式。
90%的数据用于训练,10%的数据用于验证。
使用AlexNet模型。
这里我训练了50个epoch,每3个epoch保存一次模型;
定义学习率下降的方式是:acc三次不下降就下降学习率继续训练;
一个batch大小为128,即每次输入128张图片;
最后保存模型Alex_model.h5

只训练了50个epoch准确率不高

4、预测结果

predict.py
读取AlexNet模型,读取训练好的权重,输入一张测试集中的图片,输出预测结果:
在这里插入图片描述


代码链接:链接:https://pan.baidu.com/s/1WP9wMqZPDizErcDpO4Ni8g
提取码:8qde


感谢
https://blog.csdn.net/weixin_44791964/article/details/102748770

你以为的顿悟其实是别人的基本功

深度神经网络学习笔记----AlexNet_第2张图片
https://www.iqiyi.com/v_19rrk2gwkw.html

你可能感兴趣的:(卷积,深度学习,神经网络)