Deep learning 简单的多层感知器模型在张量流中不收敛

Deep learning 简单的多层感知器模型在张量流中不收敛,deep-learning,tensorflow,Deep Learning,Tensorflow,我是TensorFlow的新手。今天我尝试在TF中实现我的第一个模型,但它返回了奇怪的结果。我知道我在这里遗漏了一些东西,但我没能弄明白。故事是这样的 模型 我有一个简单的多层感知器模型,只有一个隐藏层应用于MNIST数据库。层的定义类似于[input(784)、hidden_layer(470)、output_layer(10)],其中tanh为隐藏层的非线性,而softmax为输出层的损耗。我使用的优化器是梯度下降算法,学习率为0.01。我的小批量是1(我是一个接一个样本的训练模型) 我的实

我是TensorFlow的新手。今天我尝试在TF中实现我的第一个模型,但它返回了奇怪的结果。我知道我在这里遗漏了一些东西,但我没能弄明白。故事是这样的

模型 我有一个简单的多层感知器模型,只有一个隐藏层应用于MNIST数据库。层的定义类似于[input(784)、hidden_layer(470)、output_layer(10)],其中
tanh
为隐藏层的非线性,而
softmax
为输出层的损耗。我使用的优化器是梯度下降算法,学习率为
0.01
。我的小批量是1(我是一个接一个样本的训练模型)

我的实现:

首先,我在C++中实现了模型,得到了大约96%的精度。这里是存储库:
  • 我在TensorFlow中实现了精确的模型,但令人惊讶的是,该模型根本没有收敛。这是代码
  • 代码: 导入系统 导入输入数据 将matplotlib.pyplot作为plt导入 从派拉布进口* mnist=输入数据。读取数据集(“/tmp/data/”,one\u hot=True) 导入tensorflow作为tf #参数 学习率=0.1 培训时间=1 批次大小=1 显示步骤=1 #网络参数 n_hidden_1=470#第一层num特征 n#u输入=784#MNIST数据输入(img形状:28*28) n#u类=10#n列出总类数(0-9位) #tf图形输入 x=tf.placeholder(“float”,[None,n_输入]) y=tf.placeholder(“float”,[None,n_类]) #创建模型 def多层感知器(_X,_权重,_偏差): 层1=tf.tanh(tf.add(tf.matmul(X,_权重['h1']),_偏差['b1'])) 返回tf.matmul(层1,_权重['out'])+_偏差['out'] #存储层重量和偏差 权重={ “h1”:tf.变量(tf.random_normal([n_input,n_hidden_1]), 'out':tf.Variable(tf.random\u normal([n\u hidden\u 1,n\u classes])) } 偏差={ 'b1':tf.变量(tf.random_normal([n_hidden_1]), 'out':tf.Variable(tf.random\u normal([n\u类])) } #构造模型 pred=多层感知器(x、权重、偏差) #定义损失和优化器 成本=tf.reduce_平均值(tf.nn.softmax(pred))softmax损失 优化器=tf.train.GradientDescentOptimizer(0.01)。最小化(成本)# #初始化变量 初始化所有变量() #启动图表 使用tf.Session()作为sess: sess.run(初始化) #训练周期 对于范围内的历元(训练历元): 平均成本=0。 m=0 总批次=int(mnist.train.num\u示例/批次大小) 计数器=0 #打印“计数=”,总批次 #系统标准读数(1) #循环所有批次 对于范围内的i(总批次): 批次X,批次Y=mnist.train.next批次(批次大小) label=tf.argmax(批处理,1.eval()[0] 计数器+=1 run(优化器,feed_dict={x:batch_xs,y:batch_ys}) 错误的预测=tf.不相等(tf.argmax(pred,1),tf.argmax(y,1)) 未命中=tf.cast(错误的预测,“浮动”) m+=missed.eval({x:batch_xs,y:batch_ys})[0] 打印“Sample#”,counter,“-Label:”,Label,“-Prediction:”,tf.argmax(pred,1).eval({x:batch_xs,y:batch_ys})[0]\ “-Missed=,m,”-Error Rate=,100*浮点(m)/计数器 打印“优化完成!” 我很好奇为什么会这样。感谢您的帮助

    编辑: 如下所述,成本函数的定义是不正确的,所以应该是

    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,y))
    

    现在模型收敛:)

    成本函数看起来可疑
    tf.nn.softmax()
    计算激活。对于损失,我认为您需要使用
    tf.nn.softmax\u cross\u entropy\u和logits(pred,y)
    。您肯定需要在某个地方使用标签。@user728291谢谢,更改成本定义解决了问题。请回答您自己的问题(可能引用@user728291),并选择它作为接受答案