目录
CNN网络的构成
CNN网络主要有三部分构成:卷积层、池化层和全连接层构成,其中卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接层类似人工神经网络的部分,用来输出想要的结果
卷积层
卷积的计算方法
padding
上述卷积过程中,特征图比原始图减少了很多,我们可以在原图像的周围进行padding,来保证在卷积过程中特征图大小不变
stride
多通道卷积
卷积核通道数和输入相同
多卷积核卷积
卷积核个数与输出feature map相同
特征图大小
代码API
tf.keras.layers.Conv2D(filters,kernel_size,strides,padding,activation)
池化层(Pooling)
最大池化
tf.keras.layers.MaxPool2D(pool_size,strides,padding)
平均池化
tf.keras.layers.AvgPool2D(pool_size,strides,padding)
全连接层
卷积神经网络的构建
数据加载
import tensorflow as tf
from tensorflow.keras.datasets import mnist
(train_images,train_labels),(test_images,test_label)=mnist.load_data()
数据处理
#维度调整
train_images=tf.reshape(train_images,(train_images.shape[0],train_images.shape[1],train_images.shape[2],1))
test_images=tf.reshape(test_images,(test_images.shape[0],test_images.shape[1],test_images.shape[2],1))
模型构建
net=tf.keras.models.Sequential([
#卷积层:6个5*5的卷积核
tf.keras.layers.Conv2D(filters=6,kernel_size=5,activation='sigmoid',input_shape=(28,28,1)),
#max pooling
tf.keras.layers.MaxPool2D(pool_size=2,strides=2),
#卷积层:16个5*5的卷积核
tf.keras.layers.Conv2D(filters=16,kernel_size=5,activation='sigmoid'),
#max pooling
tf.keras.layers.MaxPool2D(pool_size=2,strides=2),
#维度调整
tf.keras.layers.Flatten(),
#全连接层
tf.keras.layers.Dense(120,activation='sigmoid'),
tf.keras.layers.Dense(84,activation='sigmoid'),
tf.keras.layers.Dense(10,activation='softmax'),
])
net.summary()
156=5 ∗ \ast ∗ 5 ∗ \ast ∗ 1 ∗ \ast ∗ 6+6
2416是这么来的,5 ∗ \ast ∗ 5 ∗ \ast ∗ 6 ∗ \ast ∗ 16+16=2416
5*5是卷积核大小,6是上一层的通道数,16是本层的卷积核数,16是本层的偏置(也是卷积核数)
模型编译
net.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.9),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
net.fit(train_images,train_labels,epochs=5,batch_size=128)
模型评估
net.evaluate(test_images,test_label)