【问题标题】:Can't run prediciton because of troubles with tf.placeholder由于 tf.placeholder 的问题,无法运行预测
【发布时间】:2017-12-20 11:14:53
【问题描述】:

抱歉,我是 Tensorflow 的新手。我正在开发一个简单的 onelayer_perceptron 脚本,它只获取初始化参数就可以使用 Tensorflow 训练神经网络:

我的编译器抱怨:

您必须使用 dtype float 为占位符张量“输入”提供一个值

错误发生在这里:

input_tensor = tf.placeholder(tf.float32,[None, n_input],name="input")

请看看我到目前为止做了什么:

1) 我初始化我的输入值

n_input = 10  # Number of input neurons
n_hidden_1 = 10  # Number of hidden layers
n_classes = 3  # Out layers

weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes]))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

2) 初始化占位符:

input_tensor = tf.placeholder(tf.float32, [None, n_input], name="input")
output_tensor = tf.placeholder(tf.float32, [None, n_classes], name="output")

3) 训练神经网络

# Construct model
prediction = onelayer_perceptron(input_tensor, weights, biases)

init = tf.global_variables_initializer() 

4) 这是我的 onelayer_perceptron 函数,它只执行典型的 NN 计算 matmul 层和权重,添加偏差并使用 sigmoid 激活

def onelayer_perceptron(input_tensor, weights, biases):
    layer_1_multiplication = tf.matmul(input_tensor, weights['h1'])
    layer_1_addition = tf.add(layer_1_multiplication, biases['b1'])
    layer_1_activation = tf.nn.sigmoid(layer_1_addition)

    out_layer_multiplication = tf.matmul(layer_1_activation, weights['out'])
    out_layer_addition = out_layer_multiplication + biases['out']

    return out_layer_addition

5) 运行我的脚本

with tf.Session() as sess:
   sess.run(init)

   i = sess.run(input_tensor)
   print(i)

【问题讨论】:

    标签: tensorflow neural-network perceptron


    【解决方案1】:

    您没有将输入提供给占位符;你可以使用feed_dict

    你应该做类似的事情:

     out = session.run(Tensor(s)_you_want_to_evaluate, feed_dict={input_tensor: input of size [batch_size,n_input], output_tensor: output of size [batch size, classes] })
    

    【讨论】:

    • 感谢 vijay m 的帮助。你知道我怎样才能找到 batch_size 吗?
    • out = session.run(input_tensor, feed_dict={input_tensor: [batch_size, n_input], output_tensor: [batch_size, n_classes]})
    • batch_size (min-batch) 是您需要决定的hyperparameter。你可以在这里找到一些信息:stats.stackexchange.com/questions/140811/…。对于这个例子,选择 1000,并编写一个 get_batch() 函数,该函数将返回一批输入、输出样本。
    • 谢谢 vijay.. 改成 out = session.run(input_tensor, feed_dict={input_tensor: [100, n_input], output_tensor: [100, n_classes]}) 但我有一个错误:不能张量“输入:0”的形状(2,)的馈送值,其形状为“(?,10)”无法解决问题...
    • 您必须提供大小为 [100, n_input] 的输入数组,而不是传递值 [100, n_input]。如果这个任务是分类,那么你有一个大小为n_inputs 的输入向量和一个大小为n_classes 的输出。你必须一次喂100个。您可以通过本教程:tensorflow.org/get_started/mnist/mechanics
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2019-11-07
    相关资源
    最近更新 更多