Tensorflow: El objeto TF 2.0 'Tensor' no tiene atributo 'numpy' mientras se usa .numpy () aunque la ejecución ansiosa está habilitada de forma predeterminada

Creado en 4 abr. 2019  ·  54Comentarios  ·  Fuente: tensorflow/tensorflow

Aunque Eager_execution está habilitado de forma predeterminada en TF 2.0, obtengo errores al usar .numpy ()

Tenga en cuenta que no estoy usando el código en modo de compatibilidad con 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)

valores_esperados = expt.numpy ()

AttributeError: el objeto 'Tensor' no tiene atributo 'numpy'

VERSIÓN DE PRUEBA DE CPU DE TENSORFLOW 2.0.

Fixed in Nightly TF 2.0 core awaiting response support

Comentario más útil

Tuve el mismo problema. Resultó que estaba tratando de usar .numpy () dentro de una función @ tf. Por lo que tengo entendido, tf.function no se ejecuta con entusiasmo por motivos de rendimiento. Si elimino el decorador @ tf.function .numpy () funciona.

Todos 54 comentarios

@ Mainak431 ¿Resolvió su problema?

Si.

cual fue tu solucion

.Numpy solo se admite en modo ansioso. Si está en modo gráfico, no será compatible. Para comprobar, si está en modo ansioso. Hazlo con entusiasmo (). Devuelve verdadero o falso. En el modo gráfico, debe usar eval en una sesión para obtener el valor del tensor en una matriz numpy.

@ Mainak431
el módulo 'tensorflow' no tiene ningún atributo 'ansiosamente'
el módulo 'tensorflow.compat.v1' no tiene ningún atributo 'ansiosamente'

Estoy usando el paquete tensorflow-gpu == 2.0.0-alpha0
.numpy () en uno de mis tensores produce el objeto 'Tensor' no tiene atributo 'numpy'

tf.eagerly () da el módulo 'tensorflow' no tiene ningún atributo 'ansiosamente'

tf.executing_eagerly () en lugar de tf.eagerly () funcionó para mí para verificar si estoy en modo ansioso

¿Alguien ha encontrado una solución para esto?

mismo problema aquí ... invoco un modelo de keras en modo ansioso y obtengo un Tensor, no un EagerTensor, que causa problemas con OpenAI Gym

Ejecute este tf.enable_eager_execution () y luego, cuando intente tf.executing_eagerly (), debería dar True. Después de esto, puede usar something.numpy () para ver los valores.

@AkashNagaraj Acabo de presentar un problema en el que el código se ejecuta con entusiasmo (y debería, ya que es TF 2.0), pero tengo un problema de "falta de número". ¿Le importaría echar un vistazo? https://github.com/tensorflow/tensorflow/issues/32842

¡Gracias!

Tuve el mismo problema. Resultó que estaba tratando de usar .numpy () dentro de una función @ tf. Por lo que tengo entendido, tf.function no se ejecuta con entusiasmo por motivos de rendimiento. Si elimino el decorador @ tf.function .numpy () funciona.

Tuve el mismo problema. Resultó que estaba tratando de usar .numpy () dentro de una función @ tf. Por lo que tengo entendido, tf.function no se ejecuta con entusiasmo por motivos de rendimiento. Si elimino el decorador @ tf.function .numpy () funciona.

Esto funciona para mí, @ tf.function convirtió toda la función en modo gráfico

¿Por qué no se menciona una sola solución en este hilo =. =

Mi función no tiene un decorador, pero .numpy () aún falla como se describe en los carteles anteriores. ¿Alguien ha encontrado una solución a esto?

Descubrí que mi problema se soluciona después de insertar tf.compat.v1.enable_eager_execution () en la parte superior de mi secuencia de comandos (muy similar a lo que han dicho los carteles anteriores, pero esto funciona para TF 2.0) ...

Tengo el mismo problema y ninguna de las soluciones antes mencionadas funcionó para mí.

Estoy usando TF 2.0, mi función no tiene un decorador, tf.eagerly () devuelve True y todavía obtengo el mismo AttributeError: el objeto 'Tensor' no tiene el atributo 'numpy'.

El mismo problema.

Me aseguré de estar ejecutando con entusiasmo y no tengo un decorador en mi función de pérdida personalizada. También probé la solución dos de Michael, que no funcionó.

Me sale el error: AttributeError: el objeto 'Tensor' no tiene atributo 'numpy'

Noté que este error solo aparece cuando intento convertir tensores en numpy durante un ajuste de modelo. Mi mejor suposición es que parece ser un problema de forma.

Por ejemplo, el siguiente tensor

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

es convertible usando .numpy (). Sin embargo, al intentar implementar una métrica personalizada para un problema de clasificación, tanto y_true.numpy () como y_pred.numpy () aumentan

AttributeError: el objeto 'Tensor' no tiene el atributo 'numpy'.

Aquí hay un ejemplo de ambas y:

y_verdadero:
print (y_true): Tensor ("dense_ target: 0 ", shape = (None, None, None), dtype = float32)
imprimir (tipo (y_true)):

y_pred:
print (y_pred): Tensor ("denso / Identidad: 0 ", forma = (Ninguno, Ninguno, 6), dtype = float32)
imprimir (tipo (pred)):

@renatomello Estoy teniendo el mismo problema que tú. Abrí un nuevo número: # 35393.

@renatomello, el problema persiste al intentar implementar una métrica personalizada. ¿Encontraste una solución?

@renatomello, el problema persiste al intentar implementar una métrica personalizada. ¿Encontraste una solución?

No, no lo hice. Estoy tratando de ver si hay una función de backend TF / Keras que haga algo similar con lo que pueda trabajar. De lo contrario, tendré que crear uno yo mismo.

Encontré esta área al usar las funciones de expresiones regulares dentro del preprocesamiento de datos. El uso de la lógica de Python requiere el uso de tf.py_function como se menciona en los documentos y este hilo de StackOverflow ( tf.py_func() ahora es tf.py_function() )

Una vez que cambié mi código de
data = fnames.map(process_path)
a
data = fnames.map(lambda x: tf.py_function(process_path, [x], [tf.string]))
el código se ejecutó correctamente.

Me encontré con este problema mientras probaba la capa TextVectorization en TF2.1 con un split muy personalizado. Lo que me arregló fue pasar dynamic=True a la construcción TextVectorization .

Noté que este error solo aparece cuando intento convertir tensores en numpy durante un ajuste de modelo. Mi mejor suposición es que parece ser un problema de forma.

Por ejemplo, el siguiente tensor

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

es convertible usando .numpy (). Sin embargo, al intentar implementar una métrica personalizada para un problema de clasificación, tanto y_true.numpy () como y_pred.numpy () aumentan

AttributeError: el objeto 'Tensor' no tiene el atributo 'numpy'.

Aquí hay un ejemplo de ambas y:

y_verdadero:
print (y_true): Tensor ("dense_ target: 0 ", shape = (None, None, None), dtype = float32)
imprimir (tipo (y_true)):

y_pred:
print (y_pred): Tensor ("denso / Identidad: 0 ", forma = (Ninguno, Ninguno, 6), dtype = float32)
imprimir (tipo (pred)):

No sé el motivo, pero resolví ese problema agregando
experimental_run_tf_function=False
en función de compilación de mi modelo.

Noté que este error solo aparece cuando intento convertir tensores en numpy durante un ajuste de modelo. Mi mejor suposición es que parece ser un problema de forma.
Por ejemplo, el siguiente tensor

tf.Tensor ([[1 3] [0 4]], forma = (2, 2), dtype = int64)
es convertible usando .numpy (). Sin embargo, al intentar implementar una métrica personalizada para un problema de clasificación, tanto y_true.numpy () como y_pred.numpy () aumentan
AttributeError: el objeto 'Tensor' no tiene el atributo 'numpy'.
Aquí hay un ejemplo de ambas y:
y_verdadero:
print (y_true): Tensor ("dense_ target: 0 ", shape = (None, None, None), dtype = float32)
imprimir (tipo (y_true)):
y_pred:
print (y_pred): Tensor ("denso / Identidad: 0 ", forma = (Ninguno, Ninguno, 6), dtype = float32)
imprimir (tipo (pred)):

No sé el motivo, pero resolví ese problema agregando
experimental_run_tf_function=False
en función de compilación de mi modelo.

No parece que haya diferencia en mi caso.

Me encontré con este problema mientras probaba la capa TextVectorization en TF2.1 con un split muy personalizado. Lo que me arregló fue pasar dynamic=True a la construcción TextVectorization .

¿Cómo hiciste eso exactamente?

Primero, debe registrar la sesión de la siguiente manera:
sess = tf.Session ()
entonces..use:
valores_esperados = expt.eval (sesión = sess)
el resultado debería ser:
imprimir (valores_esperados)
Fuera [41]:
matriz ([[[0, 0, 0],
[4, 71, 141],
[0, 0, 0]]])
gracias

Me encontré con este problema mientras probaba la capa TextVectorization en TF2.1 con un split muy personalizado. Lo que me arregló fue pasar dynamic=True a la construcción TextVectorization .

¿Cómo hiciste eso exactamente?

Como esto. Todavía estoy aprendiendo ML / FT en general, por lo que esto puede haber sido algo incorrecto. Todo es magia negra hasta que 'simplemente funciona'.

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
)

Este problema aún persiste para mí. No estoy usando la anotación @ tf.function y ejecuto con entusiasmo. La solución alternativa que estoy usando ahora es np.array (yourtensor.to_list ())

Este problema aún persiste para mí. No estoy usando la anotación @ tf.function y ejecuto con entusiasmo. La solución alternativa que estoy usando ahora es np.array (yourtensor.to_list ())

Esto es lo que obtengo
AttributeError: 'Tensor' object has no attribute 'to_list'

De acuerdo con los códigos en tensorflow, cuando el objeto tensor está en modo ansioso tensor (tensorflow.python.framework.ops.EagerTensor), podríamos llamar tesnsorObj.numpy ()
este método se implementa en tensorflow / python / framework / ops.py
Pero si el objeto tensor es un tensor general, por ejemplo, que pertenece a tensorflow.python.framework.ops.Tensor, entonces no tendrá el método numpy (), los códigos de implementación también están en tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Significa que todos los objetos de tensor que se ejecutan en @ tf.function no pudieron llamar a tensorObj.numpy ()
El modo de ejecución impaciente añade flexibilidad a TF2.0 y también le añade complejidad.

De acuerdo con los códigos en tensorflow, cuando el objeto tensor está en modo ansioso tensor (tensorflow.python.framework.ops.EagerTensor), podríamos llamar tesnsorObj.numpy ()
este método se implementa en tensorflow / python / framework / ops.py
Pero si el objeto tensor es un tensor general, por ejemplo, que pertenece a tensorflow.python.framework.ops.Tensor, entonces no tendrá el método numpy (), los códigos de implementación también están en tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Significa que todos los objetos de tensor que se ejecutan en @ tf.function no pudieron llamar a tensorObj.numpy ()
El modo de ejecución impaciente añade flexibilidad a TF2.0 y también le añade complejidad.

Gracias por la explicación detallada.

Sin embargo, este problema no se resuelve en la versión estable 2.1.0. Se me indicó en el # 38038 que está resuelto en la versión 2.2.0 de tf-nightly.

@renatomello Soy un novato en TF. Por lo tanto, no estoy seguro de si lo siguiente ayudará a resolver su problema.
Resuelvo el error AttributeError: 'Tensor' object has no attribute 'numpy' , mediante el uso de experimental_run_functions_eagerly (True) .
Yo uso TF ver. 2.1 (Para obtener información detallada sobre la versión, consulte el resultado de la consola a continuación). Permito explicar lo que estoy haciendo con este código:

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)

Ejecuto el código anterior en la consola del editor Spyder (Spyder Versión 4.0.1). La salida de la consola correspondiente es (solo partes de la salida):

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

Ahora, vea en la salida de la consola a continuación test(run_eagerly=False) : Las tres llamadas MyDense.call () indican que input.numpy () no está disponible (Nota al margen: cuando lo entiendo correctamente, las dos primeras MyDense.call Las llamadas () son solo para construir el modelo. Por lo tanto, es significativo que no tengan input.numpy () disponible). Entonces, esto es significativo.
Vea en la salida de la consola a continuación test(run_eagerly=True) : En el quinto MyDense.call () está input.numpy () disponible. Entonces, esto también es significativo. Y soluciona el error.

Tuve el mismo problema. Resultó que estaba tratando de usar .numpy () dentro de una función @ tf. Por lo que tengo entendido, tf.function no se ejecuta con entusiasmo por motivos de rendimiento. Si elimino el decorador @ tf.function .numpy () funciona.

Esto funciona para mi.

Probé todas las soluciones mencionadas en este hilo y ninguna de ellas funcionó para mí. Estoy en 2.2.0-rc2.

En mi caso, no parece ser un problema con la ejecución ansiosa. El error proviene de estas líneas cuando llamé keras.backend.get_value() :

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

Tuve el mismo problema. Resulta que, de forma predeterminada, la ejecución con entusiasmo está deshabilitada cuando se ejecuta la función de ajuste en un modelo. Para contrarrestar esto, puede ejecutar: model.run_eagerly = True antes de ejecutar model.fit.
Esto funcionó como un encanto para mí en Tensorflow 2.2

model.compile (..., run_eagerly = True) funcionó para mí al crear una métrica personalizada

Tuve un problema similar mientras trabajaba con Keras.
No sé si esto ayudará a otros, pero lo siguiente me ayudó:
Estaba usando:
model = Sequential () antes y lo cambió a
modelo = tf.keras.Sequential ()
Y funcionó para mí.

@ Mainak431 ¿Le importaría reabrir el problema?

Tuve un problema similar mientras trabajaba con Keras.
No sé si esto ayudará a otros, pero lo siguiente me ayudó:
Estaba usando:
model = Sequential () antes y lo cambió a
modelo = tf.keras.Sequential ()
Y funcionó para mí.

Esa fue en realidad la solución para mí, reutilicé un código antiguo que se importó directamente de keras, no capas de tensorflow.keras, etc. Cambiar las declaraciones de importación resolvió el error de atributo.

@Blubbaa Lo mismo aquí. Fue lo único que funcionó para mí.

Si quiero verificar el valor en el tensor pero tengo que deshabilitar el modo ansioso debido a la compatibilidad de tf.placeholder , ¿cómo debo hacerlo? Intenté agregar tf.enable_eager_execution entre la capa sin tf.placeholder solo para obtener este error ValueError: tf.enable_eager_execution must be called at program startup.

El siguiente código funcionó:

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

Llamar a la función de análisis:

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 El código original funcionaba como se esperaba. Aquí está la esencia.

@ tu1258 No es necesario deshabilitar la ejecución ansiosa. Simplemente impórtelo como tf.compat.v1.placeholder lugar de tf.placeholder . Si aún no funciona, comparta un código independiente para reproducir el problema.

Por favor, avíseme si tiene más preguntas. ¡Gracias!

Tuve el mismo problema. Resultó que estaba tratando de usar .numpy () dentro de una función @ tf. Por lo que tengo entendido, tf.function no se ejecuta con entusiasmo por motivos de rendimiento. Si elimino el decorador @ tf.function .numpy () funciona.

Creo que la siguiente opción en Tensorflow2.x puede ayudar
tf.config.run_functions_eagerly

En el lugar al que está llamando tf.function, puede intentar ejecutarlo con entusiasmo y luego deshabilitar la ejecución ansiosa para tf.function.

Soy nuevo en tensorflow pero siguiendo este tutorial (en Jupyter Notebook) https://www.tensorflow.org/tutorials/quickstart/beginner?hl=en te dará el error

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

@louisnot No puedo reproducir el error. Por favor, consulte la esencia aquí . ¡Gracias!

Si se enfrenta al error, ¿puede compartir una idea general? ¡Gracias!

No enfrenté ningún problema al usar la esencia.

Estoy cerrando este problema ya que se resolvió en tf-nightly . No dude en volver a abrir si el problema persiste. ¡Gracias!

@bhupendrathore ¿Puede abrir un nuevo problema con un código independiente simple para reproducir el error? ¡Gracias!

Tengo el mismo problema,; cuando lo soluciono en su solución con pip install tf-nightly , se producen los errores:

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 veo que abriste otro número nuevo. lo resolveremos allí. Gracias

¿Fue útil esta página
0 / 5 - 0 calificaciones