成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何保存和恢復TensorFlow訓練的模型

人工智能 深度學習
在這篇文章中,我們來看一下如何保存和恢復TensorFlow模型,我們在此介紹一些最有用的方法,并提供一些例子。

如果深層神經網絡模型的復雜度非常高的話,那么訓練它可能需要相當長的一段時間,當然這也取決于你擁有的數據量,運行模型的硬件等等。在大多數情況下,你需要通過保存文件來保障你試驗的穩定性,防止如果中斷(或一個錯誤),你能夠繼續從沒有錯誤的地方開始。

更重要的是,對于任何深度學習的框架,像TensorFlow,在成功的訓練之后,你需要重新使用模型的學習參數來完成對新數據的預測。

[[208282]]

在這篇文章中,我們來看一下如何保存和恢復TensorFlow模型,我們在此介紹一些最有用的方法,并提供一些例子。

1. 首先我們將快速介紹TensorFlow模型

TensorFlow的主要功能是通過張量來傳遞其基本數據結構類似于NumPy中的多維數組,而圖表則表示數據計算。它是一個符號庫,這意味著定義圖形和張量將僅創建一個模型,而獲取張量的具體值和操作將在會話(session)中執行,會話(session)一種在圖中執行建模操作的機制。會話關閉時,張量的任何具體值都會丟失,這也是運行會話后將模型保存到文件的另一個原因。

通過示例可以幫助我們更容易理解,所以讓我們為二維數據的線性回歸創建一個簡單的TensorFlow模型。

首先,我們將導入我們的庫:

  1. import tensorflow as tf   
  2. import numpy as np   
  3. import matplotlib.pyplot as plt   
  4. %matplotlib inline 

下一步是創建模型。我們將生成一個模型,它將以以下的形式估算二次函數的水平和垂直位移:

  1. y = (x - h) ^ 2 + v 

其中h是水平和v是垂直的變化。

以下是如何生成模型的過程(有關詳細信息,請參閱代碼中的注釋):

  1. # Clear the current graph in each run, to avoid variable duplication 
  2. tf.reset_default_graph() 
  3. # Create placeholders for the x and y points 
  4. X = tf.placeholder("float")   
  5. Y = tf.placeholder("float") 
  6. # Initialize the two parameters that need to be learned 
  7. h_est = tf.Variable(0.0, name='hor_estimate')   
  8. v_est = tf.Variable(0.0, name='ver_estimate'
  9. # y_est holds the estimated values on y-axis 
  10. y_est = tf.square(X - h_est) + v_est 
  11. # Define a cost function as the squared distance between Y and y_est 
  12. cost = (tf.pow(Y - y_est, 2)) 
  13. # The training operation for minimizing the cost function. The 
  14. # learning rate is 0.001 
  15. trainop = tf.train.GradientDescentOptimizer(0.001).minimize(cost) 

在創建模型的過程中,我們需要有一個在會話中運行的模型,并且傳遞一些真實的數據。我們生成一些二次數據(Quadratic data),并給他們添加噪聲。

  1. # Use some values for the horizontal and vertical shift 
  2. h = 1   
  3. v = -2 
  4. # Generate training data with noise 
  5. x_train = np.linspace(-2,4,201)   
  6. noise = np.random.randn(*x_train.shape) * 0.4   
  7. y_train = (x_train - h) ** 2 + v + noise 
  8. # Visualize the data  
  9. plt.rcParams['figure.figsize'] = (10, 6)   
  10. plt.scatter(x_train, y_train)   
  11. plt.xlabel('x_train')   
  12. plt.ylabel('y_train') 

2. The Saver class

Saver類是TensorFlow庫提供的類,它是保存圖形結構和變量的***方法。

(1) 保存模型

在以下幾行代碼中,我們定義一個Saver對象,并在train_graph()函數中,經過100次迭代的方法最小化成本函數。然后,在每次迭代中以及優化完成后,將模型保存到磁盤。每個保存在磁盤上創建二進制文件被稱為“檢查點”。

  1. # Create a Saver object 
  2. saver = tf.train.Saver() 
  3.  
  4. init = tf.global_variables_initializer() 
  5.  
  6. # Run a session. Go through 100 iterations to minimize the cost 
  7. def train_graph():   
  8.     with tf.Session() as sess: 
  9.         sess.run(init) 
  10.         for i in range(100): 
  11.             for (x, y) in zip(x_train, y_train): 
  12.  
  13.                 # Feed actual data to the train operation 
  14.                 sess.run(trainop, feed_dict={X: x, Y: y}) 
  15.  
  16.             # Create a checkpoint in every iteration 
  17.             saver.save(sess, 'model_iter', global_step=i
  18.  
  19.         # Save the final model 
  20.         saver.save(sess, 'model_final') 
  21.         h_ = sess.run(h_est) 
  22.         v_ = sess.run(v_est) 
  23.     return h_, v_ 

現在讓我們用上述功能訓練模型,并打印出訓練的參數。

  1. result = train_graph()   
  2. print("h_est = %.2f, v_est = %.2f" % result)   
  3.  
  4. $ python tf_save.py 
  5. h_est = 1.01, v_est = -1.96 

Okay,參數是非常準確的。如果我們檢查我們的文件系統,***4次迭代中保存有文件以及最終的模型。

保存模型時,你會注意到需要4種類型的文件才能保存:

  • “.meta”文件:包含圖形結構。
  • “.data”文件:包含變量的值。
  • “.index”文件:標識檢查點。
  • “checkpoint”文件:具有最近檢查點列表的協議緩沖區。

檢查點文件保存到磁盤

圖1:檢查點文件保存到磁盤

調用tf.train.Saver()方法,如上所示,將所有變量保存到一個文件。通過將它們作為參數,表情通過列表或dict傳遞來保存變量的子集,例如:tf.train.Saver({‘hor_estimate’: h_est})。

Saver構造函數的一些其他有用的參數,也可以控制整個過程,它們是:

  • max_to_keep:最多保留的檢查點數。
  • keep_checkpoint_every_n_hours:保存檢查點的時間間隔。如果你想要了解更多信息,請查看官方文檔的Saver類,它提供了其它有用的信息,你可以探索查看。
  • Restoring Models

恢復TensorFlow模型時要做的***件事就是將圖形結構從“.meta”文件加載到當前圖形中。

  1. tf.reset_default_graph()   
  2. imported_meta = tf.train.import_meta_graph("model_final.meta") 

也可以使用以下命令探索當前圖形tf.get_default_graph()。接著第二步是加載變量的值。提醒:值僅存在于會話(session)中。

  1. with tf.Session() as sess:   
  2.     imported_meta.restore(sess, tf.train.latest_checkpoint('./')) 
  3.     h_est2 = sess.run('hor_estimate:0') 
  4.     v_est2 = sess.run('ver_estimate:0') 
  5.     print("h_est: %.2f, v_est: %.2f" % (h_est2, v_est2)) 
  1. $ python tf_restore.py 
  2. INFO:tensorflow:Restoring parameters from ./model_final   
  3. h_est: 1.01, v_est: -1.96 

如前面所提到的,這種方法只保存圖形結構和變量,這意味著通過占位符“X”和“Y”輸入的訓練數據不會被保存。

無論如何,在這個例子中,我們將使用我們定義的訓練數據tf,并且可視化模型擬合。

  1. plt.scatter(x_train, y_train, label='train data')   
  2. plt.plot(x_train, (x_train - h_est2) ** 2 + v_est2, color='red'label='model')   
  3. plt.xlabel('x_train')   
  4. plt.ylabel('y_train')   
  5. plt.legend()  

Saver這個類允許使用一個簡單的方法來保存和恢復你的TensorFlow模型(圖形和變量)到/從文件,并保留你工作中的多個檢查點,這可能是有用的,它可以幫助你的模型在訓練過程中進行微調。

4. SavedModel格式(Format)

在TensorFlow中保存和恢復模型的一種新方法是使用SavedModel,Builder和loader功能。這個方法實際上是Saver提供的更高級別的序列化,它更適合于商業目的。

雖然這種SavedModel方法似乎不被開發人員完全接受,但它的創作者指出:它顯然是未來。與Saver主要關注變量的類相比,SavedModel嘗試將一些有用的功能包含在一個包中,例如Signatures:允許保存具有一組輸入和輸出的圖形,Assets:包含初始化中使用的外部文件。

(1) 使用SavedModel Builder保存模型

接下來我們嘗試使用SavedModelBuilder類完成模型的保存。在我們的示例中,我們不使用任何符號,但也足以說明該過程。

  1. tf.reset_default_graph() 
  2. # Re-initialize our two variables 
  3. h_est = tf.Variable(h_est2, name='hor_estimate2')   
  4. v_est = tf.Variable(v_est2, name='ver_estimate2'
  5.  
  6. # Create a builder 
  7. builder = tf.saved_model.builder.SavedModelBuilder('./SavedModel/') 
  8.  
  9. # Add graph and variables to builder and save 
  10. with tf.Session() as sess:   
  11.     sess.run(h_est.initializer) 
  12.     sess.run(v_est.initializer) 
  13.     builder.add_meta_graph_and_variables(sess, 
  14.                                        [tf.saved_model.tag_constants.TRAINING], 
  15.                                        signature_def_map=None
  16.                                        assets_collection=None
  17. builder.save() 
  1. $ python tf_saved_model_builder.py 
  2. INFO:tensorflow:No assets to save.   
  3. INFO:tensorflow:No assets to write.   
  4. INFO:tensorflow:SavedModel written to: b'./SavedModel/saved_model.pb' 

運行此代碼時,你會注意到我們的模型已保存到位于“./SavedModel/saved_model.pb”的文件中。

(2) 使用SavedModel Loader程序恢復模型

模型恢復使用tf.saved_model.loader,并且可以恢復會話范圍中保存的變量,符號。

在下面的例子中,我們將加載模型,并打印出我們的兩個系數(h_est和v_est)的數值。數值如預期的那樣,我們的模型已經被成功地恢復了。

  1. with tf.Session() as sess:   
  2.     tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.TRAINING], './SavedModel/') 
  3.     h_est = sess.run('hor_estimate2:0') 
  4.     v_est = sess.run('ver_estimate2:0') 
  5.     print("h_est: %.2f, v_est: %.2f" % (h_est, v_est)) 
  1. $ python tf_saved_model_loader.py 
  2. INFO:tensorflow:Restoring parameters from b'./SavedModel/variables/variables'   
  3. h_est: 1.01, v_est: -1.96 

5. 結論

如果你知道你的深度學習網絡的訓練可能會花費很長時間,保存和恢復TensorFlow模型是非常有用的功能。該主題太廣泛,無法在一篇博客文章中詳細介紹。不管怎樣,在這篇文章中我們介紹了兩個工具:Saver和SavedModel builder/loader,并創建一個文件結構,使用簡單的線性回歸來說明實例。希望這些能夠幫助到你訓練出更好的神經網絡模型。

責任編輯:趙寧寧 來源: 36大數據
相關推薦

2020-10-27 09:37:43

PyTorchTensorFlow機器學習

2023-01-11 07:28:49

TensorFlow分類模型

2021-11-16 19:37:03

緩存

2024-05-28 08:11:44

SpringTensorFlow訓練

2017-08-28 21:31:37

TensorFlow深度學習神經網絡

2017-03-27 16:18:30

神經網絡TensorFlow人工智能

2017-08-29 13:50:03

TensorFlow深度學習神經網絡

2020-10-15 11:22:34

PyTorchTensorFlow機器學習

2021-11-02 09:40:50

TensorFlow機器學習人工智能

2025-04-01 09:54:09

AI算法大模型AI

2017-11-10 12:45:16

TensorFlowPython神經網絡

2023-01-05 09:33:37

視覺模型訓練

2021-09-10 16:53:28

微軟瀏覽器Windows

2017-03-24 15:58:46

互聯網

2017-10-18 09:48:13

深度學習TensorFlow入門篇

2024-11-14 08:00:00

2018-12-27 10:00:37

Windows10Office文檔

2024-07-25 08:25:35

2023-02-01 09:46:29

2021-09-26 10:47:12

預訓練模型GPT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线观看视频一区 | 亚洲国产视频一区二区 | 一区二区三区国产 | 久久99国产精品久久99果冻传媒 | 久久中文字幕一区 | 亚洲精品一区二区三区 | 男女黄网站 | 久久人人爽人人爽 | 中文字幕一区二区三区精彩视频 | 国产三级一区二区三区 | 婷婷免费视频 | 日韩在线免费电影 | 91久久综合亚洲鲁鲁五月天 | 精一区二区 | 男人的天堂久久 | 日本高清中文字幕 | 九九热九九 | 日韩www| 日日av| 久久久五月天 | 欧美精品一区二区免费 | 国产精品美女久久久久久免费 | 97精品国产 | 日日干日日 | 天天舔天天 | 亚洲精品第一 | 国产日韩精品视频 | 亚洲一区二区电影网 | 91大神新作在线观看 | 九九爱这里只有精品 | 日本久久精品 | 国产一区二区不卡 | 亚洲国产情侣 | 黄色av网站在线观看 | 天堂色综合 | 欧美日韩中文字幕 | 国产日韩精品一区 | 精品久久久久久 | 国产精品a免费一区久久电影 | 国产女人第一次做爰毛片 | 中文字幕91 |