贴吧用户_0RKDb76 295318962
关注数: 5 粉丝数: 5 发帖数: 204 关注贴吧数: 23
请大佬帮忙看看mnist训练哪里出错了 请大佬帮忙看看mnist训练哪里出错了,代码可以稳定运行,但是训练的准确率只有只有0.1左右。 代码如下: # train 55000 # validation 5000 # test 10000 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data input_node=784 # 28*28 output_node=10 layer1_node=500 # layer层 batch_size=100 # 各训练集个数 learning_rate_base=0.8 learning_rate_decay=0.99 regularization_rate=0.0001 # 正则化 training_steps=30000 moving_average_decay=0.99 # 滑动平均衰减率 def inference(input_tensor,# 输入的张量 avg_class,# 变量滑动none weights1,biases1,weights2,biases2): if avg_class==None: layer1=tf.nn.relu(tf.matmul(input_tensor,weights1)+biases1) # ???为什么不用relu return tf.matmul(layer1,weights2)+biases2 else: # avg_class 滑动平均类 average方法,返回对应变量的影子变量 layer1=tf.nn.relu(tf.matmul(input_tensor, avg_class.average(weights1))+ avg_class.average(biases1)) return tf.matmul(layer1,avg_class.average(weights2))+avg_class.average(biases2) def train(mnist): # 输入训练集下x与对应的y_ x=tf.placeholder(tf.float32,[None,input_node],name='x-inpput') y_=tf.placeholder(tf.float32,[None,output_node],name='y-inpput') # stddev 随机数的标准偏差 weights1=tf.Variable(tf.truncated_normal([input_node,layer1_node],stddev=0.1)) #所有值都为0.1的矩阵 biases1=tf.Variable(tf.constant(0.1,shape=[layer1_node])) weights2=tf.Variable(tf.truncated_normal([layer1_node,output_node],stddev=0.1)) biases2=tf.Variable(tf.constant(0.1,shape=[output_node])) y=inference(x,None,weights1,biases1,weights2,biases2) # 训练轮数 global_step=tf.Variable(0,trainable=False) # trainable=False变量不会因为滑动平均变化 # 计算滑动平均值,初始化滑动平均类 variable_averages=tf.train.ExponentialMovingAverage(moving_average_decay,global_step) # 所有代表神经网络参数的变量上使用滑动平均(除去trainable=False) variable_averages_op=variable_averages.apply(tf.trainable_variables()) average_y=inference(x,variable_averages,weights1,biases1,weights2,biases2) cross_entropy_mean=tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1)) regularizer = tf.contrib.layers.l2_regularizer(regularization_rate) regularization = regularizer(weights1)+regularizer(weights2) loss=cross_entropy_mean+regularization #learning_rate=tf.train.exponential_decay(learning_rate_base,global_step,batch_size,learning_rate_decay) learning_rate = learning_rate_base # 梯度下降 为什么附上global_step???? train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step) # 反向传播更新参数??? with tf.control_dependencies([train_step,variable_averages_op]): train_op=tf.no_op(name='train') correct_prediction=tf.equal(tf.argmax(average_y,1),tf.argmax(y_,1)) # 将correct_prediction(正确率)转化成浮点型 accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess: tf.global_variables_initializer().run() # 准备验证数据 validata_feed={x:mnist.validation.images, y_:mnist.validation.labels, } test_feed={x:mnist.test.images, y_:mnist.test.labels, } for i in range(training_steps): if i %1000==0: # 测试神经网络的正确率 validata_acc=sess.run(accuracy,feed_dict=validata_feed) print("after %d .......model is %g" %(i,validata_acc)) xs, ys = mnist.train.next_batch(batch_size) tf.assign(global_step,i) sess.run(train_op,feed_dict={x:xs,y_:ys},) # 神经网络的最终正确率 test_acc=sess.run(accuracy,feed_dict=test_feed) print("after!!! %d .......model is %g" %(training_steps,test_acc)) def main(argv=None): mnist=input_data.read_data_sets("E:\pycharm\\tensorflow\mnist",one_hot=True) train(mnist) if __name__=='__main__': tf.app.run()
1 下一页