请大佬帮忙看看mnist训练哪里出错了
tensorflow吧
全部回复
仅看楼主
level 2
请大佬帮忙看看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()
2019年03月19日 14点03分 1
level 2
这是代码的图片
2019年03月19日 14点03分 3
level 2
这是代码运行结果的图片
2019年03月19日 14点03分 4
1