Tensorflow: لا يحتوي كائن TF 2.0 'Tensor' على سمة 'numpy' أثناء استخدام .numpy () على الرغم من تمكين التنفيذ الحثيث افتراضيًا

تم إنشاؤها على ٤ أبريل ٢٠١٩  ·  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 (مثال)

المتوقعة_values ​​= expt.numpy ()

AttributeError: كائن "Tensor" ليس له سمة "numpy"

نسخة اختبار وحدة المعالجة المركزية من TENSORFLOW 2.0.

Fixed in Nightly TF 2.0 core awaiting response support

التعليق الأكثر فائدة

كان لي نفس القضية. تبين أنني كنت أحاول استخدام .numpy () داخل دالة @ tf. بقدر ما أفهم أن وظيفة tf لا يتم تنفيذها بلهفة لأغراض الأداء. إذا قمت بإزالة @ tf.function decorator .numpy () يعمل.

ال 54 كومينتر

@ Mainak431 هل حلت مشكلتك؟

نعم.

ما هو الحل الخاص بك

Numpy مدعوم فقط في الوضع المتهور. إذا كنت في وضع الرسم البياني ، فلن يتم دعمه. للتحقق ، إذا كنت في وضع حريص. افعل ، tf.eagerly (). إنها ترجع صواب أو خطأ. في وضع الرسم البياني ، يجب عليك استخدام Eval في جلسة للحصول على قيمة الموتر في مصفوفة numpy.

@ Mainak431
الوحدة النمطية "Tensorflow" ليس لها سمة "بشغف"
الوحدة النمطية "tensorflow.compat.v1" ليس لها سمة "بفارغ الصبر"

أنا أستخدم الحزمة tensorflow-gpu == 2.0.0-alpha0
.numpy () على أحد الموترات الخاصة بي ينتج عن كائن "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 لقد تقدمت للتو https://github.com/tensorflow/tensorflow/issues/32842

شكرا!

كان لي نفس القضية. تبين أنني كنت أحاول استخدام .numpy () داخل دالة @ tf. بقدر ما أفهم أن وظيفة tf لا يتم تنفيذها بلهفة لأغراض الأداء. إذا قمت بإزالة @ tf.function decorator .numpy () يعمل.

كان لي نفس القضية. تبين أنني كنت أحاول استخدام .numpy () داخل دالة @ tf. بقدر ما أفهم أن وظيفة tf لا يتم تنفيذها بلهفة لأغراض الأداء. إذا قمت بإزالة @ tf.function decorator .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]] ، الشكل = (2 ، 2) ، نوع dtype = int64)

قابل للتحويل باستخدام .numpy (). ومع ذلك ، عند محاولة تنفيذ مقياس مخصص لمشكلة تصنيف ، يرفع كل من y_true.numpy () و y_pred.numpy ()

AttributeError: كائن "Tensor" ليس له سمة "numpy".

فيما يلي مثال واحد لكل من y:

صحيح:
print (y_true): Tensor ("dense_ target: 0 "، shape = (None، None، None)، dtype = float32)
طباعة (اكتب (y_true)):

y_pred:
print (y_pred): Tensor ("dense / Identity: 0 "، shape = (None، None، 6)، dtype = float32)
طباعة (نوع (مسبق)):

renatomello أواجه نفس المشكلة التي تواجهها. لقد فتحت عددًا جديدًا: # 35393.

renatomello لا تزال المشكلة قائمة عند محاولة تنفيذ مقياس مخصص. هل وجدت حلا؟

renatomello لا تزال المشكلة قائمة عند محاولة تنفيذ مقياس مخصص. هل وجدت حلا؟

لا لم أفعل. أحاول معرفة ما إذا كانت هناك وظيفة خلفية TF / Keras تفعل شيئًا مشابهًا يمكنني العمل معه. خلاف ذلك ، سأضطر فقط إلى إنشاء واحدة بنفسي.

لقد واجهت هذه المنطقة عند استخدام وظائف regex في معالجة البيانات المسبقة. يتطلب استخدام منطق بايثون استخدام 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]] ، الشكل = (2 ، 2) ، نوع dtype = int64)

قابل للتحويل باستخدام .numpy (). ومع ذلك ، عند محاولة تنفيذ مقياس مخصص لمشكلة تصنيف ، يرفع كل من y_true.numpy () و y_pred.numpy ()

AttributeError: كائن "Tensor" ليس له سمة "numpy".

فيما يلي مثال واحد لكل من y:

صحيح:
print (y_true): Tensor ("dense_ target: 0 "، shape = (None، None، None)، dtype = float32)
طباعة (اكتب (y_true)):

y_pred:
print (y_pred): Tensor ("dense / Identity: 0 "، shape = (None، None، 6)، dtype = float32)
طباعة (نوع (مسبق)):

لا أعرف السبب ، لكني قمت بحل هذه المشكلة عن طريق الإضافة
experimental_run_tf_function=False
في وظيفة تجميع النموذج الخاص بي.

لقد لاحظت أن هذا الخطأ يظهر فقط عندما أحاول تحويل الموترات إلى numpy أثناء ملاءمة النموذج. أفضل تخميني هو أنه يبدو أنه مشكلة في الشكل.
على سبيل المثال ، الموتر التالي

tf.Tensor ([[1 3] [0 4]] ، الشكل = (2 ، 2) ، نوع dtype = int64)
قابل للتحويل باستخدام .numpy (). ومع ذلك ، عند محاولة تنفيذ مقياس مخصص لمشكلة تصنيف ، يرفع كل من y_true.numpy () و y_pred.numpy ()
AttributeError: كائن "Tensor" ليس له سمة "numpy".
فيما يلي مثال واحد لكل من y:
صحيح:
print (y_true): Tensor ("dense_ target: 0 "، shape = (None، None، None)، dtype = float32)
طباعة (اكتب (y_true)):
y_pred:
print (y_pred): Tensor ("dense / Identity: 0 "، shape = (None، None، 6)، dtype = float32)
طباعة (نوع (مسبق)):

لا أعرف السبب ، لكني قمت بحل هذه المشكلة عن طريق الإضافة
experimental_run_tf_function=False
في وظيفة تجميع النموذج الخاص بي.

لا يبدو أنه يحدث فرقًا في حالتي

واجهت هذه المشكلة أثناء تجربة طبقة TextVectorization في TF2.1 باستخدام split مخصص جدًا. ما تم إصلاحه بالنسبة لي هو تمرير dynamic=True إلى الإنشاء TextVectorization .

كيف فعلت ذلك بالضبط؟

أولاً ، يجب عليك تسجيل الجلسة على النحو التالي:
sess = tf.Session ()
ثم استخدام :
المتوقع_القيم = expt.eval (الجلسة = الجلسة)
يجب أن تكون النتيجة:
طباعة (القيم_المتوقعة)
الخارج [41]:
مجموعة ([[0 ، 0 ، 0] ،
[4 ، 71 ، 141] ،
[0 ، 0 ، 0]]])
شكر

واجهت هذه المشكلة أثناء تجربة طبقة TextVectorization في TF2.1 باستخدام split مخصص جدًا. ما تم إصلاحه بالنسبة لي هو تمرير dynamic=True إلى الإنشاء TextVectorization .

كيف فعلت ذلك بالضبط؟

مثله. ما زلت أتعلم ML / TF بشكل عام ، لذلك ربما كان هذا هو الشيء الخطأ الذي يجب القيام به. كل شيء من السحر الأسود حتى "يعمل فقط".

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 ولا أستخدمه بفارغ الصبر. الحل الذي أستخدمه الآن هو np.array (yourtensor.to_list ())

هذه المشكلة لا تزال قائمة بالنسبة لي. أنا لا أستخدم التعليق التوضيحي للوظيفة @ tf ولا أستخدمه بفارغ الصبر. الحل الذي أستخدمه الآن هو np.array (yourtensor.to_list ())

هذا ما حصلت عليه
AttributeError: 'Tensor' object has no attribute 'to_list'

وفقًا للرموز الموجودة في Tensorflow ، عندما يكون كائن الموتر في موتر الوضع المتلهف (tensorflow.python.framework.ops.EagerTensor) ، يمكننا استدعاء tesnsorObj.numpy ()
يتم تنفيذ هذه الطريقة في tensorflow / python / framework / ops.py
ولكن إذا كان كائن الموتر موترًا عامًا ، على سبيل المثال ينتمي إلى tensorflow.python.framework.ops.Tensor ، فلن يكون له طريقة numpy () ، تكون أكواد التنفيذ أيضًا في tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

هذا يعني أن كل كائن موتر يعمل في @ tf.function لا يمكنه استدعاء tensorObj.numpy ()
يضيف وضع التشغيل الشغوف المرونة إلى TF2.0 ويضيف أيضًا تعقيدًا إليه.

وفقًا للرموز الموجودة في Tensorflow ، عندما يكون كائن الموتر في موتر الوضع المتلهف (tensorflow.python.framework.ops.EagerTensor) ، يمكننا استدعاء tesnsorObj.numpy ()
يتم تنفيذ هذه الطريقة في tensorflow / python / framework / ops.py
ولكن إذا كان كائن الموتر موترًا عامًا ، على سبيل المثال ينتمي إلى tensorflow.python.framework.ops.Tensor ، فلن يكون له طريقة numpy () ، تكون أكواد التنفيذ أيضًا في tensorflow / python / framework / ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

هذا يعني أن كل كائن موتر يعمل في @ tf.function لا يمكنه استدعاء 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 (صواب) .
أنا استخدم TF ver. 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 الإصدار 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 () متوفرًا.). لذلك ، هذا له معنى.
انظر في إخراج وحدة التحكم أدناه test(run_eagerly=True) : في خامس MyDense.call () يتوفر input.numpy (). لذلك ، هذا أيضًا له معنى. وهو يحل الخطأ.

كان لي نفس القضية. تبين أنني كنت أحاول استخدام .numpy () داخل دالة @ tf. بقدر ما أفهم أن وظيفة tf لا يتم تنفيذها بلهفة لأغراض الأداء. إذا قمت بإزالة @ tf.function decorator .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) بالنسبة لي عند إنشاء مقياس مخصص

واجهت مشكلة مماثلة أثناء العمل مع Keras.
لا أعرف ما إذا كان هذا سيساعد الآخرين ، لكن ما يلي ساعدني:
كنت أستخدم:
model = Sequential () قبل وتغيير ذلك إلى
النموذج = tf.keras.Sequential ()
وعملت معي

@ Mainak431 هل تمانع في إعادة فتح القضية؟

واجهت مشكلة مماثلة أثناء العمل مع Keras.
لا أعرف ما إذا كان هذا سيساعد الآخرين ، لكن ما يلي ساعدني:
كنت أستخدم:
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 لا يتم تنفيذها بلهفة لأغراض الأداء. إذا قمت بإزالة @ tf.function decorator .numpy () يعمل.

أعتقد أن الخيار التالي في Tensorflow2.x يمكن أن يساعد
tf.config.run_functions_eagerly

المكان الذي تتصل فيه بوظيفة tf ، يمكنك محاولة تنفيذه بلهفة ثم تعطيل التنفيذ الحثيث لوظيفة tf.

أنا جديد على tensorflow ولكن اتباع هذا البرنامج التعليمي (على Jupyter Notebook) https://www.tensorflow.org/tutorials/quickstart/beginner؟hl=ar سوف يعطيك الخطأ

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

تضمين التغريدة

liangzelang أرى أنك فتحت

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات