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),并选择它作为接受答案