张量流中占位符的尺寸问题

时间:2019-05-14 09:03:28

标签: python tensorflow

我对tensorflow NN有问题。我收到一个错误“您必须使用dtype float和shape [?,1]输入占位符张量'palceholders_5 / Placeholder'的值”

我尝试了Feed字典中占位符的不同形状以及numpy数组的形状。代码如下。

import numpy as np
import tensorflow as tf

###################################
# data
###################################

N = 100
w_true = 5
b_true = 2
noise_scale = 0.1
x_np = np.random.rand(N,1)
noise = np.random.normal(scale=noise_scale, size = (N,1))
y_np = np.reshape(w_true*x_np+b_true+noise,(-1))

###########################
# Model
###########################

n_hidden = 10

with tf.name_scope("palceholders"):
    x = tf.placeholder(tf.float32, (None,1))
    y = tf.placeholder(tf.float32, (None,))
    keep_prob = tf.placeholder(tf.float32)
with tf.name_scope("hidden-layer"):
    W = tf.Variable(tf.random_normal((1, n_hidden)))
    b = tf.Variable(tf.random_normal((n_hidden,)))
    x_hidden = tf.nn.relu(tf.matmul(x,W) + b)
    #add droput
    x_hidden = tf.nn.dropout(x_hidden, keep_prob)
with tf.name_scope("output"):
    W = tf.Variable(tf.random_normal((n_hidden,1)))
    b = tf.Variable(tf.random_normal((1,)))
    y_logit = tf.matmul(x_hidden, W) + b
    y_one_prob = tf.sigmoid(y_logit)
    y_pred = tf.round(y_one_prob)
with tf.name_scope("loss"):
    y_expand = tf.expand_dims(y,1)
    entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=y_logit, labels=y_expand)
    l = tf.reduce_sum(entropy)
with tf.name_scope("optim"):
    train_op = tf.train.AdamOptimizer(.001).minimize(l)
with tf.name_scope("summaries"):
    tf.summary.scalar("loss",l)
    merged = tf.summary.merge_all()

train_writer = tf.summary.FileWriter("tmp/full-train", tf.get_default_graph())

#########################
# train model
#########################
step = 0
n_epochs = 15
batch_size = 10
dropout_prob = 0.5
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(n_epochs):
        pos = 0 
        while pos < N:
            batch_x = x_np[pos:pos+batch_size]
            batch_x = batch_x.reshape((-1,1))
            print(batch_x.shape)
            batch_y = y_np[pos:pos+batch_size]
            feed_dict = {x:batch_x, y:batch_y, keep_prob:dropout_prob}
            _, summary, loss = sess.run([train_op, merged, l], feed_dict=feed_dict)
            print("epoch %d, step %d, loss %f" % (epoch, step, loss))
            train_writer.add_summary(summary, step)
            step += 1
            pos += batch_size

我得到一个错误:

"InvalidArgumentError: You must feed a value for placeholder tensor 'palceholders_5/Placeholder' with dtype float and shape [?,1]"

0 个答案:

没有答案