Saya seorang pemula untuk TensorFlow. Saya bingung tentang perbedaan antara tf.placeholder
dan tf.Variable
. Dalam pandangan saya, tf.placeholder
digunakan untuk input data, dan tf.Variable
digunakan untuk menyimpan keadaan data. Ini yang saya tahu.
Bisakah seseorang menjelaskan kepada saya lebih detail tentang perbedaan mereka? Secara khusus, kapan harus digunakan tf.Variable
dan kapan harus digunakan tf.placeholder
?
tensorflow
J.Apakah
sumber
sumber
Variable
s, tetapi bukanplaceholder
s (yang nilainya harus selalu disediakan).Jawaban:
Singkatnya, Anda menggunakan
tf.Variable
untuk variabel yang bisa dilatih seperti bobot (W) dan bias (B) untuk model Anda.tf.placeholder
digunakan untuk memberi makan contoh pelatihan aktual.Ini adalah bagaimana Anda memberi contoh pelatihan selama pelatihan:
Anda
tf.variables
akan dilatih (dimodifikasi) sebagai hasil dari pelatihan ini.Lihat lebih lanjut di https://www.tensorflow.org/versions/r0.7/tutorials/mnist/tf/index.html . (Contoh diambil dari halaman web.)
sumber
tensorflow
dandeep learning
danAI
yang.Perbedaannya adalah bahwa dengan
tf.Variable
Anda harus memberikan nilai awal ketika Anda mendeklarasikannya. Dengantf.placeholder
Anda tidak harus memberikan nilai awal dan Anda dapat menentukannya pada waktu berjalan denganfeed_dict
argumen di dalamnyaSession.run
sumber
Karena perhitungan Tensor menyusun grafik maka lebih baik menafsirkan keduanya dalam bentuk grafik.
Ambil contoh regresi linier sederhana
di mana
W
danB
berdiri untuk bobot dan bias danX
untuk input pengamatan danY
untuk hasil pengamatan.Jelas
X
danY
memiliki sifat yang sama (variabel manifes) yang berbeda dariW
dan dariB
(variabel laten).X
danY
adalah nilai-nilai sampel (pengamatan) dan karenanya perlu tempat untuk diisi , sementaraW
danB
merupakan bobot dan bias, Variabel (nilai sebelumnya mempengaruhi yang terakhir) dalam grafik yang harus dilatih menggunakan pasangan yang berbedaX
danY
. Kami menempatkan sampel berbeda kepada Placeholder untuk melatih Variabel .Kita hanya perlu menyimpan atau mengembalikan dengan Variabel (di pos pemeriksaan) untuk menyimpan atau membangun kembali grafik dengan kode.
Placeholder sebagian besar adalah pemegang untuk set data yang berbeda (misalnya data pelatihan atau data uji). Namun, Variabel dilatih dalam proses pelatihan untuk tugas-tugas tertentu, yaitu untuk memprediksi hasil input atau memetakan input ke label yang diinginkan. Mereka tetap sama sampai Anda melatih ulang atau menyempurnakan model menggunakan sampel yang berbeda atau sama untuk mengisi Tempat penampung sering melalui dikt. Misalnya:
Placeholder juga dilewatkan sebagai parameter untuk mengatur model.
Jika Anda mengganti placeholder (menambah, menghapus, mengubah bentuk, dll.) Dari model di tengah pelatihan, Anda masih dapat memuat ulang pos pemeriksaan tanpa modifikasi lainnya. Tetapi jika variabel dari model yang disimpan diubah, Anda harus menyesuaikan pos pemeriksaan yang sesuai untuk memuatnya kembali dan melanjutkan pelatihan (semua variabel yang ditentukan dalam grafik harus tersedia di pos pemeriksaan).
Singkatnya, jika nilainya berasal dari sampel (pengamatan yang sudah Anda miliki), Anda dengan aman membuat placeholder untuk menahannya, sementara jika Anda membutuhkan parameter untuk dilatih memanfaatkan Variabel (cukup cantumkan, tetapkan Variabel untuk nilai yang Anda inginkan untuk menggunakan TF secara otomatis).
Dalam beberapa model yang menarik, seperti model pemindahan gaya , piksel input akan dioptimalkan dan variabel model yang biasa disebut diperbaiki, maka kita harus membuat input (biasanya diinisialisasi secara acak) sebagai variabel seperti yang diterapkan pada tautan itu.
Untuk informasi lebih lanjut silahkan mengambil kesimpulan untuk ini sederhana dan menggambarkan doc .
sumber
TL; DR
Variabel
Placeholder
tf.placeholder_with_default
)sumber
Perbedaan yang paling jelas antara tf.Variable dan tf.placeholder adalah itu
Inisialisasi variabel dilakukan dengan
sess.run(tf.global_variables_initializer())
. Juga saat membuat variabel, Anda harus meneruskan Tensor sebagai nilai awal keVariable()
konstruktor dan ketika Anda membuat variabel Anda selalu tahu bentuknya.Di sisi lain, Anda tidak dapat memperbarui placeholder. Mereka juga tidak boleh diinisialisasi, tetapi karena itu adalah janji untuk memiliki tensor, Anda perlu memasukkan nilai tersebut ke dalamnya
sess.run(<op>, {a: <some_val>})
. Dan akhirnya, dibandingkan dengan variabel, placeholder mungkin tidak tahu bentuknya. Anda dapat memberikan bagian dari dimensi atau tidak memberikan apa pun.Ada perbedaan lain:
Bagian yang menarik adalah bahwa tidak hanya placeholder yang dapat diberi makan. Anda bisa memberi makan nilai ke variabel dan bahkan ke konstanta.
sumber
Menambah jawaban orang lain, mereka juga menjelaskannya dengan sangat baik dalam tutorial MNIST ini di situs web Tensoflow:
sumber
x
bentuk[batch size, features]
, kami memiliki bobot mulai dari input ke lapisan pertama ukuran[features, hidden units]
dan bias[hidden units]
. Jadi pertanyaan saya adalah: bagaimana kita melipatgandakannya? Jika kita lakukantf.matmul(x, w)
maka kita akan mendapatkan[batch size, hidden units]
dan kita tidak bisab
melakukannya, karena itu memiliki bentuk[hidden units]
Tensorflow menggunakan tiga jenis wadah untuk menyimpan / menjalankan proses
Konstanta: Konstanta memegang data khas.
variabel: Nilai data akan diubah, dengan masing-masing fungsi seperti cost_function ..
placeholder: Data Pelatihan / Pengujian akan diteruskan ke grafik.
sumber
Cuplikan contoh:
Seperti namanya placeholder adalah janji untuk memberikan nilai yaitu nanti
Variabel hanyalah parameter pelatihan (
W
(matriks),b
(bias) yang sama dengan variabel normal yang Anda gunakan dalam pemrograman sehari-hari, yang diperbarui / dimodifikasi oleh pelatih pada setiap langkah / lari.Sementara placeholder tidak memerlukan nilai awal, bahwa ketika Anda membuat
x
dany
TF tidak mengalokasikan memori apa pun, sebaliknya nanti saat Anda memberi makan placeholder dalamsess.run()
penggunaanfeed_dict
, TensorFlow akan mengalokasikan memori berukuran tepat untuk mereka (x
dany
) - ini tidak dibatasi- ness memungkinkan kita untuk memberi makan berbagai ukuran dan bentuk data.Singkatnya :
Variabel - adalah parameter yang Anda ingin agar pelatih (yaitu GradientDescentOptimizer) diperbarui setelah setiap langkah.
Demo Placeholder -
Eksekusi:
menghasilkan output
Dalam kasus pertama 3 dan 4.5 akan diteruskan ke
a
danb
masing - masing, dan kemudian ke adder_node ouputting 7. Dalam kasus kedua ada daftar umpan, langkah pertama 1 dan 2 akan ditambahkan, 3 dan 4 berikutnya (a
danb
).Bacaan yang relevan:
sumber
Variabel
Variabel TensorFlow adalah cara terbaik untuk mewakili keadaan persisten yang dimanipulasi oleh program Anda. Variabel dimanipulasi melalui kelas tf.Variable. Secara internal, tf. Variabel menyimpan tensor persisten. Operasi spesifik memungkinkan Anda membaca dan memodifikasi nilai tensor ini. Modifikasi ini terlihat di beberapa tf.Sesi, sehingga beberapa pekerja dapat melihat nilai yang sama untuk tf.Variabel. Variabel harus diinisialisasi sebelum menggunakan.
Contoh:
Ini membuat grafik perhitungan. Variabel (x dan y) dapat diinisialisasi dan fungsi (f) dievaluasi dalam sesi tensorflow sebagai berikut:
Placeholder
Placeholder adalah simpul (sama dengan variabel) yang nilainya dapat diinisialisasi di masa mendatang. Node-node ini pada dasarnya menampilkan nilai yang diberikan padanya selama runtime. Node placeholder dapat ditugaskan menggunakan kelas tf.placeholder () di mana Anda bisa memberikan argumen seperti jenis variabel dan / atau bentuknya. Placeholder secara luas digunakan untuk mewakili dataset pelatihan dalam model pembelajaran mesin karena dataset pelatihan terus berubah.
Contoh:
Catatan: 'Tidak Ada' untuk dimensi berarti 'ukuran apa pun'.
Referensi:
sumber
Anggap
Variable
dalam tensorflow sebagai variabel normal yang kita gunakan dalam bahasa pemrograman. Kami menginisialisasi variabel, kami dapat memodifikasinya nanti. Padahalplaceholder
tidak membutuhkan nilai awal. Placeholder hanya mengalokasikan blok memori untuk digunakan di masa mendatang. Nanti, kita bisa gunakanfeed_dict
untuk memasukkan dataplaceholder
. Secara default,placeholder
memiliki bentuk yang tidak dibatasi, yang memungkinkan Anda untuk memberi makan tensor bentuk yang berbeda dalam satu sesi. Anda dapat membuat bentuk dibatasi dengan melewati argumen opsional -bentuk, seperti yang telah saya lakukan di bawah ini.Saat melakukan tugas Machine Learning, sebagian besar waktu kita tidak mengetahui jumlah baris tetapi (mari kita asumsikan) kita mengetahui jumlah fitur atau kolom. Dalam hal ini, kita dapat menggunakan Tidak Ada.
Sekarang, pada saat run time kita dapat memberi makan setiap matriks dengan 4 kolom dan jumlah baris.
Selain itu, Placeholder digunakan untuk memasukkan data (mereka adalah jenis variabel yang kami gunakan untuk memberi makan model kami), sedangkan Variabel adalah parameter seperti bobot yang kami latih seiring waktu.
sumber
Placeholder:
Placeholder hanyalah variabel yang akan kami tetapkan datanya di kemudian hari. Itu memungkinkan kami untuk membuat operasi kami dan membangun grafik perhitungan kami, tanpa perlu data. Dalam terminologi TensorFlow, kami kemudian memasukkan data ke dalam grafik melalui placeholder ini.
Nilai awal tidak diperlukan tetapi dapat memiliki nilai default dengan
tf.placeholder_with_default)
Kami harus memberikan nilai saat runtime seperti:
Variabel :
Contoh:
tf.Variable("Welcome to tensorflow!!!")
sumber
Tensorflow 2.0 Kompatibel Jawaban : Konsep Placeholder,
tf.placeholder
tidak akan tersediaTensorflow 2.x (>= 2.0)
secara default, karena Mode Eksekusi Default adalah Eksekusi bersemangat.Namun, kita dapat menggunakannya jika digunakan dalam
Graph Mode
(Disable Eager Execution
).Perintah Setara untuk TF Placeholder dalam versi 2.x adalah
tf.compat.v1.placeholder
.Perintah Setara untuk Variabel TF dalam versi 2.x adalah
tf.Variable
dan jika Anda ingin memigrasi kode dari 1.x ke 2.x, perintah yang setara adalahtf.compat.v2.Variable
.Silakan merujuk halaman Tensorflow ini untuk informasi lebih lanjut tentang Tensorflow Version 2.0.
Silakan merujuk Panduan Migrasi untuk informasi lebih lanjut tentang migrasi dari versi 1.x ke 2.x.
sumber
Pikirkan grafik perhitungan . Dalam grafik seperti itu, kita membutuhkan simpul input untuk meneruskan data kita ke grafik, simpul tersebut harus didefinisikan sebagai Placeholder dalam tensorflow .
Jangan berpikir sebagai program umum dengan Python. Anda dapat menulis program Python dan melakukan semua hal yang dijelaskan oleh orang-orang di jawaban lain hanya dengan Variabel, tetapi untuk grafik perhitungan di tensorflow, untuk memberi makan data Anda ke grafik, Anda perlu mendefinisikan anggukan tersebut sebagai Placeholder.
sumber