Как исправить эту ошибку? Я скачал этот код с GitHub.
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].numpy()
выдает ошибку
AttributeError: 'Tensor' object has no attribute 'numpy'
Пожалуйста, помогите мне это исправить!
Я использовал:
sess = tf.Session()
with sess.as_default():
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
И я получаю эту ошибку. Кто-нибудь, помогите мне, я просто хочу, чтобы это работало, почему это так сложно?
D:\Python>python TextGenOut.py
File "TextGenOut.py", line 72
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
^
IndentationError: unexpected indent
D:\Python>python TextGenOut.py
2018-09-16 21:50:57.008663: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2018-09-16 21:50:57.272973: W T:\src\github\tensorflow\tensorflow\core\framework\op_kernel.cc:1275] OP_REQUIRES failed at resource_variable_ops.cc:480 : Not found: Container localhost does not exist. (Could not find resource: localhost/model/embedding/embeddings)
Traceback (most recent call last):
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1278, in _do_call
return fn(*args)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1263, in _run_fn
options, feed_dict, fetch_list, target_list, run_metadata)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1350, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable model/dense/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/model/dense/kernel)
[[Node: model/dense/MatMul/ReadVariableOp = ReadVariableOp[dtype=DT_FLOAT, _device = "/job:localhost/replica:0/task:0/device:CPU:0"](model/dense/kernel)]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "TextGenOut.py", line 72, in <module>
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 680, in eval
return _eval_using_default_session(self, feed_dict, self.graph, session)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 4951, in _eval_using_default_session
return session.run(tensors, feed_dict)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 877, in run
run_metadata_ptr)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1100, in _run
feed_dict_tensor, options, run_metadata)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1272, in _do_run
run_metadata)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py", line 1291, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable model/dense/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/model/dense/kernel)
[[Node: model/dense/MatMul/ReadVariableOp = ReadVariableOp[dtype=DT_FLOAT, _device = "/job:localhost/replica:0/task:0/device:CPU:0"](model/dense/kernel)]]
Caused by op 'model/dense/MatMul/ReadVariableOp', defined at:
File "TextGenOut.py", line 66, in <module>
predictions, hidden = model(input_eval, hidden)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\base_layer.py", line 736, in __call__
outputs = self.call(inputs, *args, **kwargs)
File "TextGenOut.py", line 39, in call
x = self.fc(output)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\engine\base_layer.py", line 736, in __call__
outputs = self.call(inputs, *args, **kwargs)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\keras\layers\core.py", line 943, in call
outputs = gen_math_ops.mat_mul(inputs, self.kernel)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\gen_math_ops.py", line 4750, in mat_mul
name=name)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\op_def_library.py", line 510, in _apply_op_helper
preferred_dtype=default_dtype)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 1094, in internal_convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 1045, in _dense_var_to_tensor
return var._dense_var_to_tensor(dtype=dtype, name=name, as_ref=as_ref) # pylint: disable=protected-access
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 1000, in _dense_var_to_tensor
return self.value()
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 662, in value
return self._read_variable_op()
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\resource_variable_ops.py", line 745, in _read_variable_op
self._dtype)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\gen_resource_variable_ops.py", line 562, in read_variable_op
"ReadVariableOp", resource=resource, dtype=dtype, name=name)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\util\deprecation.py", line 454, in new_func
return func(*args, **kwargs)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 3155, in create_op
op_def=op_def)
File "C:\Users\fried\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 1717, in __init__
self._traceback = tf_stack.extract_stack()
FailedPreconditionError (see above for traceback): Error while reading resource variable model/dense/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/model/dense/kernel)
[[Node: model/dense/MatMul/ReadVariableOp = ReadVariableOp[dtype=DT_FLOAT, _device = "/job:localhost/replica:0/task:0/device:CPU:0"](model/dense/kernel)]]






tf.multinomial возвращает объект Tensor, который содержит 2D-список с нарисованными образцами формы [batch_size, num_samples]. Ожидается, что вызов .eval() для этого тензорного объекта вернет numpy ndarray.
Что-то вроде этого:
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
Вам также необходимо убедиться, что у вас есть активный сеанс (иначе не имеет большого смысла):
sess = tf.Session()
with sess.as_default():
predicted_id = tf.multinomial(tf.exp(predictions), num_samples=1)[0][0].eval()
Извините, если это глупо, но я новичок в python.
ах - это потому, что у вас не установлена сессия. обновление сообщения выше.
@ FriederMüller, вам также следует использовать {эта почта} в качестве справочника.
Я подозреваю, что место, откуда вы скопировали код, имело нетерпеливое исполнение включено, т.е. вызывало tf.enable_eager_execution() в начале программы.
Вы могли бы сделать то же самое. Надеюсь, это поможет.
ОБНОВЛЕНИЕ: обратите внимание, что активное выполнение включено по умолчанию в TensorFlow 2.0. Таким образом, приведенный выше ответ относится только к TensorFlow 1.x
Вот и все, спасибо. Кстати, что делает нетерпеливое исполнение?
Он изменяет API TensirFlie таким образом, чтобы они немедленно выполняли операции с тензорами (в отличие от добавления операций в граф). Подробнее см. Ссылки в ответе выше.
Не могли бы вы добавить другую ссылку, чтобы знать, как это сделать без активного исполнения?
Невероятно ... спасибо! Я столкнулся с тем же самым при использовании официального руководства по TF: \
Я получил ошибку «ValueError: tf.enable_eager_execution должен вызываться при запуске программы».
ссылка сейчас не работает, в ней говорится, что страница 404 не найдена :(
Хм? это сработало для меня на tensorflow 2.0. (не без нетерпеливого исполнения)
Я видел аналогичную ошибку, когда запускал код вроде следующего:
tensor = tf.multiply(ndarray, 42)
tensor.numpy() # throw AttributeError: 'Tensor' object has no attribute 'numpy'
Я использую anaconda 3 с tenorflow 1.14.0. Я обновил тензорный поток с помощью команды ниже
conda update tensorflow
теперь tenorflow - 2.0.0, проблема исправлена. Попробуйте это, чтобы увидеть, решит ли это вашу проблему.
Это все еще проблема в TF 2.0.0
Что ж, если вы видите ответ, проблема в том, что он должен быть нетерпеливым. Вот почему это "исправлено" в TF 2, потому что по умолчанию он имеет активное выполнение. Но проблема всегда одна и та же, вы не можете использовать метод .numpy() в НЕ нетерпеливом исполнении.
Это происходит в более старой версии TF. Так что попробуйте pip install tensorflow --upgrade
в противном случае беги
import tensorflow as tf
tf.enable_eager_execution()
Если вы используете записную книжку Jupyter, перезапустите ядро.
Это также может произойти в TF2.0, если ваш код заключен в функцию @ tf. или внутри слоя Keras. Оба они работают в графическом режиме. Там много тайно взломанного кода, потому что поведение в режиме ожидания и графика различается, и люди не знают, что они переключают контексты, так что будьте осторожны!
Поскольку принятый ответ не решил проблему для меня, я подумал, что это может быть полезно для некоторых людей, которые сталкиваются с проблемой и у которых уже есть версия tenorflow> = 2.2.0 и включено активное выполнение.
Проблема вроде бы в том, что для некоторых функций при примерке model.fit()
Декоратор @tf.function запрещает выполнение таких функций, как tensor.numpy(), по соображениям производительности.
Решением для меня было передать run_eagerly=True флаг model.compile() следующим образом:
model.compile(..., run_eagerly=True)
работал у меня. Бесконечно благодарен.
В Tensorflow 2 есть опция конфигурации для «нетерпеливого» запуска функций, что позволит получать значения Tensor с помощью метода .numpy(). Чтобы включить активное выполнение, используйте следующую команду:
tf.config.run_functions_eagerly(True)
Обратите внимание, что это полезно в основном для отладки.
См. Также: https://www.tensorflow.org/api_docs/python/tf/config/run_functions_eagerly
У меня была такая же проблема в tf.function (): Но что сработало для меня, так это преобразовать массив numpy в тензор тензорного потока через tf.convert_to_tensorДоку, а затем продолжить тензорный поток. Может, этот трюк кому-нибудь пригодится ...
Для людей, у которых все еще есть эта проблема в TF 2.0.0, запустите: tf.config.run_functions_eagerly (True) в верхней части программы ur, она отлично работает!
Объясните, в каком контексте возникла эта ошибка.
теперь я получаю эту ошибку: поднять ValueError («Невозможно оценить тензор с помощью
eval(): нет по умолчанию» ValueError: Невозможно оценить тензор с помощьюeval(): сеанс по умолчанию не зарегистрирован. Используйтеwith sess.as_default()или передайте явный сеанс вeval(session=sess)