InvalidArgumentError: вы должны передать значение для тензора заполнителя «Placeholder_1»

Я обучил простую нейронную сеть с помощью TensorFlow на наборе данных MNIST. Учебная часть кода работает нормально. Однако, когда я загружаю одно изображение в сеть, это дает мне следующую трассировку:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1021, in _do_call
    return fn(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1003, in _run_fn
    status, run_metadata)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 88, in __exit__
    next(self.gen)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tfbasics.py", line 113, in <module>
    classification = sess.run(y, feed_dict)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 766, in run
    run_metadata_ptr)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 964, in _run
    feed_dict_string, options, run_metadata)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1014, in _do_run
    target_list, options, run_metadata)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1034, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'Placeholder_1', defined at:
  File "tfbasics.py", line 20, in <module>
    y = tf.placeholder('float') #labels
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 1587, in placeholder
    name=name)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 2043, in _placeholder
    name=name)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op
    op_def=op_def)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2240, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1128, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Вот мои переменные:

x = tf.placeholder('float', shape = [None, 784]) 
y = tf.placeholder('float') #labels

Здесь я пытаюсь ввести одно число (выбранное случайным образом из набора данных):

#pick random number
num = randint(0, mnist.test.images.shape[0])
img = mnist.test.images[num]

#format the image
inp = np.asarray(img)
inp = np.transpose(inp)
image = np.expand_dims(inp, axis=0) # shape  : (1, 784)


#feed the image into the session
with tf.Session() as sess:
    feed_dict = {x: image}
    classification = sess.run(y, feed_dict)
    print(classification)

Любая помощь будет оценена по достоинству! Я новичок в TensorFlow.


person 1arnav1    schedule 10.04.2018    source источник


Ответы (2)


Ваш feed_dict указывает значение только для x, а не для метки. вы также должны поставить для y place_holder т.е.: {x:image, y:val}

person ofer-a    schedule 10.04.2018
comment
Что я должен кормить в Y? Я пытаюсь получить классификацию, так не будет ли Y действовать как возврат? - person 1arnav1; 10.04.2018
comment
Когда вы обучаете модель, вы сначала задаете некоторые ‹x,y›, где y — результат классификации. После обучения вы можете дать модели новый ввод, и она выведет результаты классификации y. - person ofer-a; 11.04.2018

В вашем коде y является заполнителем:

x = tf.placeholder('float', shape = [None, 784]) 
y = tf.placeholder('float') #labels

Когда вы сообщаете тензорному потоку sess.run(y, ...), он вычисляет значение заполнителя, а не значение вывода (это тензор, с которым y сравнивается в функции потерь). Вот почему оно жалуется.

Вместо этого вы хотите вычислить прогнозируемое значение y. Этого нет в вашем фрагменте кода, но поскольку обучение работает, оно должно быть. Этот тензор зависит от x, поэтому его можно оценить, просто подав значение x.

person Maxim    schedule 10.04.2018
comment
Как именно я должен вводить только значение x? Используя только sess.run(feed_dict)? - person 1arnav1; 10.04.2018
comment
Так же. Вам нужно только изменить тензор, который вы оцениваете - person Maxim; 10.04.2018
comment
Я попробовал это, и теперь, когда я печатаю результат, он показывает мне тензор (784,1) .... - person 1arnav1; 10.04.2018
comment
Я думаю, вам стоит взглянуть на пример — github .com/aymericdamien/TensorFlow-Examples/blob/master/ Правильный тензор называется pred там - person Maxim; 10.04.2018