我是tensorflow的新手,并尝试学习如何使用tensorboard进行可视化。我有一个带有一个隐藏层的神经网络的代码。当我试图在我的jupyter笔记本中运行代码时,它给了我这样的错误:
StatusNotOK Traceback(最近一次调用最后一次) StatusNotOK:无效参数:您必须为占位符张量提供一个值' y_2'与dtype浮动和形状[20,10] [[节点:y_2 = Placeholderdtype = DT_FLOAT,shape = [20,10],_device =" / job:localhost / replica:0 / task:0 / cpu:0"]]
然而,当我评论这一行时:summary = session.run(merged,feed_dict = feed_dict) 这个程序运行正常。 什么地方出了错?努力但却无法理解。帮助赞赏。
n_features = x_train.shape[1]
n_samples = x_train.shape[0]
n_labels = 10
n_hidden = 200
epoch_train = 200
learning_rate = 0.01
batch_size = 20
#build graph
x_tr = tf.placeholder(tf.float32, shape=(None, n_features), name='x')
y_tr = tf.placeholder(tf.float32, shape=(None, n_labels), name='y')
w1 = tf.Variable (tf.truncated_normal([n_features, n_hidden]), name='weight1')
b1 = tf.Variable (tf.zeros([n_hidden]), name='bias1')
w2 = tf.Variable (tf.truncated_normal([n_hidden, n_labels]), name = 'weight2')
b2 = tf.Variable(tf.zeros([n_labels]), name='bias2')
w1_hist = tf.histogram_summary('weight1', w1)
w2_hist = tf.histogram_summary('weight2', w2)
b1_hist = tf.histogram_summary('bias1', b1)
b2_hist = tf.histogram_summary('bias2', b2)
y_hist = tf.histogram_summary('y', y_tr)
with tf.name_scope('hidden') as scope:
z1 = tf.matmul(x_tr, w1)+b1
a1 = tf.nn.relu (z1)
with tf.name_scope('output') as scope:
z2 = tf.matmul(a1, w2)+b2
a2 = tf.nn.softmax (z2)
with tf.name_scope('cost') as scope:
loss = tf.reduce_mean (tf.nn.softmax_cross_entropy_with_logits(z2, y_tr))
cost_summ = tf.scalar_summary ('cost', loss)
with tf.name_scope('train') as scope:
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
def acc (pred, y):
return (np.mean(np.argmax(pred, 1)==np.argmax(y,1)))
#computing
with tf.Session() as session:
session.run(tf.initialize_all_variables())
merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter (' ./logs/logs_1')
for epoch in range (epoch_train):
offset = epoch*batch_size % (x_train.shape[0]-batch_size)
x_tr_batch = x_train[offset:offset+batch_size, :]
y_tr_batch = y_train[offset:offset+batch_size, :]
feed_dict = {x_tr:x_tr_batch, y_tr:y_tr_batch}
_, cost, prediction = session.run ([optimizer, loss, a2], feed_dict=feed_dict)
summary = session.run (merged, feed_dict=feed_dict)
writer.add_summary(summary,epoch)
if epoch % 20 ==0:
print ('training accuracy:', acc(prediction, y_tr_batch))
print ('cost at epoch {} is:'.format(epoch), cost)
pred_ts = session.run (a2, feed_dict = {x_tr:x_test})
print ('test accuracy is:', acc(pred_ts, y_test))
答案 0 :(得分:3)
根据评论中的讨论,我认为合并的摘要merged = tf.merge_all_summaries()
考虑了以前的摘要(来自我不知道在哪里),这取决于未初始化的占位符。
解决此问题的最快方法(除了查找和删除这些以前和未使用过的占位符之外)就是使用tf.merge_summary(...)
来添加您要添加的所有摘要:
merged = tf.merge_summary([w1_hist, b1_hist, w2_hist, b2_hist, y_hist, cost_summ])