前言:这是一篇基于tensorflow框架,创建的只有一层隐藏层的BP神经网络,做的图片识别,内容也比较简单,全当是自己的学习笔记了。

–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-

1、加载MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data mnist =
input_data.read_data_sets('MNIST_data', one_hot=True)
mnist是一个轻量级的类。它以Numpy数组的形式存储着训练、校验和测试数据集,也是Google做图片识别的经典数据集。MNIST数据集下载链接:
https://pan.baidu.com/s/1d9ty82 <https://pan.baidu.com/s/1d9ty82> 密码: jcam

2、运行TensorFlow框架
import tensorflow as tf sess = tf.InteractiveSession() init = tf.global
_variables_initializer() sess.run(init)
TensorFlow框架与后端的连接叫做session,也就是说我们用session启动TensorFlow框架(详情就要自己深入了解了)

3、预定义输入值X,真实值Y
X = tf.placeholder(tf.float32, shape=[None, 784]) Y = tf.placeholder(tf.float
32, shape=[None,10])
* X,Y现由占位符表示,可以在TensorFlow运行某一计算时,根据该占位符输入的具体的值而进行计算;
* tf.float32 是存储的类型;shape=[None,
784]是数据维度大小——因为MNIST数据集中每一张图片大小都是28*28的,计算时候是将28*28的二维数据转换成一个一维的、长度为784的新向量。None表示其值大小不定,意即选中的X、Y的数量暂时不定
4、创建BP神经网络
""" 用随机数列生成的方式,创建含一个隐藏层的神经网络。(784,300,10) """
#truncated_normal:选取位于正态分布均值=0.1附近的随机值 w1 = tf.Variable(tf.truncated_normal([784
,300],stddev=0.1)) w2 = tf.Variable(tf.zeros([300,10])) b1 =
tf.Variable(tf.zeros([300])) b2 = tf.Variable(tf.zeros([10]))
#relu、softmax都为激活函数 L1 = tf.nn.relu(tf.matmul(X,w1)+b1) y =
tf.nn.softmax(tf.matmul(L1,w2)+b2)

BP神经网络输入层有784个神经元、隐藏层300个神经元、输出层10个神经元。初始化各级权重w1、w2;各级偏置值b1、b2——都是采用随机数列生成的方式。定义隐藏层、输出层的计算方式以及各自的激活函数。

5、计算误差并用梯度下降法优化权重
#二次代价函数:计算预测值y与真实值Y之间的误差 loss = tf.reduce_mean(tf.square(Y - y))
#梯度下降法:选用GradientDescentOptimizer优化器,学习率为0.5 train_step = tf.train
.GradientDescentOptimizer(0.5).minimize(loss)

误差也叫损失函数、代价函数。TensorFlow中有大量内置的优化算法,这里我们选用最简单的GradientDescentOptimizer优化器让交叉熵下降,步长为定为0.5

6、计算准确率
#结果存放在一个布尔型列表中 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(Y,1))
#求准确率 accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
*
tf.argmax()函数:是返回对象在某一维上的其数据最大值所对应的索引值,由于这里的标签向量都是由0,1组成,因此最大值1所在的索引位置就是对应的类别标签
* tf.argmax(y,1)返回的是对于任一输入x预测到的标签值,tf.argmax(Y,1)代表正确的标签值
* correct_prediction
这里是返回一个布尔数组。为了计算我们分类的准确率,我们将布尔值转换为浮点数来代表对与错,然后取平均值。例如:[True, False, True,
True]变为[1,0,1,1],计算出准确率就为0.75
7、其他说明
batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run
(train_step,feed_dict=({X:batch_xs,Y:batch_ys})) acc = sess.run
(accuracy,feed_dict={X:mnist.test.images,Y:mnist.test.labels})
* batch_xs与batch_ys:是从MNIST数据集中按批次数取得的:数据项与标签项
* feed_dict=({X:batch_xs,Y:batch_ys}语句:是将batch_xs、batch_ys代表的值传入X、Y
源码与效果展示
# -*- coding:utf-8 -*- # -*- author:zzZ_CMing # -*- 2018/01/23;21:49 # -*-
python3.5 import tensorflow as tf from tensorflow.examples.tutorials.mnist
import input_data import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #读取MNIST数据集
mnist = input_data.read_data_sets("MNIST_data",one_hot=True) #设置每个批次的大小
batch_size =500 #计算一共有多少个批次(地板除) n_batch = mnist.train.num_examples//batch_size
#预定义输入值X、输出真实值Y placeholder为占位符 X = tf.placeholder(tf.float32,[None,784]) Y =
tf.placeholder(tf.float32,[None,10]) """ 用随机数列生成的方式,创建含一个隐藏层的神经网络。(784,300,10)
""" #truncated_normal:选取位于正态分布均值=0.1附近的随机值 w1 =
tf.Variable(tf.truncated_normal([784,300],stddev=0.1)) w2 =
tf.Variable(tf.zeros([300,10])) b1 = tf.Variable(tf.zeros([300])) b2 =
tf.Variable(tf.zeros([10])) #relu、softmax都为激活函数 L1 =
tf.nn.relu(tf.matmul(X,w1)+b1) y = tf.nn.softmax(tf.matmul(L1,w2)+b2)
#二次代价函数:预测值与真实值的误差 loss = tf.reduce_mean(tf.square(Y - y))
#梯度下降法:选用GradientDescentOptimizer优化器,学习率为0.5 train_step =
tf.train.GradientDescentOptimizer(0.5).minimize(loss) #结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(Y,1)) #求准确率
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#初始化变量,激活tf框架
init = tf.global_variables_initializer() sess = tf.Session() sess.run(init)for i
in range(21): for batch in range(n_batch): batch_xs,batch_ys =
mnist.train.next_batch(batch_size)
sess.run(train_step,feed_dict=({X:batch_xs,Y:batch_ys})) acc =
sess.run(accuracy,feed_dict={X:mnist.test.images,Y:mnist.test.labels}) print(
"Iter " + str(i)+",Testing Accuracy "+str(acc))
效果展示:


*
迭代10次的准确率就已经到90.85%,对于现在的技术来说,这个准确率还是比较低的。CNN卷积神经网络对于更为复杂的图片识别准确率都已经能达到98%以上,所以自己的学习之路还得百尺竿头更进一步
* 程序运行起来比较慢,大家全当学习了
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-

系列推荐:

【监督学习】1:KNN算法实现手写数字识别的三种方法
<https://blog.csdn.net/zzz_cming/article/details/78938107>
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-
【无监督学习】1:K-means算法原理介绍,以及代码实现
<https://blog.csdn.net/zzz_cming/article/details/79859490>
【无监督学习】2:DBSCAN算法原理介绍,以及代码实现
<https://blog.csdn.net/zzz_cming/article/details/79863036>
【无监督学习】3:Density Peaks聚类算法(局部密度聚类)
<https://blog.csdn.net/zzz_cming/article/details/79889909>
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-
【深度学习】1:感知器原理,以及多层感知器解决异或问题
<https://blog.csdn.net/zzz_cming/article/details/79031869>
【深度学习】2:BP神经网络的原理,以及异或问题的解决
<https://blog.csdn.net/zzz_cming/article/details/79118894>
【深度学习】3:BP神经网络识别MNIST数据集
<https://blog.csdn.net/zzz_cming/article/details/79136928>
【深度学习】4:BP神经网络+sklearn实现数字识别
<https://blog.csdn.net/zzz_cming/article/details/79182103>
【深度学习】5:CNN卷积神经网络原理、MNIST数据集识别
<https://blog.csdn.net/zzz_cming/article/details/79192815>
【深度学习】8:CNN卷积神经网络识别sklearn数据集(附源码)
<https://blog.csdn.net/zzz_cming/article/details/79691459>
【深度学习】6:RNN递归神经网络原理、MNIST数据集识别
<https://blog.csdn.net/zzz_cming/article/details/79235475>
【深度学习】7:Hopfield神经网络(DHNN)原理介绍
<https://blog.csdn.net/zzz_cming/article/details/79289502>
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-
TensorFlow框架简单介绍 <https://blog.csdn.net/zzz_cming/article/details/79235469>
–—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-——-—-—-—-—-—-—-—-—-—-—-—-—-—-——-

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信