Tensorflow: Объект TF 2.0 'Tensor' не имеет атрибута 'numpy' при использовании .numpy (), хотя активное выполнение включено по умолчанию

Созданный на 4 апр. 2019  ·  54Комментарии  ·  Источник: tensorflow/tensorflow

Хотя Eager_execution включен по умолчанию в TF 2.0, я получаю ошибки при использовании .numpy ()

Обратите внимание, что я не использую код в режиме совместимости с TF 1.0.

expt = [[[0, 0, 0],
[4, 71, 141],
[0, 0, 0]],

       [[ 83,  25,  85],
        [ 90, 190, 143],
        [  4, 141,  49]],

       [[  0,   0,   0],
        [  4,  71,  49],
        [  0,   0,   0]]]

expt = tf.convert_to_tensor (expt)

ожидаемые_значения = expt.numpy ()

AttributeError: объект 'Tensor' не имеет атрибута 'numpy'

ТЕСТОВАЯ ВЕРСИЯ ЦП TENSORFLOW 2.0.

Fixed in Nightly TF 2.0 core awaiting response support

Самый полезный комментарий

Я была такая же проблема. Оказалось, что я пытался использовать .numpy () внутри функции @ tf. Насколько я понимаю, tf.function не выполняется с нетерпением для повышения производительности. Если я удалю декоратор @ tf.function .numpy () будет работать.

Все 54 Комментарий

@ Mainak431 Вы решили свою проблему?

да.

какое было твое решение?

.Numpy поддерживается только в активном режиме. Если вы находитесь в графическом режиме, он не будет поддерживаться. Чтобы проверить, находитесь ли вы в нетерпеливом режиме. Делай, tf.eagerly (). Возвращает истину или ложь. В режиме графика вы должны использовать eval в сеансе, чтобы получить значение тензора в массиве numpy.

@ Mainak431
модуль 'tenorflow' не имеет атрибута 'нетерпеливо'
модуль 'tensorflow.compat.v1' не имеет атрибута 'нетерпеливо'

Я использую пакет tensorflow-gpu == 2.0.0-alpha0
.numpy () на одном из моих тензоров yield 'Tensor' объект не имеет атрибута 'numpy'

tf.eagerly () дает модуль 'tensorflow' не имеет атрибута 'нетерпеливо'

tf.executing_eagerly () вместо tf.eagerly () работал у меня, чтобы проверить, нахожусь ли я в режиме ожидания

Кто-нибудь нашел для этого решение?

такая же проблема здесь ... я вызываю модель keras в режиме ожидания, и я получаю Tensor, а не EagerTensor, что вызывает проблемы с OpenAI Gym

Запустите эту tf.enable_eager_execution (), а затем, когда вы попробуете tf.executing_eagerly (), она должна дать True. После этого вы можете использовать something.numpy () для просмотра значений.

@AkashNagaraj Я только что подал сообщение о том, что код выполняется с нетерпением (и должен, поскольку это TF 2.0), но у меня проблема с "отсутствующим числом". Не могли бы вы взглянуть? https://github.com/tensorflow/tensorflow/issues/32842

Спасибо!

Я была такая же проблема. Оказалось, что я пытался использовать .numpy () внутри функции @ tf. Насколько я понимаю, tf.function не выполняется с нетерпением для повышения производительности. Если я удалю декоратор @ tf.function .numpy () будет работать.

Я была такая же проблема. Оказалось, что я пытался использовать .numpy () внутри функции @ tf. Насколько я понимаю, tf.function не выполняется с нетерпением для повышения производительности. Если я удалю декоратор @ tf.function .numpy () будет работать.

Это работает для меня, @ tf.function превратил всю функцию в режим графика

Почему в этой ветке не упоминается ни одного решения =. =

У моей функции нет декоратора, но .numpy () по-прежнему не работает, как описано в предыдущих плакатах. Кто-нибудь нашел решение этого?

Я обнаружил, что моя проблема устраняется после вставки tf.compat.v1.enable_eager_execution () в верхнюю часть моего скрипта (очень похоже на то, что было сказано в предыдущих плакатах, но это работает для TF 2.0) ...

У меня такая же проблема, и ни одно из вышеупомянутых решений не помогло мне.

Я использую TF 2.0, моя функция не имеет декоратора, tf.eagerly () возвращает True, и я все равно получаю тот же AttributeError: объект Tensor не имеет атрибута numpy.

Та же проблема.

Я убедился, что выполняю с нетерпением и у меня нет декоратора для моей пользовательской функции потерь. Я также попробовал два комментария Майкла, которые не сработали.

Я получаю сообщение об ошибке: AttributeError: объект 'Tensor' не имеет атрибута 'numpy'

Я заметил, что эта ошибка появляется только тогда, когда я пытаюсь преобразовать тензоры в numpy во время подбора модели. Я предполагаю, что это проблема формы.

Например, следующий тензор

tf.Tensor ([[1 3] [0 4]], shape = (2, 2), dtype = int64)

конвертируется с помощью .numpy (). Однако при попытке реализовать настраиваемую метрику для проблемы классификации y_true.numpy () и y_pred.numpy () повышают

AttributeError: объект Tensor не имеет атрибута numpy.

Вот один из примеров обоих y:

y_true:
print (y_true): Tensor ("density_ target: 0 ", shape = (None, None, None), dtype = float32)
print (введите (y_true)):

y_pred:
print (y_pred): Tensor ("density / Identity: 0 ", shape = (None, None, 6), dtype = float32)
печать (тип (пред)):

@renatomello У меня такая же проблема, как и у вас. Открыл новый выпуск: №35393.

@renatomello проблема все еще сохраняется при попытке реализовать настраиваемую метрику. Вы нашли обходной путь?

@renatomello проблема все еще сохраняется при попытке реализовать настраиваемую метрику. Вы нашли обходной путь?

Нет, я не. Я пытаюсь узнать, есть ли бэкэнд-функция TF / Keras, которая делает что-то подобное, с чем я могу работать. В противном случае мне просто придется создать его самому.

Я столкнулся с этой областью при использовании функций регулярных выражений при предварительной обработке данных. Использование логики Python требует использования tf.py_function как указано в документации, и этого потока StackOverflow (примечание tf.py_func() теперь tf.py_function() )

Как только я изменил свой код с
data = fnames.map(process_path)
к
data = fnames.map(lambda x: tf.py_function(process_path, [x], [tf.string]))
код выполнен правильно.

Я столкнулся с этой проблемой при тестировании слоя TextVectorization в TF2.1 с очень нестандартным split . Что исправило для меня, так это передать dynamic=True TextVectorization .

Я заметил, что эта ошибка появляется только тогда, когда я пытаюсь преобразовать тензоры в numpy во время подбора модели. Я предполагаю, что это проблема формы.

Например, следующий тензор

tf.Tensor ([[1 3] [0 4]], shape = (2, 2), dtype = int64)

конвертируется с помощью .numpy (). Однако при попытке реализовать настраиваемую метрику для проблемы классификации y_true.numpy () и y_pred.numpy () повышают

AttributeError: объект Tensor не имеет атрибута numpy.

Вот один из примеров обоих y:

y_true:
print (y_true): Tensor ("density_ target: 0 ", shape = (None, None, None), dtype = float32)
print (введите (y_true)):

y_pred:
print (y_pred): Tensor ("density / Identity: 0 ", shape = (None, None, 6), dtype = float32)
печать (тип (пред)):

Не знаю причины, но я решил эту проблему, добавив
experimental_run_tf_function=False
в функции компиляции моей модели.

Я заметил, что эта ошибка появляется только тогда, когда я пытаюсь преобразовать тензоры в numpy во время подбора модели. Я предполагаю, что это проблема формы.
Например, следующий тензор

tf.Tensor ([[1 3] [0 4]], shape = (2, 2), dtype = int64)
конвертируется с помощью .numpy (). Однако при попытке реализовать настраиваемую метрику для проблемы классификации y_true.numpy () и y_pred.numpy () повышают
AttributeError: объект Tensor не имеет атрибута numpy.
Вот один из примеров обоих y:
y_true:
print (y_true): Tensor ("density_ target: 0 ", shape = (None, None, None), dtype = float32)
print (введите (y_true)):
y_pred:
print (y_pred): Tensor ("density / Identity: 0 ", shape = (None, None, 6), dtype = float32)
печать (тип (пред)):

Не знаю причины, но я решил эту проблему, добавив
experimental_run_tf_function=False
в функции компиляции моей модели.

В моем случае это не имеет значения

Я столкнулся с этой проблемой при тестировании слоя TextVectorization в TF2.1 с очень нестандартным split . Что исправило для меня, так это передать dynamic=True TextVectorization .

Как именно вы это сделали?

Во-первых, вы должны зарегистрировать сеанс следующим образом:
сессия = tf.Session ()
затем..использовать:
ожидаемые_значения = исключение.значение (сеанс = сессия)
результат должен быть:
печать (ожидаемые_значения)
Из [41]:
array ([[[0, 0, 0],
[4, 71, 141],
[0, 0, 0]]])
благодарить

Я столкнулся с этой проблемой при тестировании слоя TextVectorization в TF2.1 с очень нестандартным split . Что исправило для меня, так это передать dynamic=True TextVectorization .

Как именно вы это сделали?

Нравится. Я все еще изучаю ОД / ФТ в целом, так что, возможно, я поступил неправильно. Это все черная магия, пока она «просто не сработает».

vectorize_layer = tf.keras.layers.experimental.preprocessing.TextVectorization(
    standardize=tf_custom_standardize,
    split=tf_custom_split,
    max_tokens=len(vocab)+1,
    output_mode='int',
    dynamic=True
)

Эта проблема все еще сохраняется для меня. Я не использую аннотацию @ tf.function и выполняю ее с энтузиазмом. Обходной путь, который я использую сейчас, - np.array (yourtensor.to_list ())

Эта проблема все еще сохраняется для меня. Я не использую аннотацию @ tf.function и выполняю ее с энтузиазмом. Обходной путь, который я использую сейчас, - np.array (yourtensor.to_list ())

Это то, что я получаю
AttributeError: 'Tensor' object has no attribute 'to_list'

Согласно кодам в тензорном потоке, когда тензорный объект находится в активном режиме тензора (tensorflow.python.framework.ops.EagerTensor), мы могли бы вызвать tesnsorObj.numpy ()
этот метод реализован в tenorflow / python / framework / ops.py
Но если тензорный объект является общим тензорным, например, принадлежащим tenorflow.python.framework.ops.Tensor, тогда у него не будет метода numpy (), коды реализации также находятся в tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Это означает, что весь тензорный объект, запущенный в функции @ tf., не может вызвать tensorObj.numpy ()
Активный режим работы добавляет гибкости TF2.0, а также усложняет его.

Согласно кодам в тензорном потоке, когда тензорный объект находится в активном режиме тензора (tensorflow.python.framework.ops.EagerTensor), мы могли бы вызвать tesnsorObj.numpy ()
этот метод реализован в tenorflow / python / framework / ops.py
Но если тензорный объект является общим тензорным, например, принадлежащим tenorflow.python.framework.ops.Tensor, тогда у него не будет метода numpy (), коды реализации также находятся в tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Это означает, что весь тензорный объект, запущенный в функции @ tf., не может вызвать tensorObj.numpy ()
Активный режим работы добавляет гибкости TF2.0, а также усложняет его.

Спасибо за подробное объяснение.

Однако в стабильной версии 2.1.0 эта проблема не решена. Мне было указано в # 38038, что это решено в версии tf-nightly 2.2.0.

@renatomello Я новичок в TF. Поэтому я не уверен, поможет ли следующее решить вашу проблему.
Я решаю ошибку AttributeError: 'Tensor' object has no attribute 'numpy' , используя экспериментальную_run_functions_eagerly (True) .
Использую TF вер. 2.1 (Для получения подробной информации о версии см. Вывод консоли ниже). Позвольте объяснить, что я делаю с этим кодом:

import sys
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np

counter=0

class MyDense(layers.Dense):
  def __init__(self, units, activation,input_shape):
    super().__init__(units=units, activation=activation,input_shape=input_shape)

  def call(self, inputs):
      global counter

      counter += 1
      print('\n{}. inputs.numpy()='.format(counter))
      if hasattr(inputs,'numpy'):
          print('{}'.format(inputs.numpy()))
      else:
          print('not available.')

      return super().call(inputs)

def test(run_eagerly):
    print('\n*** *** *** test(run_eagerly={})'.format(run_eagerly))
    tf.config.experimental_run_functions_eagerly(run_eagerly)

    dim0=256
    dim1=24
    train = np.arange(dim0*dim1).reshape(dim0,dim1)
    label = np.ones(dim0)

    model = tf.keras.Sequential()
    model.add(MyDense(10,activation='softmax',input_shape=(dim1,)))

    model.compile(optimizer=tf.keras.optimizers.SGD(),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy())

    model.fit(train,
              label,
              batch_size=dim0,
              epochs=1)

print("Python version")
print (sys.version)
print("TensorFlow version")
print(tf.__version__)
print('\n\n')

test(False)
test(True)

Я выполняю приведенный выше код в консоли редактора Spyder (Spyder Version 4.0.1). Соответствующий вывод консоли (только часть вывода):

Python version
3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0]
TensorFlow version
2.1.0

*** *** *** test(run_eagerly=False)

1. inputs.numpy()=
not available.
Train on 256 samples

2. inputs.numpy()=
not available.

3. inputs.numpy()=
not available.
256/256 [==============================] - 0s 899us/sample - loss: 6344.8682

*** *** *** test(run_eagerly=True)

4. inputs.numpy()=
not available.
Train on 256 samples

5. inputs.numpy()=
[[2328. 2329. 2330. ... 2349. 2350. 2351.]
 [5280. 5281. 5282. ... 5301. 5302. 5303.]
 [2208. 2209. 2210. ... 2229. 2230. 2231.]
 ...
 [5160. 5161. 5162. ... 5181. 5182. 5183.]
 [ 840.  841.  842. ...  861.  862.  863.]
 [6048. 6049. 6050. ... 6069. 6070. 6071.]]
256/256 [==============================] - 0s 132us/sample - loss: 16.1181

Теперь посмотрите на вывод консоли ниже test(run_eagerly=False) : Все три вызова MyDense.call () находятся в состоянии, что input.numpy () недоступен (примечание: если я правильно понимаю, первые два MyDense.call () предназначены только для построения модели. Поэтому важно, что для них нет input.numpy ().). Итак, это имеет смысл.
См. Вывод консоли ниже test(run_eagerly=True) : В пятом MyDense.call () доступен input.numpy (). Так что это тоже имеет значение. И это решает ошибку.

Я была такая же проблема. Оказалось, что я пытался использовать .numpy () внутри функции @ tf. Насколько я понимаю, tf.function не выполняется с нетерпением для повышения производительности. Если я удалю декоратор @ tf.function .numpy () будет работать.

Меня устраивает.

Я пробовал все решения, упомянутые в этой теме, и ни одно из них не помогло мне. Я на 2.2.0-rc2.

В моем случае это не проблема с нетерпеливым исполнением. Ошибка возникает из этих строк, когда я вызываю keras.backend.get_value() :

  if context.executing_eagerly() or isinstance(x, ops.EagerTensor):
    return x.numpy()

Была такая же проблема. Оказывается, что по умолчанию нетерпеливое выполнение отключено при запуске функции подгонки на модели. Чтобы противостоять этому, вы можете запустить: model.run_eagerly = True перед запуском model.fit.
Это сработало для меня как шарм на Tensorflow 2.2.

model.compile (..., run_eagerly = True) работал у меня при создании настраиваемой метрики

У меня была аналогичная проблема при работе с Керасом.
Не знаю, поможет ли это другим, но мне помогли следующие:
Я использовал:
model = Sequential () ранее и изменил это на
модель = tf.keras.Sequential ()
И у меня это сработало.

@ Mainak431 Не могли бы вы снова открыть проблему?

У меня была аналогичная проблема при работе с Керасом.
Не знаю, поможет ли это другим, но мне помогли следующие:
Я использовал:
model = Sequential () ранее и изменил это на
модель = tf.keras.Sequential ()
И у меня это сработало.

На самом деле это было для меня решением, я повторно использовал старый код, который импортировался непосредственно из keras, а не из слоев tensorflow.keras и т. Д., Изменение операторов импорта разрешило ошибку атрибута.

@Blubbaa То же самое. Это было единственное, что у меня сработало.

Если я хочу проверить значение в тензоре, но мне нужно отключить режим ожидания из-за совместимости с tf.placeholder , как мне это сделать? Я пытался добавить tf.enable_eager_execution между слоями без tf.placeholder только чтобы получить эту ошибку ValueError: tf.enable_eager_execution must be called at program startup.

Следующий код работал:

def parse_str(str_tensor):
    raw_string = str_tensor.numpy().decode("utf-8") 

    # play with raw string
    raw_string = 'AAA'+raw_string     
    return raw_string

Вызов функции синтаксического анализа:

def tf_pre_processing(row):
  return tf.py_function(parse_str, [row['context']], [tf.string])


train = t.map(tf_pre_processing).batch(1).take(1)

list(train)

@ Mainak431 Исходный код работал, как ожидалось. Вот суть.

@ tu1258 Нет необходимости отключать tf.compat.v1.placeholder вместо tf.placeholder . Если это по-прежнему не работает, поделитесь автономным кодом, чтобы воспроизвести проблему.

Пожалуйста, дайте мне знать, если возникнут еще вопросы. Спасибо!

Я была такая же проблема. Оказалось, что я пытался использовать .numpy () внутри функции @ tf. Насколько я понимаю, tf.function не выполняется с нетерпением для повышения производительности. Если я удалю декоратор @ tf.function .numpy () будет работать.

Я думаю, что следующий вариант в Tensorflow2.x может помочь
tf.config.run_functions_eagerly

В том месте, где вы вызываете tf.function, вы можете попытаться выполнить его быстро, а затем отключить активное выполнение для tf.function.

Я новичок в tenorflow, но следуя этому руководству (в Jupyter Notebook) https://www.tensorflow.org/tutorials/quickstart/beginner?hl=en , вы получите ошибку

predictions = model(x_train[:1]).numpy()
Tensor object has no attribute 'numpy'

@louisnot Я не могу воспроизвести ошибку. Пожалуйста, проверьте суть здесь . Спасибо!

Если вы столкнулись с ошибкой, не могли бы вы поделиться сутью? Спасибо!

Я не столкнулся с какими-либо проблемами при использовании сути.

Я закрываю эту проблему, так как она была решена в tf-nightly . Если проблема не исчезнет, ​​повторите попытку. Спасибо!

@bhupendrathore Не могли бы вы открыть новый выпуск с помощью простого автономного кода для воспроизведения ошибки? Спасибо!

У меня такая же проблема; когда я исправляю это в вашем решении с помощью pip install tf-nightly , возникают ошибки:

ERROR: Could not find a version that satisfies the requirement tf-nightly (from versions: none)
ERROR: No matching distribution found for tf-nightly

@jvishnuvardhan

@liangzelang, я вижу, вы открыли еще один новый выпуск. мы решим это там. Спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги