2021-07-11学习记录 深度学习训练模型python代码分析2.0

训练的模型应用于口罩识别系统

今天要分析的一段代码:卷积神经网络模型

def build_model(inputshape,shape_count):
    img_in = Input(shape=inputshape, name='img_in')
    X = img_in

    X = Convolution2D(8, 3, padding='same', activation='relu', name='conv1')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool1')(X)

    X = Convolution2D(16, 3, padding='same', activation='relu', name='conv2')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool2')(X)
    X_SHORT = X

    X = Convolution2D(16, 3, padding='same', activation='relu', name='conv3')(X)
    X = layers.add([X, X_SHORT])

    X = Convolution2D(32, 3, padding='same', activation='relu', name='conv4')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool3')(X)

    X = Convolution2D(64, 3, padding='same', activation='relu', name='conv5')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool4')(X)

    X = Flatten(name='flattened')(X)
    X = Dense(128, activation='relu', name='dense1')(X)
    #Dense:定义网络层的基本方法
    X = Dense(128, activation='relu', name='dense2')(X)
    X = Dropout(0.25)(X)
    classify = Dense(shape_count, activation='softmax', name='dense3')(X)

    model = Model(inputs=[img_in], outputs=[classify])

    return model

1.定义函数

def build_model(inputshape,shape_count)

inputshape为输入图片的维度和尺寸。
(例如64x64x3)

shape_count为输出的神经元个数或者输出的维度。
(例如在口罩识别系统中就两个输出:戴口罩与没带口罩,因此shape_count为2)

2.输入图片

	img_in = Input(shape=inputshape, name='img_in')
    X = img_in

在keras.layers.Input()方法中
shape为输入层的尺寸
name为输入层的名字

3.第一层卷积与池化

	X = Convolution2D(8, 3, padding='same', activation='relu', name='conv1')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool1')(X)

在这一层的卷积层中,
第一个参数为卷积核的个数,
第二个参数为卷积核的尺寸(3x3),
第三个参数padding=‘same’为补零策略,即使输入的尺寸和输出的尺寸相同
第四个参数activation=‘relu’为激活函数
第五个参数为层的名字

在这一层的池化层中,
第一个参数为池化窗口的尺寸(2x2)
第二个参数为步长
第三四个参数同上

4.第二层卷积与池化

	X = Convolution2D(16, 3, padding='same', activation='relu', name='conv2')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool2')(X)
    X_SHORT = X

第二层的卷积核变成了16个

5.第三层卷积

    X = Convolution2D(16, 3, padding='same', activation='relu', name='conv3')(X)
    X = layers.add([X, X_SHORT])

将上一层的输出与这一层的输出相加
(我也不知道作用是啥…)
6.第四层卷积与池化

    X = Convolution2D(32, 3, padding='same', activation='relu', name='conv4')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool3')(X)

卷积核的数量变成了32个

7.第五层卷积与池化

	X = Convolution2D(64, 3, padding='same', activation='relu', name='conv5')(X)
    X = MaxPooling2D(pool_size=2, strides=2, padding='same', name='maxpool4')(X)

卷积核的数量变成了64个

8.数据铺平

 X = Flatten(name='flattened')(X)

输出展开为一维数据

9.第一层全连接

X = Dense(128, activation='relu', name='dense1')(X)

第一个参数为神经元个数

10.第二层全连接

X = Dense(128, activation='relu', name='dense2')(X)

同上

11.防止过拟合

X = Dropout(0.25)(X)

0.25为神经元被丢弃的概率
(这个好像挺深奥的,之后再深耕dropout吧)

12.归一化

 classify = Dense(shape_count, activation='softmax', name='dense3')(X)

这一层的激活函数为softmax,最后将上一层的128个神经元转换为2个神经元(相对应的为戴口罩和没带口罩)

13.输出模型

model = Model(inputs=[img_in], outputs=[classify])

通过Model通用模型,设置输入为放入的图片,输出为classify。
最后返回model即为构建好的卷积神经网络。

总结:
对于卷积神经网络的python代码有了更深刻的理解,虽然有些地方还有困惑,但是大体的框架算是掌握了。此外,对于卷积神经网络的结构再一次加深了印象,但是某些细节还是需要继续琢磨。

继续学习ing…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值