لقد اختبرت من خلال تشغيل هذه الأجزاء الثلاثة من التعليمات البرمجية على التوالي.
أولاً ، قم بتهيئة بعض المتغيرات وحفظها.
import tensorflow as tf
sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
sess.run(tf.initialize_all_variables())
saver = tf.train.Saver()
saver.save(sess,'v12.ckpt')
ثم قم باستعادة الجلسة وإضافة متغير آخر وحفظه.
import tensorflow as tf
sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
saver = tf.train.Saver()
saver.restore(sess,'v12.ckpt') #works fine here
v3 = tf.Variable(3,name="v3")
sess.run(tf.initialize_variables([v3]))
saver.save(sess,'v123.ckpt')
print v3.eval() #show value without problem
ثم قم باستعادتها.
import tensorflow as tf
sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
v3 = tf.Variable(3,name="v3")
saver = tf.train.Saver()
saver.restore(sess,'v123.ckpt') #error here
هذا هو الخطأ:
tensorflow.python.framework.errors.NotFoundError: Tensor name "v3" not found in checkpoint files v123.ckpt [[Node: save/restore_slice_2 = RestoreSlice[dt=DT_INT32, preferred_shard=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/restore_slice_2/tensor_name, save/restore_slice_2/shape_and_slice)]] Caused by op u'save/restore_slice_2'
ماهي المشكلة هنا؟
أنا أستخدم الإصدار r0.8 على Ubuntu16.04
عند إنشاء tf.train.Saver
بدون وسيطات ، فإنه سيستخدم ضمنيًا المجموعة الحالية من المتغيرات _ في وقت إنشاء Saver_ عند الحفظ والاستعادة. إذا قمت بإضافة متغير جديد (على سبيل المثال v3
في كتلة التعليمات البرمجية الثانية) ، يجب عليك إنشاء متغير جديد tf.train.Saver
لحفظه.
import tensorflow as tf
sess = tf.InteractiveSession()
v1 = tf.Variable(1,name="v1")
v2 = tf.Variable(2,name="v2")
saver = tf.train.Saver()
saver.restore(sess,'v12.ckpt') #works fine here
v3 = tf.Variable(3,name="v3")
sess.run(tf.initialize_variables([v3]))
saver_with_v3 = tf.train.Saver()
saver_with_v3.save(sess,'v123.ckpt')
التعليق الأكثر فائدة
عند إنشاء
tf.train.Saver
بدون وسيطات ، فإنه سيستخدم ضمنيًا المجموعة الحالية من المتغيرات _ في وقت إنشاء Saver_ عند الحفظ والاستعادة. إذا قمت بإضافة متغير جديد (على سبيل المثالv3
في كتلة التعليمات البرمجية الثانية) ، يجب عليك إنشاء متغير جديدtf.train.Saver
لحفظه.