运行合并摘要操作时占位符的Feed值出错

时间:2016-06-03 18:38:20

标签: python tensorflow

我是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))

1 个答案:

答案 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])