训练神经网络4
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import input_data mnist = input_data.read_data_sets('data/',one_hot=True) #one_hot=True编码格式为01编码 n_hidden_1 = 256 n_hidden_2 = 128 n_input = 784 n_classes = 10 x = tf.placeholder("float",[None,n_input]) y = tf.placeholder("float",[None,n_classes]) stddev = 0.1 weights = { 'w1':tf.Variable(tf.random.normal([n_input,n_hidden_1],stddev=stddev)), 'w2':tf.Variable(tf.random.normal([n_hidden_1,n_hidden_2],stddev=stddev)), 'out':tf.Variable(tf.random.normal([n_hidden_2,n_classes],stddev=stddev)) } biases = { 'b1':tf.Variable(tf.random.normal([n_hidden_1])), 'b2':tf.Variable(tf.random.normal([n_hidden_2])), 'out':tf.Variable(tf.random.normal([n_classes])) } print("NETWORK READY") def multilayer_perceptron(_X,_weights,_biases): layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_X,_weights['w1']),_biases['b1'])) layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1,_weights['w2']),_biases['b2'])) return (tf.matmul(layer_2,_weights['out']) + _biases['out']) pred = multilayer_perceptron(x, weights, biases) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(pred,y)) #tensorflow中已有的交叉熵函数 optm = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost) corr = tf.equal(tf.argmax(pred,1),tf.argmax(y,1)) accr = tf.reduce_mean(tf.cast(corr,"float")) init = tf.compat.v1.global_variables_initializer() print("FUNCTIONS READY") training_epochs = 20 #一共迭代20次 batch_size = 100 #每一次迭代选择100个样本 display_step = 4 sess = tf.compat.v1.Session() sess.run(init) for epoch in range(training_epochs): avg_cost = 0 num_batch = int(mnist.train.num_examples/batch_size) for i in range(num_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) sess.run(optm,feed_dict={x:batch_xs,y:batch_ys}) feeds = {x:batch_xs,y:batch_ys} avg_cost += sess.run(cost,feed_dict=feeds)/num_batch if epoch % display_step == 0: #每四轮打印一次 print("Epoch: %02d/%02d cost: %.6f" % (epoch, training_epochs, avg_cost)) feeds = {x: batch_xs, y: batch_ys} train_acc = sess.run(accr, feed_dict=feeds) # 训练集的精度 print("TRAIN ACCURACY: %.3f" % (train_acc)) feeds = {x: mnist.test.images, y: mnist.test.labels} test_acc = sess.run(accr, feed_dict=feeds) # 测试集的精度 print("TEST ACCURACY: %.3f" % (test_acc)) print("FINISHED")