Tensorflow: 在MNIST数据集上训练线性分类器的权重可视化

我在MNIST数据集上训练了一个线性分类器,准确率达到了92%。然后我固定了权重,并优化了输入图像,使得8的softmax概率最大化。但softmax损失值始终无法降到2.302以下(-log(1/10)),这意味着我的训练是无效的。我做错了什么?

训练权重的代码:

在固定权重下训练图像的代码:

#将训练好的权重复制到W,B中,并将它们作为占位符传递给新模型
W=sess.run(w)
B=sess.run(b)
X=tf.Variable(tf.random_normal([1, 784], stddev=0.01))
Y=tf.constant([0, 0, 0, 0, 0, 0, 0, 0, 1, 0])
w=tf.placeholder("float")
b=tf.placeholder("float")
o = tf.nn.sigmoid(tf.matmul(X, w)+b)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=o, labels=Y))
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
predict_op = tf.argmax(o, 1)
sess.run(tf.global_variables_initializer())
for i in range(1000):
  sess.run(train_op, feed_dict={w:W, b:B})
  if i%50==0:
    sess.run(cost, feed_dict={w:W, b:B})
    print(i, sess.run(predict_op, feed_dict={w:W, b:B}))

回答:

你不应该在网络输出上调用tf.sigmoidsoftmax_cross_entropy_with_logits假设你的输入是logits,即不受约束的实数。使用

o = tf.matmul(X, w)+b

可以将准确率提高到92.8%。

有了这个修改,你的第二次训练就会成功。成本会降到0,尽管生成的图像并不令人满意。

enter image description here

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注