TensorFlow FailedPreconditionError เมื่อใช้ตัวแปรจากโมดูล tf.metric [ซ้ำกัน]

ฉันพยายามเพิ่มการวัดเพิ่มเติมให้กับโค้ดการฝึกอบรมของฉันสำหรับ CNN โดยใช้ฟังก์ชันจากโมดูลย่อย tf.metrics เช่น tf.metrics.accuracy(y_labels, y_predicted) และค่าที่เทียบเท่าเพื่อความแม่นยำหรือการเรียกคืน สิ่งนี้ทำตรงกันข้ามกับบทช่วยสอนส่วนใหญ่ที่พวกเขาแนะนำสิ่งที่ซับซ้อน:

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

ในขณะที่การใช้งานของฉันแทนที่บรรทัดนี้ด้วย:

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

ตอนนี้ แม้ว่าฉันจะทำ sess.run(tf.initialize_all_variables()) ภายในบล็อก with tf.Session() as sess: ของฉัน แต่ฉันยังคงได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามใช้ฟังก์ชัน 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)]]

สิ่งที่โดดเด่นที่สุดคือ การแทนที่บรรทัด accuracy = tf.metrics.accuracy(y_labels, y_predicted) ด้วย accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) จะช่วยแก้ไขปัญหาได้ อย่างไรก็ตาม ฉันต้องการใช้หน่วยวัดอื่นๆ เช่น ความแม่นยำ การเรียกคืน ฯลฯ โดยไม่ต้องทำด้วยมือ


person Bruno KM    schedule 07.07.2017    source แหล่งที่มา


คำตอบ (2)


TL;DR: เพิ่มบรรทัดต่อไปนี้ที่จุดเริ่มต้นของเซสชันของคุณ:

sess.run(tf.local_variables_initializer())

ความสับสนเกิดขึ้นจากชื่อของฟังก์ชัน tf.initialize_all_variables() ที่ frankyjuang ชี้ให้เห็น) ฟังก์ชันนี้เลิกใช้แล้วส่วนหนึ่งเนื่องจากมีชื่อผิด: จริงๆ แล้วไม่ได้กำหนดค่าเริ่มต้นให้กับตัวแปร ทั้งหมด และจะกำหนดค่าเริ่มต้นเฉพาะ global แทน (ไม่ใช่ local ) ตัวแปร ตามเอกสารประกอบสำหรับฟังก์ชัน tf.metrics.accuracy() (เน้นเพิ่ม):

ฟังก์ชัน accuracy สร้างตัวแปร ท้องถิ่น สองตัว ได้แก่ total และ count ที่ใช้ในการคำนวณความถี่ที่ predictions ตรงกับ labels

ดังนั้น คุณต้องเพิ่มขั้นตอนการเริ่มต้นที่ชัดเจนสำหรับตัวแปรในเครื่อง ซึ่งสามารถทำได้โดยใช้ tf.local_variables_initializer() ตามที่แนะนำข้างต้น

person mrry    schedule 10.07.2017

sess.run(tf.initialize_all_variables()) เลิกใช้แล้ว

ใช้ sess.run(tf.global_variables_initializer()) แทนเพื่อแก้ไขปัญหาของคุณ

อ้างอิง

ตามเอกสารของ tf.initialize_all_variables

ฟังก์ชันนี้เลิกใช้แล้ว มันจะถูกลบออกหลังจาก 2017-03-02 คำแนะนำในการอัปเดต: ใช้ tf.global_variables_initializer แทน

person YLJ    schedule 07.07.2017
comment
ฉันลอง tf.global_variables_initializer() เช่นกัน โชคดีที่ mrry ชี้ให้เห็น Initialize_all_variables ไม่ได้เริ่มต้นตัวแปรทั้งหมดตามที่ฉันคิดว่าจะเป็นกรณีนี้ tf.local_variables_initializer() ทำงานได้ดีสำหรับกรณีการใช้งานนี้ - person Bruno KM; 11.07.2017