Tensorflow: Objek 'Tensor' TF 2.0 tidak memiliki atribut 'numpy' saat menggunakan .numpy() meskipun eksekusi bersemangat diaktifkan secara default

Dibuat pada 4 Apr 2019  ·  54Komentar  ·  Sumber: tensorflow/tensorflow

Meskipun Eager_execution diaktifkan secara default di TF 2.0, saya mendapatkan kesalahan saat menggunakan .numpy()

Harap dicatat bahwa saya tidak menggunakan kode dalam mode kompatibilitas ke 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)

nilai_harapan = expt.numpy()

AttributeError: objek 'Tensor' tidak memiliki atribut 'numpy'

VERSI UJI CPU TENSORFLOW 2.0.

Fixed in Nightly TF 2.0 core awaiting response support

Komentar yang paling membantu

Saya memiliki masalah yang sama. Ternyata saya mencoba menggunakan .numpy() di dalam @tf.function. Sejauh yang saya mengerti tf.function tidak dijalankan dengan penuh semangat untuk tujuan kinerja. Jika saya menghapus dekorator @tf.function .numpy() berfungsi.

Semua 54 komentar

@ Mainak431 Apakah Anda memecahkan masalah Anda?

Ya.

apa solusi Anda?

.Numpy hanya didukung dalam mode bersemangat. Jika Anda berada dalam mode grafik, itu tidak akan didukung. Untuk memeriksa, apakah Anda dalam mode bersemangat. Lakukan, tf.eagerly(). Ini mengembalikan benar atau salah. Dalam mode grafik, Anda harus menggunakan eval dalam sebuah sesi untuk mendapatkan nilai tensor dalam array numpy.

@Mainak431
modul 'tensorflow' tidak memiliki atribut 'bersemangat'
modul 'tensorflow.compat.v1' tidak memiliki atribut 'eagerly'

Saya menggunakan paket tensorflow-gpu==2.0.0-alpha0
.numpy() pada salah satu tensor saya menghasilkan objek 'Tensor' tidak memiliki atribut 'numpy'

tf.eagerly() memberikan modul 'tensorflow' tidak memiliki atribut 'eagerly'

tf.executing_eagerly() alih-alih tf.eagerly() bekerja untuk saya untuk memeriksa apakah saya dalam mode bersemangat

Adakah yang menemukan solusi untuk ini?

masalah yang sama di sini ... saya memanggil model keras dalam mode bersemangat dan saya mendapatkan Tensor, bukan EagerTensor, yang menyebabkan masalah dengan OpenAI Gym

Jalankan tf.enable_eager_execution() ini dan kemudian ketika Anda mencoba tf.executing_eagerly() itu akan memberikan True. Setelah ini, Anda dapat menggunakan something.numpy() untuk melihat nilainya.

@AkashNagaraj Saya baru saja mengajukan masalah di mana kode dieksekusi dengan penuh semangat (dan seharusnya, karena ini TF 2.0), tetapi saya mengalami masalah "hilang numpy". Maukah Anda melihatnya? https://github.com/tensorflow/tensorflow/issues/32842

Terima kasih!

Saya memiliki masalah yang sama. Ternyata saya mencoba menggunakan .numpy() di dalam @tf.function. Sejauh yang saya mengerti tf.function tidak dijalankan dengan penuh semangat untuk tujuan kinerja. Jika saya menghapus dekorator @tf.function .numpy() berfungsi.

Saya memiliki masalah yang sama. Ternyata saya mencoba menggunakan .numpy() di dalam @tf.function. Sejauh yang saya mengerti tf.function tidak dijalankan dengan penuh semangat untuk tujuan kinerja. Jika saya menghapus dekorator @tf.function .numpy() berfungsi.

Ini berfungsi untuk saya, @tf.function mengubah seluruh fungsi menjadi mode grafik

Mengapa tidak ada satu solusi yang disebutkan di utas ini =.=

Fungsi saya tidak memiliki dekorator tetapi .numpy() masih gagal seperti yang dijelaskan oleh poster sebelumnya. Adakah yang menemukan solusi untuk ini?

Saya telah menemukan bahwa masalah saya hilang setelah memasukkan tf.compat.v1.enable_eager_execution() di bagian atas skrip saya (sangat mirip dengan apa yang dikatakan poster sebelumnya, tetapi ini berfungsi untuk TF 2.0)...

Saya mengalami masalah yang sama dan tidak ada solusi yang disebutkan di atas yang berhasil untuk saya.

Saya menggunakan TF 2.0, fungsi saya tidak memiliki dekorator, tf.eagerly() mengembalikan True dan saya masih mendapatkan AttributeError yang sama: objek 'Tensor' tidak memiliki atribut 'numpy'.

Permasalahan yang sama.

Saya memastikan saya mengeksekusi dengan penuh semangat dan tidak memiliki dekorator pada fungsi kehilangan kustom saya. Saya juga mencoba solusi Michael dua komentar yang tidak berhasil.

Saya mendapatkan kesalahan: AttributeError: objek 'Tensor' tidak memiliki atribut 'numpy'

Saya perhatikan bahwa kesalahan ini hanya muncul ketika saya mencoba mengonversi tensor menjadi numpy selama model fit. Tebakan terbaik saya adalah sepertinya itu masalah bentuk.

Misalnya, tensor berikut:

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

dapat dikonversi menggunakan .numpy(). Namun, saat mencoba menerapkan metrik khusus untuk masalah klasifikasi, baik y_true.numpy() dan y_pred.numpy() menaikkan

AttributeError: Objek 'Tensor' tidak memiliki atribut 'numpy'.

Berikut adalah salah satu contoh dari kedua y:

y_benar:
print(y_true): Tensor("padat_ target:0 ", shape=(Tidak Ada, Tidak Ada, Tidak Ada), dtype=float32)
cetak(ketik(y_benar)):

y_pred:
print(y_pred): Tensor("padat/ Identitas:0 ", bentuk=(Tidak Ada, Tidak Ada, 6), dtype=float32)
cetak(tipe(pred)):

@renatomello Saya mengalami masalah yang sama seperti Anda. Saya telah membuka edisi baru: #35393.

@renatomello masalahnya masih ada saat mencoba menerapkan metrik khusus. Apakah Anda menemukan solusi?

@renatomello masalahnya masih ada saat mencoba menerapkan metrik khusus. Apakah Anda menemukan solusi?

Tidak, aku tidak melakukannya. Saya mencoba melihat apakah ada fungsi backend TF/Keras yang melakukan hal serupa yang dapat saya kerjakan. Jika tidak, saya hanya perlu membuatnya sendiri.

Saya menemukan area ini saat menggunakan fungsi regex dalam prapemrosesan data. Menggunakan logika python memerlukan penggunaan tf.py_function seperti yang disebutkan dalam dokumen dan utas StackOverflow ini (Catatan tf.py_func() sekarang tf.py_function() )

Setelah saya mengubah kode saya dari
data = fnames.map(process_path)
ke
data = fnames.map(lambda x: tf.py_function(process_path, [x], [tf.string]))
kode dieksekusi dengan benar.

Saya mengalami masalah ini saat mencoba lapisan TextVectorization di TF2.1 dengan split sangat khusus. Apa yang memperbaikinya bagi saya adalah meneruskan dynamic=True ke konstruksi TextVectorization .

Saya perhatikan bahwa kesalahan ini hanya muncul ketika saya mencoba mengonversi tensor menjadi numpy selama model fit. Tebakan terbaik saya adalah sepertinya itu masalah bentuk.

Misalnya, tensor berikut:

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

dapat dikonversi menggunakan .numpy(). Namun, saat mencoba menerapkan metrik khusus untuk masalah klasifikasi, baik y_true.numpy() dan y_pred.numpy() menaikkan

AttributeError: Objek 'Tensor' tidak memiliki atribut 'numpy'.

Berikut adalah salah satu contoh dari kedua y:

y_benar:
print(y_true): Tensor("padat_ target:0 ", shape=(Tidak Ada, Tidak Ada, Tidak Ada), dtype=float32)
cetak(ketik(y_benar)):

y_pred:
print(y_pred): Tensor("padat/ Identitas:0 ", bentuk=(Tidak Ada, Tidak Ada, 6), dtype=float32)
cetak(tipe(pred)):

Tidak tahu alasannya, tetapi saya memecahkan masalah seperti itu dengan menambahkan
experimental_run_tf_function=False
dalam fungsi kompilasi model saya.

Saya perhatikan bahwa kesalahan ini hanya muncul ketika saya mencoba mengonversi tensor menjadi numpy selama model fit. Tebakan terbaik saya adalah sepertinya itu masalah bentuk.
Misalnya, tensor berikut:

tf.Tensor([[1 3] [0 4]], bentuk=(2, 2), dtype=int64)
dapat dikonversi menggunakan .numpy(). Namun, saat mencoba menerapkan metrik khusus untuk masalah klasifikasi, baik y_true.numpy() dan y_pred.numpy() menaikkan
AttributeError: Objek 'Tensor' tidak memiliki atribut 'numpy'.
Berikut adalah salah satu contoh dari kedua y:
y_benar:
print(y_true): Tensor("padat_ target:0 ", shape=(Tidak Ada, Tidak Ada, Tidak Ada), dtype=float32)
cetak(ketik(y_benar)):
y_pred:
print(y_pred): Tensor("padat/ Identitas:0 ", bentuk=(Tidak Ada, Tidak Ada, 6), dtype=float32)
cetak(tipe(pred)):

Tidak tahu alasannya, tetapi saya memecahkan masalah seperti itu dengan menambahkan
experimental_run_tf_function=False
dalam fungsi kompilasi model saya.

Sepertinya tidak ada bedanya dalam kasus saya

Saya mengalami masalah ini saat mencoba lapisan TextVectorization di TF2.1 dengan split sangat khusus. Apa yang memperbaikinya bagi saya adalah meneruskan dynamic=True ke konstruksi TextVectorization .

Bagaimana Anda melakukannya?

pertama, Anda harus mendaftarkan Sesi sebagai berikut:
sess=tf.Sesi()
lalu..gunakan :
nilai_harapan = expt.eval(session=sess)
hasilnya harus:
cetak(nilai_harapan)
Keluar[41]:
larik([[[ 0, 0, 0],
[ 4, 71, 141],
[ 0, 0, 0]]])
Terima kasih

Saya mengalami masalah ini saat mencoba lapisan TextVectorization di TF2.1 dengan split sangat khusus. Apa yang memperbaikinya bagi saya adalah meneruskan dynamic=True ke konstruksi TextVectorization .

Bagaimana Anda melakukannya?

Seperti ini. Saya masih belajar ML/TF secara umum, jadi ini mungkin hal yang salah untuk dilakukan. Semuanya adalah ilmu hitam sampai 'berhasil'.

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
)

Masalah ini masih berlanjut untuk saya. Saya tidak menggunakan anotasi @tf.function dan mengeksekusi dengan penuh semangat. Solusi yang saya gunakan sekarang adalah np.array(yourtensor.to_list())

Masalah ini masih berlanjut untuk saya. Saya tidak menggunakan anotasi @tf.function dan mengeksekusi dengan penuh semangat. Solusi yang saya gunakan sekarang adalah np.array(yourtensor.to_list())

Ini yang saya dapatkan
AttributeError: 'Tensor' object has no attribute 'to_list'

Menurut kode di tensorflow, ketika objek tensor dalam mode bersemangat tensor(tensorflow.python.framework.ops.EagerTensor), kita bisa memanggil tesnsorObj.numpy()
metode ini diimplementasikan di tensorflow/python/framework/ops.py
Tetapi jika objek tensor adalah tensor umum, misalnya milik tensorflow.python.framework.ops.Tensor, maka objek tersebut tidak memiliki metode numpy(), kode implementasinya juga ada di tensorflow/python/framework/ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Artinya semua objek tensor yang berjalan di @tf.function tidak dapat memanggil tensorObj.numpy()
Mode lari yang bersemangat menambahkan fleksibilitas ke TF2.0 dan juga menambah kerumitannya.

Menurut kode di tensorflow, ketika objek tensor dalam mode bersemangat tensor(tensorflow.python.framework.ops.EagerTensor), kita bisa memanggil tesnsorObj.numpy()
metode ini diimplementasikan di tensorflow/python/framework/ops.py
Tetapi jika objek tensor adalah tensor umum, misalnya milik tensorflow.python.framework.ops.Tensor, maka objek tersebut tidak memiliki metode numpy(), kode implementasinya juga ada di tensorflow/python/framework/ops.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/ops.py

Artinya semua objek tensor yang berjalan di @tf.function tidak dapat memanggil tensorObj.numpy()
Mode lari yang bersemangat menambahkan fleksibilitas ke TF2.0 dan juga menambah kerumitannya.

Terima kasih untuk penjelasan rinci.

Namun, masalah ini tidak diselesaikan dalam versi 2.1.0 stabil. Itu ditunjukkan kepada saya di #38038 bahwa itu diselesaikan dalam versi tf-nightly 2.2.0.

@renatomello Saya seorang pemula di TF. Jadi, saya tidak yakin apakah yang berikut ini akan membantu menyelesaikan masalah Anda.
Saya memecahkan kesalahan AttributeError: 'Tensor' object has no attribute 'numpy' , dengan menggunakan eksperimental_run_functions_eagerly(True) .
Saya menggunakan TF versi. 2.1 (Untuk informasi versi terperinci, lihat keluaran konsol di bawah). Saya mengizinkan untuk menjelaskan apa yang saya lakukan dengan kode ini:

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)

Saya menjalankan kode di atas di konsol editor Spyder (Spyder Versi 4.0.1). Output konsol yang sesuai adalah (hanya sebagian dari output):

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

Sekarang, lihat di konsol output di bawah test(run_eagerly=False) : Ketiga panggilan MyDense.call() menyatakan, input.numpy() itu tidak tersedia (Catatan tambahan: Ketika saya memahaminya dengan benar, dua MyDense.call pertama () panggilan hanya untuk membangun model. Jadi, ini berarti, bahwa mereka tidak memiliki input.numpy() tersedia.). Jadi, ini bermakna.
Lihat di keluaran konsol di bawah test(run_eagerly=True) : Di MyDense.call() kelima tersedia input.numpy(). Jadi, ini juga berarti. Dan itu memecahkan kesalahan.

Saya memiliki masalah yang sama. Ternyata saya mencoba menggunakan .numpy() di dalam @tf.function. Sejauh yang saya mengerti tf.function tidak dijalankan dengan penuh semangat untuk tujuan kinerja. Jika saya menghapus dekorator @tf.function .numpy() berfungsi.

Ini bekerja untuk saya.

Saya sudah mencoba semua solusi yang disebutkan di utas ini, dan tidak ada yang berhasil untuk saya. Saya menggunakan 2.2.0-rc2.

Tampaknya tidak menjadi masalah dengan eksekusi yang bersemangat dalam kasus saya. Kesalahan berasal dari baris ini ketika saya menelepon keras.backend.get_value() :

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

Punya masalah yang sama. Ternyata secara default, eksekusi bersemangat dinonaktifkan saat menjalankan fungsi fit pada model. Untuk mengatasi ini, Anda dapat menjalankan : model.run_eagerly = True sebelum menjalankan model.fit.
Ini bekerja seperti pesona bagi saya di Tensorflow 2.2

model.compile(..., run_eagerly=True) bekerja untuk saya saat membuat metrik khusus

Saya memiliki masalah yang sama saat bekerja dengan Keras.
Saya tidak tahu apakah ini akan membantu other , tetapi mengikuti membantu saya:
saya menggunakan:
model = Sequential() sebelumnya dan mengubahnya menjadi
model = tf.keras.Sequential()
Dan itu berhasil untuk saya.

@Mainak431 maukah Anda membuka kembali masalah ini?

Saya memiliki masalah yang sama saat bekerja dengan Keras.
Saya tidak tahu apakah ini akan membantu other , tetapi mengikuti membantu saya:
saya menggunakan:
model = Sequential() sebelumnya dan mengubahnya menjadi
model = tf.keras.Sequential()
Dan itu berhasil untuk saya.

Itu sebenarnya solusi untuk saya, saya menggunakan kembali beberapa kode lama yang diimpor langsung dari keras, bukan lapisan tensorflow.keras dll. mengubah pernyataan impor menyelesaikan kesalahan atribut.

@Blubbaa Sama di sini. Itu satu-satunya hal yang berhasil untuk saya.

Jika saya ingin memeriksa nilai dalam tensor tetapi saya harus menonaktifkan mode bersemangat karena kompatibilitas tf.placeholder , bagaimana caranya? Saya sudah mencoba menambahkan tf.enable_eager_execution antara lapisan tanpa tf.placeholder hanya untuk mendapatkan kesalahan ini ValueError: tf.enable_eager_execution must be called at program startup.

Kode berikut berfungsi:

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

Fungsi penguraian panggilan:

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 Kode asli berfungsi seperti yang diharapkan. Inilah intinya.

@tu1258 Anda tidak perlu menonaktifkan eksekusi yang bersemangat. Impor saja sebagai tf.compat.v1.placeholder alih-alih tf.placeholder . Jika masih tidak berhasil, silakan bagikan kode mandiri untuk mereproduksi masalah.

Tolong beri tahu saya jika ada pertanyaan lagi. Terima kasih!

Saya memiliki masalah yang sama. Ternyata saya mencoba menggunakan .numpy() di dalam @tf.function. Sejauh yang saya mengerti tf.function tidak dijalankan dengan penuh semangat untuk tujuan kinerja. Jika saya menghapus dekorator @tf.function .numpy() berfungsi.

Saya pikir opsi berikut di Tensorflow2.x dapat membantu
tf.config.run_functions_eagerly

Tempat Anda memanggil tf.function, Anda dapat mencoba menjalankannya dengan penuh semangat dan kemudian menonaktifkan eksekusi bersemangat untuk tf.function.

Saya baru mengenal tensorflow tetapi mengikuti tutorial ini (di Jupyter Notebook) https://www.tensorflow.org/tutorials/quickstart/beginner?hl=en akan memberi Anda kesalahan

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

@louisnot Saya tidak dapat mereproduksi kesalahan. Silakan periksa intinya di sini . Terima kasih!

Jika Anda menghadapi kesalahan, dapatkah Anda membagikan intinya? Terima kasih!

Saya tidak menghadapi masalah menggunakan Intisari.

Saya menutup masalah ini karena ini telah diselesaikan di tf-nightly . Jangan ragu untuk membuka kembali jika saya masalah berlanjut. Terima kasih!

@bhupendrathore Bisakah Anda membuka masalah baru dengan kode mandiri sederhana untuk mereproduksi kesalahan? Terima kasih!

Saya mendapatkan masalah yang sama,; ketika saya memperbaikinya di solusi Anda dengan pip install tf-nightly , kesalahan terjadi:

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 saya melihat Anda membuka masalah baru lainnya. kami akan menyelesaikannya di sana. Terima kasih

Apakah halaman ini membantu?
0 / 5 - 0 peringkat