之前用简单的神经网络实现过一次手写数字识别,这次会使用卷积神经网络来进行识别。
普通的神经网络(ANN)来对图像进行识别时,主要有如下缺点:
1. 参数太多
2. 没有利用像素之间的位置关系,对于图线识别任务来说,每个像素与周围的像素都是联系的很紧密的
3. 神经网络的层数受限制
但是利用卷积神经网络来解决图像识别分类问题,就可以避免上述的问题。
此篇文章中实现卷积神经网络对图像进行分类的步骤如下:
1. 准备数据
2. 卷积、激活、池化(两层)
3. 两层全连接层(第一层先特征加权,然后激活;第二层特征加权)
4. 使用softmax和交叉熵计算损失
5. 用梯度下降减少损失,计算准确率
6. 在运行会话时,进行1000次迭代,每100次打印结果
代码如下:
# 生成权重
def weight_variable(shape):
w = tf.Variable(tf.random_normal(shape=shape, mean=0.0, stddev=1.0))
return w
# 生成偏置
def bias_variable(shape):
b = tf.Variable(tf.constant(0.0, shape=shape))
return b
def model():
"""
搭建的模型函数
:return:模型预测值、样本真实值、特征值
"""
# 1、准确数据的输入占位符,x,y
with tf.variable_scope("data"):
# 特征值
x = tf.placeholder(tf.float32, [None, 784])
# 标签值
y_true = tf.placeholder(tf.int32, [None, 10])
# 2、进行卷积层1
with tf.variable_scope("conv_1"):
# 准备参数ÿ