欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

卷积神经网络基础

程序员文章站 2022-07-06 11:26:51
...

1.卷积神经网络
卷积神经网络是(卷积层+(可选)池化层)N+全连接层M
卷积层输入和输出都是矩阵,全连接是向量,所以最后需要展平。
全连接一定在后面,毕竟是一维,失去了维度信息。
可以用来分类和回归。
2.全卷积神经网络
卷积层+(可选)池化层)N+反卷积层K
可能输入和输出一样大–》做物体分割,判断像素点属于哪个物体
局部连接:图像具有区域性
参数共享:图像特征与位置无关
经过一次卷积,输出size = 输入size-卷积核size +1
但是,一直卷积,那深度卷积图像都没了,但是padding(补零)可以好一点
多通道图像:

卷积神经网络基础
所以不管我的图像几通道,输出图一定是单通道。
卷积神经网络基础
最大池化操作:用区域里最大值,步长为移动数,一般不补零,不重叠,没有用于求导得参数,用于减少图像尺寸,平移鲁棒性。

卷积神经网络基础
下面是代码层面:
其实与全连接代码只需要改动网络:


model = keras.models.Sequential()
# filter代表有多少个卷积核。kernelsize是核大小,padding是补零
model.add(keras.layers.Conv2D(
    filters=32, kernel_size=3,
    padding='same',
    activation='relu',
    input_shape=(28,28,1)
))
model.add(keras.layers.Conv2D(
    filters=32, kernel_size=3,
    padding='same',
    activation='relu',
))
# 再添加一个pooling层,因为池化层步长和poolsize通常相等,所以设定一个就行
model.add(keras.layers.MaxPool2D(pool_size=2))
# 通常进行池化层后会对filter数目翻倍。因为池化后数据大量损失,翻倍filters来缓解,padding=same,输入输出尺寸不变
model.add(keras.layers.Conv2D(
    filters=64, kernel_size=3,
    padding='same',
    activation='relu',
))
model.add(keras.layers.Conv2D(
    filters=64, kernel_size=3,
    padding='same',
    activation='relu',
))
model.add(keras.layers.MaxPool2D(pool_size=2))

model.add(keras.layers.Conv2D(
    filters=128, kernel_size=3,
    padding='same',
    activation='relu',
))
model.add(keras.layers.Conv2D(
    filters=128, kernel_size=3,
    padding='same',
    activation='relu',
))
model.add(keras.layers.MaxPool2D(pool_size=2))
# 展平
model.add(keras.layers.Flatten())
# 连接全连接层
model.add(keras.layers.Dense(128,activation='relu'))
# 输出
model.add(keras.layers.Dense(10,activation="softmax"))

后面,我们使用selu代替relu作为**函数,结果发现训练曲线变得不那么陡峭,效果好很多!

相关标签: 卷积