問題概述
下面是在facenet中加載pretrained_model時遇到的一些錯誤:
錯誤1:tensorflow.python.framework.errors_impl.InvalidArgumentError exception str() failed
錯誤2:tf.train.get_checkpoint_state(checkpoint_dir) return none type
錯誤3:tf.train.latest_checkpoint(“model/”) return none
錯誤1解決方案:
[1]中的方法是在當我們自己的訓練集class數量和作者當初的訓練集class數量相同時纔有效,然而我們在實際開發時不可能恰好和作者的訓練集class數量相同。下面是參考[2][3]給出的解決方案:
下面這個創建saver的方法在初次保存模型時可用,但在恢復模型時是不可用的。
saver = tf.train.Saver(tf.trainable_variables(), max_to_keep=3)
恢復模型時應該像下面這樣:
saver = tf.train.import_meta_graph('/home/***/models/20180402-114759/model-20180402-114759.meta')
saver.restore(sess, tf.train.latest_checkpoint('/home/***/models/20180402-114759'))
錯誤2、3解決方案:
參考[4]知道tensorflow預訓練模型有4部分組成:
出現錯誤2、3的原因可能是由於缺少checkpoint文件,我們可以新建一個checkpoint文件並寫入如下內容:
model_checkpoint_path: "/home/master/dev/facerec/facenet/mydataset/models/20180402-114759/model-20180402-114759.ckpt-275"
至此,facenet加載pretrained_model時遇到的bug全部解決。
參考文獻
[1] 加載pretrained_model模型
[2] TensorFlow保存還原模型的正確方式,Saver的save和restore方法,親測可用
[3] Tensorflow 同時載入多個模型
[4] 【tensorflow】保存模型、再次加載模型等操作