Cara [A] termudah untuk mengevaluasi nilai aktual suatu Tensor
objek adalah dengan meneruskannya ke Session.run()
metode, atau menelepon Tensor.eval()
ketika Anda memiliki sesi default (yaitu dalam sebuah with tf.Session():
blok, atau lihat di bawah). Secara umum [B] , Anda tidak dapat mencetak nilai tensor tanpa menjalankan beberapa kode dalam satu sesi.
Jika Anda bereksperimen dengan model pemrograman, dan ingin cara mudah untuk mengevaluasi tensor, tf.InteractiveSession
memungkinkan Anda membuka sesi di awal program Anda, dan kemudian menggunakan sesi itu untuk semua Tensor.eval()
(dan Operation.run()
) panggilan. Ini bisa lebih mudah dalam pengaturan interaktif, seperti shell atau notebook IPython, ketika itu membosankan untuk berkeliling Session
objek di mana-mana. Sebagai contoh, berikut ini bekerja di notebook Jupyter:
with tf.Session() as sess: print(product.eval())
Ini mungkin tampak konyol untuk ekspresi sekecil itu, tetapi salah satu ide kunci dalam Tensorflow 1.x adalah eksekusi yang ditunda : sangat murah untuk membangun ekspresi yang besar dan kompleks, dan ketika Anda ingin mengevaluasinya, back-end (untuk yang Anda hubungkan dengan a Session
) dapat menjadwalkan pelaksanaannya secara lebih efisien (mis. mengeksekusi bagian independen secara paralel dan menggunakan GPU).
[A]: Untuk mencetak nilai tensor tanpa mengembalikannya ke program Python Anda, Anda dapat menggunakan tf.print()
operator, seperti yang disarankan Andrzej dalam jawaban lain . Menurut dokumentasi resmi:
Untuk memastikan operator berjalan, pengguna harus meneruskan tf.compat.v1.Session
metode operasi yang dijalankan ke op, atau menggunakan op sebagai ketergantungan kontrol untuk operasi yang dijalankan dengan menentukan dengan tf.compat.v1.control_dependencies([print_op]
,), yang dicetak ke output standar.
Perhatikan juga bahwa:
Dalam buku catatan dan colab Jupyter, tf.print
dicetak ke keluaran sel buku catatan. Itu tidak akan menulis ke log konsol kernel notebook.
[B]: Anda mungkin dapat menggunakan tf.get_static_value()
fungsi untuk mendapatkan nilai konstan dari tensor yang diberikan jika nilainya dapat dihitung secara efisien.
tf.Session()
tidak berfungsi di Tensorflow 2. Anda bisa menggunakannyatf.compat.v1.Session()
.Sementara jawaban lain benar bahwa Anda tidak dapat mencetak nilai sampai Anda mengevaluasi grafik, mereka tidak berbicara tentang satu cara mudah untuk benar-benar mencetak nilai di dalam grafik, setelah Anda mengevaluasinya.
Cara termudah untuk melihat nilai tensor setiap kali grafik dievaluasi (menggunakan
run
ataueval
) adalah dengan menggunakanPrint
operasi seperti dalam contoh ini:Sekarang, setiap kali kita mengevaluasi seluruh grafik, misalnya menggunakan
b.eval()
, kita mendapatkan:sumber
a.eval()
!tf.Print()
sudah usang dan (sekarang) dihapus. Sebaliknya gunakantf.print()
. Lihat dokumen: tensorflow.org/api_docs/python/tf/Print dan tensorflow.org/api_docs/python/tf/print .Mengulangi apa yang orang lain katakan, itu tidak mungkin untuk memeriksa nilai-nilai tanpa menjalankan grafik.
Cuplikan sederhana untuk siapa saja yang mencari contoh mudah untuk mencetak nilai adalah seperti di bawah ini. Kode ini dapat dijalankan tanpa modifikasi di notebook ipython
Keluaran:
sumber
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
Tidak, Anda tidak dapat melihat konten tensor tanpa menjalankan grafik (melakukan
session.run()
). Satu-satunya hal yang dapat Anda lihat adalah:transpose_1:0
,random_uniform:0
)float32
)Saya belum menemukan ini dalam dokumentasi, tetapi saya percaya bahwa nilai-nilai variabel (dan beberapa konstanta tidak dihitung pada saat penugasan).
Lihatlah contoh ini:
Contoh pertama di mana saya baru saja memulai Tensor konstan angka acak berjalan kira-kira waktu yang sama terlepas dari redup (
0:00:00.003261
)Dalam kasus kedua, di mana konstanta sebenarnya dievaluasi dan nilai-nilai diberikan, waktu jelas tergantung pada redup (
0:00:01.244642
)Dan Anda dapat membuatnya lebih jelas dengan menghitung sesuatu (
d = tf.matrix_determinant(m1)
, dengan mengingat bahwa waktu akan berjalanO(dim^2.8)
)PS yang saya temukan kalau dijelaskan dalam dokumentasi :
sumber
Saya pikir Anda perlu mendapatkan beberapa dasar yang benar. Dengan contoh di atas, Anda telah membuat tensor (array multi dimensi). Tetapi agar aliran tensor benar-benar berfungsi, Anda harus memulai " sesi " dan menjalankan " operasi " Anda di sesi. Perhatikan kata "sesi" dan "operasi". Anda perlu tahu 4 hal untuk bekerja dengan tensorflow:
Sekarang dari apa yang Anda tuliskan Anda telah memberikan tensor, dan operasi tetapi Anda tidak memiliki sesi berjalan atau grafik. Tensor (tepi grafik) mengalir melalui grafik dan dimanipulasi oleh operasi (node grafik). Ada grafik default tetapi Anda dapat memulai grafik Anda dalam satu sesi.
Ketika Anda mengatakan cetak, Anda hanya mengakses bentuk variabel atau konstanta yang Anda tetapkan.
Jadi Anda dapat melihat apa yang Anda lewatkan:
Semoga ini bisa membantu!
sumber
Di
Tensorflow 1.x
Dengan Tensorflow 2.x, mode eager diaktifkan secara default. jadi kode berikut berfungsi dengan TF2.0.
sumber
Berdasarkan jawaban di atas, dengan potongan kode khusus Anda, Anda dapat mencetak produk seperti ini:
sumber
Di Tensorflow 2.0+ (atau dalam lingkungan mode Eager) Anda dapat memanggil
.numpy()
metode:sumber
tf.print(product)
juga memberi saya output yang samaprint(product.numpy())
dengan TF 2.0.tf.keras.backend.eval
berguna untuk mengevaluasi ekspresi kecil.TF 1.x dan TF 2.0 kompatibel.
Contoh Minimal yang Dapat Diverifikasi
Ini berguna karena Anda tidak harus membuat
Session
atauInteractiveSession
.sumber
Anda dapat memeriksa output dari sebuah TensorObject tanpa menjalankan grafik dalam satu sesi, dengan mengaktifkan eksekusi yang cepat .
Cukup tambahkan dua baris kode berikut:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
tepat setelah anda
import tensorflow
.Output dari
print product
dalam contoh Anda sekarang akan menjadi:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Perhatikan bahwa mulai sekarang (November 2017) Anda harus menginstal Tensorflow nightly build untuk mengaktifkan eksekusi yang cepat. Roda pre-built dapat ditemukan di sini .
sumber
Harap dicatat bahwa
tf.Print()
akan mengubah nama tensor. Jika tensor yang ingin Anda cetak adalah placeholder, memasukkan data ke itu akan gagal karena nama aslinya tidak akan ditemukan selama makan. Sebagai contoh:Output adalah:
sumber
Anda harus menganggap program TensorFlow Core sebagai terdiri dari dua bagian terpisah:
Jadi untuk kode di bawah ini, Anda cukup Bangun grafik komputasi.
Anda juga perlu menginisialisasi semua variabel dalam program TensorFlow, Anda harus secara eksplisit memanggil operasi khusus sebagai berikut:
Sekarang Anda membangun grafik dan menginisialisasi semua variabel, langkah selanjutnya adalah mengevaluasi node, Anda harus menjalankan grafik komputasi dalam suatu sesi. Sesi merangkum kontrol dan keadaan runtime TensorFlow.
Kode berikut membuat objek Sesi dan kemudian memanggil metode menjalankannya untuk menjalankan grafik komputasi yang cukup untuk dievaluasi
product
:sumber
Anda dapat menggunakan Keras, jawaban satu baris adalah menggunakan
eval
metode seperti:sumber
Coba kode sederhana ini! (Cukup jelas)
sumber
Saya tidak merasa mudah untuk memahami apa yang diperlukan bahkan setelah membaca semua jawaban sampai saya menjalankan ini. TensofFlow juga baru bagi saya.
Namun Anda tetap membutuhkan nilai yang dikembalikan dengan menjalankan sesi.
sumber
Pada dasarnya, dalam tensorflow ketika Anda membuat tensor dalam bentuk apa pun, mereka dibuat dan disimpan di dalamnya yang hanya dapat diakses ketika Anda menjalankan sesi tensorflow. Katakanlah Anda telah membuat tensor konstan
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Tanpa menjalankan sesi, Anda bisa mendapatkan
-
op
: Suatu Operasi. Operasi yang menghitung tensor ini.-
value_index
: Int. Indeks titik akhir operasi yang menghasilkan tensor ini.-
dtype
: DType. Jenis elemen yang disimpan dalam tensor ini.Untuk mendapatkan nilai, Anda dapat menjalankan sesi dengan tensor yang Anda butuhkan sebagai:
Outputnya akan seperti ini:
sumber
Aktifkan eksekusi bersemangat yang diperkenalkan di tensorflow setelah versi 1.10. Ini sangat mudah digunakan.
sumber
Menggunakan tips yang disediakan di https://www.tensorflow.org/api_docs/python/tf/print Saya menggunakan
log_d
fungsi ini untuk mencetak string yang diformat.sumber
sumber
tf.Print sekarang sudah tidak digunakan lagi, inilah cara menggunakan tf.print (huruf kecil) sebagai gantinya.
Meskipun menjalankan sesi adalah pilihan yang baik, itu tidak selalu merupakan jalan yang harus dilalui. Misalnya, Anda mungkin ingin mencetak beberapa tensor dalam sesi tertentu.
Metode cetak baru mengembalikan operasi cetak yang tidak memiliki tensor keluaran:
Karena tidak memiliki output, Anda tidak dapat memasukkannya dalam grafik dengan cara yang sama seperti yang Anda lakukan dengan tf.Print. Sebagai gantinya, Anda dapat menambahkannya untuk mengontrol dependensi di sesi Anda untuk membuatnya dicetak.
Terkadang, dalam grafik yang lebih besar, mungkin dibuat sebagian dalam subfungsi, sulit untuk menyebarkan print_op ke panggilan sesi. Kemudian, tf.tuple dapat digunakan untuk memasangkan operasi cetak dengan operasi lain, yang kemudian akan berjalan dengan operasi itu di mana sesi sesi mengeksekusi kode. Begini cara melakukannya:
sumber
Pertanyaan: Bagaimana cara mencetak nilai objek Tensor di TensorFlow?
Menjawab:
sumber