深度神经网络——卷积神经网络CNN

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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40527560/article/details/131507502