全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。
参数个数:(前层×后层+后层)的和
问题:
待优化的参数过多容易导致模型过拟合。
实际应用:
会先对原始图像进行特征提取再把提取到的特征喂给全连接网络。
卷积(convolutional):卷积可认为是一种有效提取图像特征的方法。
一般会用正方形卷积核,遍历图片上的每个点。图片区域内,相对应的每一个像素值,乘以卷积核内相对应点的权重,求和,再加上偏置。
没有池化:输出图片边长=(输入图片的边长-卷积核长+1)/步长 (向上取整)
池化(padding)(在图片周围进行全零填充):输入 图片边长/步长 (向上取整)
在tensorflow框架中,用参数padding='SAME'或padding='VALID'表示
tensorflow计算卷积:
tf.nn.conv2d(输入描述,eg.[batch_size,5,5,1]
卷积核描述,eg.[3,3,1,16]
核滑动步长,[1,1(行步长),1(列步长),1]
padding='VALID')
三通道(每个通道的卷积值相加,输出是1个通道):
池化(pooling):池化用于减少特征数量,最大值池化可提取图片的纹理,均值池化可保留背景特征。
tensorflow计算池化:
pool = tf.nn.max_pool/tf.nn.avg_pool(输入描述,eg.[batch,28,28,6]
池化核描述(仅大小),eg.[1,2,2,1]
池化核滑动步长,eg.[1,2,2,1]
padding='SAME')
舍弃dropout:在神经网络的训练过程中,将一部分神经元按照一定概率从神经网络中暂时舍弃。使用时被舍弃的神经元恢复链接
tf.nn.dropout(上层输出,暂时舍弃的概率)
if train:输出 = tf.nn.dropout(上层输出,暂时舍弃的概率)
卷积NN:借助卷积核(kernel)提取特征后,送入全连接网络
CNN模型的主要模块:卷积(convolution)-激活(activation)-池化(pooling)-全连接(fc)
cnn模型的发展历史:lenet-5 ---AlexNet---VGGNet---GoogleNet---ResNet---.....