基于tensorflow框架的神经网络结构处理mnist数据集

一、构建计算图

  1. 准备训练数据
  2. 定义前向计算过程 Inference
  3. 定义loss(loss,accuracy等scalar用tensorboard展示)
  4. 定义训练方法
  5. 变量初始化
  6. 保存计算图

二、创建会话

  1. summary对象处理
  2. 喂入数据,得到观测的loss,accuracy等
  3. 用测试数据测试模型
import tensorflow as tf
import numpy as np
import os
from tensorflow.examples.tutorials.mnist import input_data
os.environ['TF_CPP_MIN_LOG_LEVEl']='3'
#
tf.reset_default_graph()
mnist = input_data.read_data_sets('D:\MyData\zengxf\.keras\datasets\MNIST_data',one_hot=True)
xq,yq = mnist.train.next_batch(2)# (2, 784),(2,10)# Inputh1 = 100
h2 = 10with tf.name_scope("Input"):X = tf.placeholder("float",[None,784],name='X')Y_true = tf.placeholder("float",[None,10],name='Y_true')
with tf.name_scope("Inference"):with tf.name_scope("hidden1"):W1 = tf.Variable(tf.random_normal([784, h1])*0.1, name='W1')# W1 = tf.Variable(tf.zeros([784, h1]), name='W1')b1 = tf.Variable(tf.zeros([h1]), name='b1')y_1 = tf.nn.sigmoid(tf.matmul(X, W1)+b1)# (None,h1)with tf.name_scope("hidden2"):W2 = tf.Variable(tf.random_normal([h1, h2])*0.1, name='W2')# W2 = tf.Variable(tf.zeros([h1, h2]), name='W2')b2 = tf.Variable(tf.zeros([h2]), name='b2')y_2 = tf.nn.sigmoid(tf.matmul(y_1, W2)+b2)# (h1,h2)with tf.name_scope("Output"):W3 = tf.Variable(tf.truncated_normal([h2, 10])*0.1, name='W3')# W3 = tf.Variable(tf.zeros([h2, 10]), name='W3')b3 = tf.Variable(tf.zeros([10]), name='b3')y = tf.nn.softmax(tf.matmul(y_2, W3)+ b3)# (None,10)
with tf.name_scope("Loss"):loss = tf.reduce_mean(-tf.reduce_sum(tf.multiply(Y_true,tf.log(y))))loss_scalar = tf.summary.scalar('loss',loss)accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(y,1),tf.argmax(Y_true,1)),tf.float32))accuracy_scalar = tf.summary.scalar('accuracy', accuracy)# loss = tf.reduce_mean(-tf.reduce_sum(Y_true * tf.log(y)))# l = tf.multiply(Y_true,tf.log(y))with tf.name_scope("Trian"):# optimizer = tf.train.AdamOptimizer(learning_rate=0.05)optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)train_op = optimizer.minimize(loss)init = tf.global_variables_initializer()
merge_summary_op = tf.summary.merge_all()
# tf.merge_all_summaries()
writer = tf.summary.FileWriter('logs', tf.get_default_graph())
sess = tf.Session()
sess.run(init)#
for step in range(5000):# train_summary = sess.run(merge_summary_op,feed_dict =  {...})#调用sess.run运行图,生成一步的训练过程数据train_x,train_y = mnist.train.next_batch(500)_,summary_op,train_loss,acc= sess.run([train_op,merge_summary_op,loss,accuracy],feed_dict={X:train_x,Y_true:train_y})if step%100==99:print('loss=',train_loss)# print(sess.run(y,feed_dict={X:train_x}))# summary_op = sess.run(merge_summary_op)writer.add_summary(summary_op,step)
#测试集上预测
print(sess.run(accuracy, feed_dict={X: mnist.test.images, Y_true: mnist.test.labels}))  # 0.9185
writer.close()
# #正确的预测结果
# correct_prediction = tf.equal(tf.argmax(Y_true, 1), tf.argmax(y, 1))
# # 计算预测准确率,它们都是Tensor
# accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# # 在Session中运行Tensor可以得到Tensor的值
# # 这里是获取最终模型的正确率


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部