91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決tensoflow在已訓練模型上繼續訓練fineturn的問題

發布時間:2021-08-23 10:34:59 來源:億速云 閱讀:161 作者:小新 欄目:開發技術

小編給大家分享一下如何解決tensoflow在已訓練模型上繼續訓練fineturn的問題,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

解決tensoflow如何在已訓練模型上繼續訓練fineturn的問題。

訓練代碼

任務描述: x = 3.0, y = 100.0, 運算公式 x×W+b = y,求 W和b的最優解。

# -*- coding: utf-8 -*-)
import tensorflow as tf
 
 
# 聲明占位變量x、y
x = tf.placeholder("float", shape=[None, 1])
y = tf.placeholder("float", [None, 1])
 
# 聲明變量
W = tf.Variable(tf.zeros([1, 1]),name='w')
b = tf.Variable(tf.zeros([1]),name='b')
 
# 操作
result = tf.matmul(x, W) + b
 
# 損失函數
lost = tf.reduce_sum(tf.pow((result - y), 2))
 
# 優化
train_step = tf.train.GradientDescentOptimizer(0.0007).minimize(lost)
 
with tf.Session() as sess:
  # 初始化變量
  sess.run(tf.global_variables_initializer())
  saver = tf.train.Saver(max_to_keep=3)
 
  # 這里x、y給固定的值
  x_s = [[3.0]]
  y_s = [[100.0]]
 
  step = 0
  while (True):
    step += 1
    feed = {x: x_s, y: y_s}
    # 通過sess.run執行優化
    sess.run(train_step, feed_dict=feed)
 
    if step % 1000 == 0:
      print 'step: {0}, loss: {1}'.format(step, sess.run(lost, feed_dict=feed))
      if sess.run(lost, feed_dict=feed) < 1e-10 or step > 4e3:
        print ''
        # print 'final loss is: {}'.format(sess.run(lost, feed_dict=feed))
        print 'final result of {0} = {1}(目標值是100.0)'.format('x×W+b', 3.0 * sess.run(W) + sess.run(b))
        print ''
        print("模型保存的W值 : %f" % sess.run(W))
        print("模型保存的b : %f" % sess.run(b))
        break
  saver.save(sess, "./save_model/re-train", global_step=step) # 保存模型

訓練完成之后生成模型文件:

如何解決tensoflow在已訓練模型上繼續訓練fineturn的問題

訓練輸出:

step: 1000, loss: 4.89526428282e-08
step: 2000, loss: 4.89526428282e-08
step: 3000, loss: 4.89526428282e-08
step: 4000, loss: 4.89526428282e-08
step: 5000, loss: 4.89526428282e-08
 
 
final result of x×W+b = [[99.99978]](目標值是100.0)
 
模型保存的W值 : 29.999931
模型保存的b : 9.999982

保存在模型中的W值是 29.999931,b是 9.999982。

以下代碼從保存的模型中恢復出訓練狀態,繼續訓練

任務描述: x = 3.0, y = 200.0, 運算公式 x×W+b = y,從上次訓練的模型中恢復出訓練參數,繼續訓練,求 W和b的最優解。

# -*- coding: utf-8 -*-)
import tensorflow as tf
 
 
# 聲明占位變量x、y
x = tf.placeholder("float", shape=[None, 1])
y = tf.placeholder("float", [None, 1])
 
with tf.Session() as sess:
 
  # 初始化變量
  sess.run(tf.global_variables_initializer())
 
  # saver = tf.train.Saver(max_to_keep=3)
  saver = tf.train.import_meta_graph(r'./save_model/re-train-5000.meta') # 加載模型圖結構
  saver.restore(sess, tf.train.latest_checkpoint(r'./save_model')) # 恢復數據
 
  # 從保存模型中恢復變量
  graph = tf.get_default_graph()
  W = graph.get_tensor_by_name("w:0")
  b = graph.get_tensor_by_name("b:0")
 
  print("從保存的模型中恢復出來的W值 : %f" % sess.run("w:0"))
  print("從保存的模型中恢復出來的b值 : %f" % sess.run("b:0"))
 
  # 操作
  result = tf.matmul(x, W) + b
  # 損失函數
  lost = tf.reduce_sum(tf.pow((result - y), 2))
  # 優化
  train_step = tf.train.GradientDescentOptimizer(0.0007).minimize(lost)
 
  # 這里x、y給固定的值
  x_s = [[3.0]]
  y_s = [[200.0]]
 
  step = 0
  while (True):
    step += 1
    feed = {x: x_s, y: y_s}
    # 通過sess.run執行優化
    sess.run(train_step, feed_dict=feed)
    if step % 1000 == 0:
      print 'step: {0}, loss: {1}'.format(step, sess.run(lost, feed_dict=feed))
      if sess.run(lost, feed_dict=feed) < 1e-10 or step > 4e3:
        print ''
        # print 'final loss is: {}'.format(sess.run(lost, feed_dict=feed))
        print 'final result of {0} = {1}(目標值是200.0)'.format('x×W+b', 3.0 * sess.run(W) + sess.run(b))
        print("模型保存的W值 : %f" % sess.run(W))
        print("模型保存的b : %f" % sess.run(b))
        break
  saver.save(sess, "./save_mode/re-train", global_step=step) # 保存模型

訓練輸出:

從保存的模型中恢復出來的W值 : 29.999931
從保存的模型中恢復出來的b值 : 9.999982
step: 1000, loss: 1.95810571313e-07
step: 2000, loss: 1.95810571313e-07
step: 3000, loss: 1.95810571313e-07
step: 4000, loss: 1.95810571313e-07
step: 5000, loss: 1.95810571313e-07
 
 
final result of x×W+b = [[199.99956]](目標值是200.0)
模型保存的W值 : 59.999866
模型保存的b : 19.999958

從保存的模型中恢復出來的W值是 29.999931,b是 9.999982,跟模型保存的值一致,說明加載成功。

總結

從頭開始訓練一個模型,需要通過 tf.train.Saver創建一個保存器,完成之后使用save方法保存模型到本地:

saver = tf.train.Saver(max_to_keep=3)
……
saver.save(sess, "./save_model/re-train", global_step=step) # 保存模型

在訓練好的模型上繼續訓練,fineturn一個模型,可以使用tf.train.import_meta_graph方法加載圖結構,使用restore方法恢復訓練數據,最后使用同樣的save方法保存到本地:

saver = tf.train.import_meta_graph(r'./save_model/re-train-10050.meta') # 加載模型圖結構
saver.restore(sess, tf.train.latest_checkpoint(r'./save_model')) # 恢復數據
saver.save(sess, "./save_mode/re-train", global_step=step) # 保存模型

注:特殊情況下(如本例)需要從恢復的模型中加載出數據:

# 從保存模型中恢復變量
graph = tf.get_default_graph()
W = graph.get_tensor_by_name("w:0")
b = graph.get_tensor_by_name("b:0")

看完了這篇文章,相信你對“如何解決tensoflow在已訓練模型上繼續訓練fineturn的問題”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修武县| 娄底市| 高陵县| 宁波市| 富阳市| 西藏| 神农架林区| 都匀市| 嘉定区| 从化市| 孝义市| 武冈市| 盐津县| 桃园县| 诸城市| 友谊县| 开封市| 石阡县| 谢通门县| 普兰店市| 三门县| 汤原县| 许昌市| 永安市| 张家川| 绥化市| 文登市| 青浦区| 南华县| 招远市| 柏乡县| 天全县| 淮北市| 中宁县| 永城市| 沙湾县| 苍山县| 门头沟区| 公安县| 页游| 大丰市|