BP神经网络实现mnist分类
程序员文章站
2023-12-30 19:40:28
...
1.思路
使用两层隐藏层的神经网络来实现mnist分类,这里不使用卷积神经网络来处理。
两层隐藏层含有神经元数量分别为100和200。
2.代码
# -*- coding: utf-8 -*-
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
def get_data():
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
return mnist
def weight_variable(shape):
# 产生随机数
init = tf.truncated_normal(shape,stddev = 0.1)
return tf.Variable(init)
def bias_variable(shape):
init = tf.constant(0.1,shape = shape)
return tf.Variable(init)
def network(mnist):
# 第一层隐藏层,100个神经元
X = tf.placeholder(tf.float32,shape = [None,784])
weight1 = weight_variable([784,100])
bias1 = bias_variable([100])
h1 = tf.nn.sigmoid(tf.matmul(X,weight1)+bias1)
# 第二层隐藏层,100个神经元
weight2 = weight_variable([100,200])
bias2 = bias_variable([200])
h2 = tf.nn.sigmoid(tf.matmul(h1,weight2)+bias2)
# 输出层
weight3 = weight_variable([200,10])
bias3 = bias_variable([10])
h3 = tf.nn.sigmoid(tf.matmul(h2,weight3)+bias3)
# 配置dropout层
keep_prob = tf.placeholder("float")
h3_drop = tf.nn.dropout(h3, keep_prob)
# softmax输出层
y_predict = tf.nn.softmax(h3_drop)
# 接受label
y_label = tf.placeholder(dtype=tf.float32,shape = [None,10])
# 损失函数----交叉熵函数
loss = -tf.reduce_sum(y_label * tf.log(y_predict))
# 优化器反向传播
train_step = tf.train.AdamOptimizer(learning_rate=1e-3).minimize(loss)
# 准确率
prediction = tf.equal(tf.argmax(y_predict,1),tf.argmax(y_label,1))
accuracy = tf.reduce_mean(tf.cast(prediction,"float"))
# 初始化参数
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
# 开始训练
for i in range(1000):
train_set = mnist.train.next_batch(50)
if i%100 == 0:
train_acc = accuracy.eval(feed_dict = {X:train_set[0],y_label:train_set[1],keep_prob:1})
print("step %d,training accuracy is %g"%(i,train_acc))
else:
sess.run(train_step,feed_dict={X:train_set[0],y_label:train_set[1],keep_prob:0.5})
# 测试网络性能
point = 0
for i in range(10):
test_set = mnist.test.next_batch(50)
temp_point = sess.run(accuracy,feed_dict={X:test_set[0],y_label:test_set[1],keep_prob : 1})
print(temp_point)
point += temp_point
average_point = point/10
print("average_point:%g"%(average_point))
if __name__ =="__main__":
mnist = get_data()
network(mnist)
3.结果
step 0,training accuracy is 0.16
step 100,training accuracy is 0.44
step 200,training accuracy is 0.72
step 300,training accuracy is 0.86
step 400,training accuracy is 0.92
step 500,training accuracy is 0.92
step 600,training accuracy is 0.86
step 700,training accuracy is 0.86
step 800,training accuracy is 0.92
step 900,training accuracy is 0.96
0.88
0.94
0.92
0.9
0.92
0.9
0.88
0.86
0.98
0.88
average_point:0.906
Process finished with exit code 0
推荐阅读
-
5.1tensorflow5.1神经网络调参实现mnist数据集分类正确率98%以上(实现动态学习率调整)
-
BP神经网络实现mnist分类
-
MNIST识别分类网络实现
-
BP神经网络手写数字识别软件EasyOCR 1.2.0发布,新增MNIST数据集图片和宽幅数字识别 神经网络人工智能BP神经网络手写数字识别OCR
-
PyTorch上搭建简单神经网络实现回归和分类的示例
-
(sklearn:Logistic回归)和(keras:全连接神经网络)完成mnist手写数字分类
-
Python实现的三层BP神经网络算法示例
-
神经网络(BP)算法Python实现及应用
-
tensorflow使用神经网络实现mnist分类
-
基于tensorflow实现mnist手写识别 (多层神经网络)