我正在尝试实现一个简单的前馈网络。然而,我无法弄清楚如何从MATLAB中向占位符输入数据。以下是我的示例代码:
运行后出现以下错误:
/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/liutianyuan/PycharmProjects/untitled1/easycode.py
(1, 256)
(1, 1024)
Traceback (most recent call last):
File "/Users/liutianyuan/PycharmProjects/untitled1/easycode.py", line 46, in <module>
sess.run(train)
File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 340, in run
run_metadata_ptr)
File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 564, in _run
feed_dict_string, options, run_metadata)
File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 637, in _do_run
target_list, options, run_metadata)
File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 659, in _do_call
e.code)
tensorflow.python.framework.errors.InvalidArgumentError: **您必须为数据类型为float的占位符张量'Placeholder'提供一个值**
[[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Caused by op u'Placeholder', defined at:
File "/Users/liutianyuan/PycharmProjects/untitled1/easycode.py", line 30, in <module>
xs = tf.placeholder(tf.float32, [None, 256])
File "/Library/Python/2.7/site-packages/tensorflow/python/ops/array_ops.py", line 762, in placeholder
name=name)
File "/Library/Python/2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 976, in _placeholder
name=name)
File "/Library/Python/2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
op_def=op_def)
File "/Library/Python/2.7/site-packages/tensorflow/python/framework/ops.py", line 2154, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/Library/Python/2.7/site-packages/tensorflow/python/framework/ops.py", line 1154, in __init__
self._traceback = _extract_stack()
我已经检查了x_data和y_data的类型和形状,它们似乎是正确的。所以我不知道问题出在哪里。
回答:
您的train
操作依赖于占位符xs
和ys
,因此在调用sess.run(train)
时,您必须为这些占位符提供值。
一种常见的做法是将输入数据分成小批次:
BATCH_SIZE = ...
for step in range(201):
# 注意:您需要额外的代码来处理start_index和/或end_index在x_data和y_data末尾环绕的情况。
start_index = step * BATCH_SIZE
end_index = (step + 1) * BATCH_SIZE
start_index = sess.run(train, {xs: x_data[start_index:end_index,:],
ys: y_data[start_index:end_index,:]})
示例中的代码只是为了让您开始。对于更灵活地生成用于输入的数据,请参阅tf.learn
代码库中的MNIST数据集示例。