【ML&DL学习】17 tf keras separable cnn

深度可分离卷积深度可分离卷积是普通卷积操作的变种,可以替代不同卷积,从而构成卷积神经网络。对于一个普通卷积,首先进行3*3的卷积操作,在进行批归一化,在经过relu,形成一个完整的卷积层。对于深度可分离卷积,首先进行33的深度可分离卷积,在进行批归一化,然后relu,在经过11的卷积层,在进行批归一化,relu。视野域指的是输出单元是和多少个输入单元相关联,对于一个33的矩阵来说,输...
摘要由CSDN通过智能技术生成

深度可分离卷积

在这里插入图片描述
深度可分离卷积是普通卷积操作的变种,可以替代不同卷积,从而构成卷积神经网络。

对于一个普通卷积,首先进行3*3的卷积操作,在进行批归一化,在经过relu,形成一个完整的卷积层。

对于深度可分离卷积,首先进行33的深度可分离卷积,在进行批归一化,然后relu,在经过11的卷积层,在进行批归一化,relu。
在这里插入图片描述
在这里插入图片描述
视野域指的是输出单元是和多少个输入单元相关联,对于一个33的矩阵来说,输出的每个单元,都可以看到输入矩阵中33的一个区域,对于一个两层的33卷积,输出可以看到两层之前的输入矩阵中55的一个方格,这样的区域对应的就是一个视野域。
在这里插入图片描述
减小输入,提升效率
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对比普通卷积,输入的四个通道都是和输出的四个通道有关系的,而深度可分离卷积,只和输入的某一个通道有关系,从而减小计算量。
在这里插入图片描述
Dk代表卷积核大小,Df代表输入图像大小。M是输入通道的数目,N是输出通道的数目(卷积核数目也是输出通道的数目)
在这里插入图片描述
计算量很小,使得卷积神经网络可以在手机上运行

代码实现

model = keras.models.Sequential()
model.add(keras.layers.Conv2D(filters=32, kernel_size=3,
                              padding='same',
                              activation='selu',
                              input_shape=(28, 28, 1)))
                       #深度可分离卷积
model.add(keras.layers.SeparableConv2D(filters=32, kernel_size=3,
                                       padding='same',
                                       activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))
model.add(keras.layers.SeparableConv2D(filters=64, kernel_size=3,
                                       padding='same',
                                       activation='selu'))
model.add(keras.layers.SeparableConv2D(filters=64, kernel_size=3,
                                       padding='same',
                                       activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))
model.add(keras.layers.SeparableConv2D(filters=128, kernel_size=3,
                                       padding='same',
                                       activation='selu'))
model.add(keras.layers.SeparableConv2D(filters=128, kernel_size=3,
                                       padding='same',
                                       activation='selu'))
model.add(keras.layers.MaxPool2D(pool_size=2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(128, activation='selu'))
model.add(keras.layers.Dense(10, activation="softmax"))
model.compile(loss="sparse_categorical_crossentropy",
              optimizer = "sgd",
              metrics = ["accuracy"])

在这里插入图片描述
参数减小了

训练
在这里插入图片描述
学习曲线
在这里插入图片描述
可以发现迭代第二次后loss开始下降了,accuracy往上升,说明只要经过长时间的训练,模型可以达到一个好的效果。

测试
在这里插入图片描述
以精度损失为代价,换取计算量的减小和参数量的减小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值