Tensorflow |(5)模型保存與恢復、自定義命令行參數(shù)
Tensorflow |(1)初識Tensorflow
Tensorflow |(2)張量的階和數(shù)據(jù)類型及張量操作
Tensorflow |(3)變量的的創(chuàng)建、初始化、保存和加載
Tensorflow |(4)名稱域、圖 和會話
Tensorflow |(5)模型保存與恢復、自定義命令行參數(shù)
模型保存與恢復、自定義命令行參數(shù)、
在我們訓練或者測試過程中,總會遇到需要保存訓練完成的模型,然后從中恢復繼續(xù)我們的測試或者其它使用。模型的保存和恢復也是通過tf.train.Saver類去實現(xiàn),它主要通過將Saver類添加OPS保存和恢復變量到checkpoint。它還提供了運行這些操作的便利方法。
tf.train.Saver(var_list=None, reshape=False, sharded=False, max_to_keep=5, keep_checkpoint_every_n_hours=10000.0, name=None, restore_sequentially=False, saver_def=None, builder=None, defer_build=False, allow_empty=False, write_version=tf.SaverDef.V2, pad_step_number=False)
var_list:指定將要保存和還原的變量。它可以作為一個dict或一個列表傳遞.
max_to_keep:指示要保留的最近檢查點文件的最大數(shù)量。創(chuàng)建新文件時,會刪除較舊的文件。如果無或0,則保留所有檢查點文件。默認為5(即保留最新的5個檢查點文件。)
keep_checkpoint_every_n_hours:多久生成一個新的檢查點文件。默認為10,000小時
保存
保存我們的模型需要調用Saver.save()方法。save(sess, save_path, global_step=None),checkpoint是專有格式的二進制文件,將變量名稱映射到張量值。
import tensorflow as tf
a = tf.Variable([[1.0,2.0]],name="a")
b = tf.Variable([[3.0],[4.0]],name="b")
c = tf.matmul(a,b)
saver=tf.train.Saver()
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(c))
saver.save(sess, '/tmp/ckpt/test/matmul')
我們可以看保存了什么文件
在多次訓練的時候可以指定多少間隔生成檢查點文件
saver.save(sess, '/tmp/ckpt/test/matmu', global_step=0) ==> filename: 'matmu-0'
saver.save(sess, '/tmp/ckpt/test/matmu', global_step=1000) ==> filename: 'matmu-1000'
恢復
恢復模型的方法是restore(sess, save_path),save_path是以前保存參數(shù)的路徑,我們可以使用tf.train.latest_checkpoint來獲取最近的檢查點文件(也惡意直接寫文件目錄)
import tensorflow as tf
a = tf.Variable([[1.0,2.0]],name="a")
b = tf.Variable([[3.0],[4.0]],name="b")
c = tf.matmul(a,b)
saver=tf.train.Saver(max_to_keep=1)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(c))
saver.save(sess, '/tmp/ckpt/test/matmul')
# 恢復模型
model_file = tf.train.latest_checkpoint('/tmp/ckpt/test/')
saver.restore(sess, model_file)
print(sess.run([c], feed_dict={a: [[5.0,6.0]], b: [[7.0],[8.0]]}))
自定義命令行參數(shù)
tf.app.run(),默認調用main()函數(shù),運行程序。main(argv)必須傳一個參數(shù)。
tf.app.flags,它支持應用從命令行接受參數(shù),可以用來指定集群配置等。在tf.app.flags下面有各種定義參數(shù)的類型
DEFINE_string(flag_name, default_value, docstring)
DEFINE_integer(flag_name, default_value, docstring)
DEFINE_boolean(flag_name, default_value, docstring)
DEFINE_float(flag_name, default_value, docstring)
第一個也就是參數(shù)的名字,路徑、大小等等。第二個參數(shù)提供具體的值。第三個參數(shù)是說明文檔
tf.app.flags.FLAGS,在flags有一個FLAGS標志,它在程序中可以調用到我們前面具體定義的flag_name.
import tensorflow as tf
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('data_dir', '/tmp/tensorflow/mnist/input_data',
"""數(shù)據(jù)集目錄""")
tf.app.flags.DEFINE_integer('max_steps', 2000,
"""訓練次數(shù)""")
tf.app.flags.DEFINE_string('summary_dir', '/tmp/summary/mnist/convtrain',
"""事件文件目錄""")
def main(argv):
print(FLAGS.data_dir)
print(FLAGS.max_steps)
print(FLAGS.summary_dir)
print(argv)
if __name__=="__main__":
tf.app.run()
TensorFlow 機器學習
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。