python - tensorflow 中损失的 logits 可以是占位符
问题描述
我使用 tensorflow 来实现手写数字识别。希望softmax_cross_entropy_with_logits中的logits先用占位符表示,然后在计算的时候通过计算的值传给占位符,但是tensorflow会报错ValueError: No gradients provided for any variable, check Your graph for ops that do not support渐变。我知道直接将 logits 更改为输出是可以的,但如果我必须使用 logits,结果首先是占位符。我该如何解决?
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/home/as/downloads/resnet-152_mnist-master/mnist_dataset", one_hot=True)
from tensorflow.contrib.layers import fully_connected
x = tf.placeholder(dtype=tf.float32,shape=[None,784])
y = tf.placeholder(dtype=tf.float32,shape=[None,10])
hidden1 = fully_connected(x,100,activation_fn=tf.nn.elu,
weights_initializer=tf.random_normal_initializer())
hidden2 = fully_connected(hidden1,200,activation_fn=tf.nn.elu,
weights_initializer=tf.random_normal_initializer())
hidden3 = fully_connected(hidden2,200,activation_fn=tf.nn.elu,
weights_initializer=tf.random_normal_initializer())
outputs = fully_connected(hidden3,10,activation_fn=None,
weights_initializer=tf.random_normal_initializer())
a = tf.placeholder(tf.float32,[None,10])
loss = tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=a)
reduce_mean_loss = tf.reduce_mean(loss)
equal_result = tf.equal(tf.argmax(outputs,1),tf.argmax(y,1))
cast_result = tf.cast(equal_result,dtype=tf.float32)
accuracy = tf.reduce_mean(cast_result)
train_op = tf.train.AdamOptimizer(0.001).minimize(reduce_mean_loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(30000):
xs,ys = mnist.train.next_batch(128)
result = outputs.eval(feed_dict={x:xs})
sess.run(train_op,feed_dict={a:result,y:ys})
print(i)
解决方案
推荐阅读
- bluetooth-lowenergy - 如何使用 RxBluetooth 将多个订阅连接到 RxSwift 中的 Disposable?
- google-cloud-platform - 在 Google Cloud Platform 上实例化 VM(计算引擎)的脚本问题
- google-sheets - 最近几天的谷歌表格数据过滤器
- linux - 被动操作系统指纹更改为 MacOS
- ethereum - 以太坊DAPP——了解
- php - HTML 文本表单元素仅显示 PHP 数组中的第一个单词
- text - 如何创建文本文件、命名并填充内容?
- java - Microsoft Azure IoT 中心 (java) 通知“与服务器的连接丢失。重新连接 0 次。” 发送消息后
- amazon-web-services - AWS 中的 Terraform - 如何开始
- osgi - OSGi DS 原型参考未发布