TensorFlow FailedPreconditionError saat menggunakan variabel dari modul tf.metric [duplikat]

Saya mencoba menambahkan beberapa pengukuran tambahan ke kode pelatihan saya untuk CNN dengan memanfaatkan fungsi dari submodul tf.metrics, seperti tf.metrics.accuracy(y_labels, y_predicted) dan yang setara untuk presisi atau perolehan. Hal ini berbeda dengan sebagian besar tutorial mereka yang menyarankan hal-hal yang berbelit-belit:

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

Sedangkan implementasi saya menggantikan baris ini dengan:

accuracy = tf.metrics.accuracy(y_labels, y_predicted)

Sekarang, meskipun saya melakukan sess.run(tf.initialize_all_variables()) dalam blok with tf.Session() as sess: saya, saya masih mendapatkan kesalahan berikut ketika mencoba menggunakan fungsi tf.metrics.accuracy:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value performance/accuracy/count
 [[Node: performance/accuracy/count/read = Identity[T=DT_FLOAT, _class=["loc:@performance/accuracy/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](performance/accuracy/count)]]

Terutama, mengganti baris accuracy = tf.metrics.accuracy(y_labels, y_predicted) dengan accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) akan memperbaiki masalah, namun saya ingin menerapkan metrik lain seperti presisi, perolehan, dll.


person Bruno KM    schedule 07.07.2017    source sumber


Jawaban (2)


TL;DR: Tambahkan baris berikut di awal sesi Anda:

sess.run(tf.local_variables_initializer())

Kebingungan muncul dari nama (seperti frankyjuang tunjukkan) fungsi tf.initialize_all_variables() yang tidak digunakan lagi. Fungsi ini tidak digunakan lagi karena salah namanya: fungsi ini sebenarnya tidak menginisialisasi semua variabel, melainkan hanya menginisialisasi global (bukan lokal ) variabel. Menurut dokumentasi untuk fungsi tf.metrics.accuracy() (penekanan ditambahkan):

Fungsi accuracy membuat dua variabel lokal, total dan count yang digunakan untuk menghitung frekuensi kecocokan predictions dengan labels.

Oleh karena itu, Anda perlu menambahkan langkah inisialisasi eksplisit untuk variabel lokal, yang dapat dilakukan menggunakan tf.local_variables_initializer() , seperti yang disarankan di atas.

person mrry    schedule 10.07.2017

sess.run(tf.initialize_all_variables()) tidak digunakan lagi.

Gunakan sess.run(tf.global_variables_initializer()) sebagai gantinya untuk menyelesaikan masalah Anda.

Referensi

Menurut dokumen tf.initialize_all_variables,

FUNGSI INI TIDAK DIGUNAKAN LAGI. Ini akan dihapus setelah 02-03-2017. Petunjuk untuk memperbarui: Gunakan tf.global_variables_initializer sebagai gantinya.

person YLJ    schedule 07.07.2017
comment
Saya mencoba tf.global_variables_initializer() juga. Untungnya, seperti yang ditunjukkan oleh mrry, inisialisasi_semua_variabel tidak benar-benar menginisialisasi semua variabel seperti yang saya kira akan terjadi. tf.local_variables_initializer() berfungsi dengan baik untuk kasus penggunaan ini. - person Bruno KM; 11.07.2017