卷积神经网络:做图像领域比较好。
对比之前简单的神经网络(输入,隐层,输出),隐层里面只有一个 全连接层。
卷积神经网络(输入,多次 [conv ,一般选取rule函数,pool],全连接,输出)
区别:每一层在前一层基础上学习识别一组特定的特征。
随着神经网络深度增加,节点所能识别的特征也就越来越复杂。
全连接神经网络的缺点
1权重太多
:如果更大的图片,比如200 * 200 * 3=12w个像素点,
输入12w,输出有10个类别 ,就需要120w个权重 .计算量太大
2对于图像识别来说
,像素与周围的像素都是联系比较紧密的。全连接神经网络 没有利用像素之间位置信息,
3层数限制
卷积层
(扩大):通过在原图上平移来提取特征,每一个特征
就是一个特征映射
池化层
(缩小):通过特征后稀疏参数来减少学习的参数,降低
网络的复杂度,(最大池化和平均池化)
发展历史
filter 观察窗体
1.定义一个过滤器(观察窗口) 是有大小的(比如11,33,5*5),
2.观察窗口(带有权重),观察窗口的权重与 窗体里面的像素值 做线性回归
(就有一个输出值) 观察一次就有一个输出值。
3.窗体向右平移(步长),再次观察 又有一个结果输出值
4.步长: 一般选择 1. 观察更加仔细一点。
卷积神经网络识别图片案例
设计:
输入层:输入数据【None,784】 ,None代表图片张图,784 = 28281
输入【None,28,28,1】
一号卷积层:
卷积(32个filter,55窗体大小,stride=1,padding=‘same’)
(输出[None,28,28,32]),
激活,
池化,(22,padding=’same’,stride=2)
(输出[None,14,14,32]),
(输入[None,14,14,32])
二号卷积层:卷积,(64个filter,55,stride=1,padding=‘same’) (输出[None,14,14,64]),
激活,
池化,(22,padding=’same’,stride=2)
(输出[None,7,7,64])
输入 [None,7,7,64] 变化形状 [None,7764]为输入
全连接层:
计算公式 [None ,7764] * [7764 ,10] 权重 + bias = [None,10]
输出层:
最终结果输出[None,10]
None代表有多少张图片,每张图片一个10位one-hot编码结果 例如[0,0,0,0,0,1,0,0,0,0] 代表数字5
# 定义一个初始化权重的函数
def weight_variables(shape):
w = tf.Variable(tf.random_normal(shape=shape, mean=0.0, stddev=1.0))
return w
# 定义一个初始化偏置的函数
def bias_variables(shape):
b = tf.Variable(tf.constant(0.0, shape=shape))
return b
def model():
"""
自定义的卷积模型
:return:
"""
# 1、准备数据的占位符 x [None, 784] y_true [None, 10]
with tf.variable_s