# 將 TensorFlow 投入生產
如果我們想在生產環境中使用我們的機器學習腳本,我們首先需要考慮一些要點作為最佳實踐。在本節中,我們將概述其中的一些內容。
## 做好準備
在本文中,我們想總結并濃縮將 TensorFlow 投入生產的各種技巧。我們將介紹如何最好地保存和加載詞匯表,圖,變量和模型檢查點。我們還將討論如何使用 TensorFlow 的命令行參數解析器并更改 TensorFlow 的日志記錄詳細程度。
## 操作步驟
1. 運行 TensorFlow 程序時,我們可能需要檢查內存中是否已存在其他圖會話,或者在調試程序后是否清除了圖會話。我們可以使用以下命令行來完成此任務:
```py
from tensorflow.python.framework import ops
ops.reset_default_graph()
```
1. 在處理文本(或任何數據管道)時,我們需要確保我們保存處理數據的方式,以便我們可以以相同的方式處理未來的評估數據。例如,如果我們處理文本,我們需要確保我們可以保存并加載詞匯表。以下代碼是如何使用`JSON`庫保存詞匯表字典的示例:
```py
import json word_list = ['to', 'be', 'or', 'not', 'to', 'be']
vocab_list = list(set(word_list))
vocab2ix_dict = dict(zip(vocab_list, range(len(vocab_list))))
ix2vocab_dict = {val:key for key,val in vocab2ix_dict.items()}
# Save vocabulary
import json
with open('vocab2ix_dict.json', 'w') as file_conn:
json.dump(vocab2ix_dict, file_conn)
# Load vocabulary
with open('vocab2ix_dict.json', 'r') as file_conn:
vocab2ix_dict = json.load(file_conn)
```
> 在這里,我們以`JSON`格式保存了詞匯詞典,但我們也可以將其保存在`text`文件,`csv`甚至二進制格式中。如果詞匯量很大,則首選二進制文件。您還可以考慮使用 pickle 庫來創建`pkl`二進制文件,但請注意,pickle 文件在庫和 Python 版本之間不能很好地轉換。
1. 為了保存模型圖和變量,我們創建了一個`Saver()`操作并將其添加到圖中。建議我們在訓練期間定期保存模型。要保存模型,請輸入以下代碼:
```py
After model declaration, add a saving operations
saver = tf.train.Saver()
# Then during training, save every so often, referencing the training generation
for i in range(generations):
...
if i%save_every == 0:
saver.save(sess, 'my_model', global_step=step)
# Can also save only specific variables:
saver = tf.train.Saver({"my_var": my_variable})
```
> 請注意,`Saver()`操作也會采用其他參數。如前面的示例所示,它可以使用變量和張量字典來保存特定元素。每隔`n`小時也可以檢查一次,定期執行保存操作。默認情況下,保存操作僅保留最后五個模型保存(出于空間考慮)。可以使用`maximum_to_keep`選項更改此設置。
1. 在保存模型之前,請務必命名模型的重要操作。如果 TensorFlow 沒有名稱,則沒有簡單的方法來加載特定的占位符,操作或變量。 TensorFlow 中的大多數操作和函數都接受`name`參數,如下例所示:
```py
conv_weights = tf.Variable(tf.random_normal(), name='conv_weights')
loss = tf.reduce_mean(... , name='loss')
```
1. TensorFlow 還可以使用`tf.apps.flags`庫在命令行上輕松執行 arg-parsing。使用這些函數,我們可以定義字符串,浮點數,整數或布爾值的命令行參數,如下面的代碼片段所示。使用這些標志定義,我們可以運行`tf.app.run()`,它將使用以下標志參數運行`main()`函數:
```py
tf.flags.DEFINE_string("worker_locations", "", "List of worker addresses.")
tf.flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
tf.flags.DEFINE_integer('generations', 1000, 'Number of training generations.')
tf.flags.DEFINE_boolean('run_unit_tests', False, 'If true, run tests.')
FLAGS = tf.flags.FLAGS
# Need to define a 'main' function for the app to run
def main(_):
worker_ips = FLAGS.worker_locations.split(",")
learning_rate = FLAGS.learning_rate
generations = FLAGS.generations
run_unit_tests = FLAGS.run_unit_tests
# Run the Tensorflow app
if __name__ == "__main__":
# The following is looking for a "main()" function to run and will pass.
tf.app.run()
# Can modify this to be more custom:
tf.app.run(main=my_main_function(), argv=my_arguments)
```
1. TensorFlow 具有內置日志記錄,我們可以為其設置級別參數。我們可以設定的水平是`DEBUG`,`INFO`,`WARN`,`ERROR`和`FATAL`。默認為`WARN`,如下所示:
```py
tf.logging.set_verbosity(tf.logging.WARN)
# WARN is the default value, but to see more information, you can set it to
# INFO or DEBUG
tf.logging.set_verbosity(tf.logging.DEBUG)
```
## 工作原理
在本節中,我們提供了在 TensorFlow 中創建生產級代碼的提示。我們想介紹 app-flags,模型保存和日志記錄等概念,以便用戶可以使用這些工具一致地編寫代碼,并了解在其他代碼中看到這些工具時的含義。還有許多其他方法可以編寫好的生產代碼,但下面的秘籍中將顯示完整的示例。
- TensorFlow 入門
- 介紹
- TensorFlow 如何工作
- 聲明變量和張量
- 使用占位符和變量
- 使用矩陣
- 聲明操作符
- 實現激活函數
- 使用數據源
- 其他資源
- TensorFlow 的方式
- 介紹
- 計算圖中的操作
- 對嵌套操作分層
- 使用多個層
- 實現損失函數
- 實現反向傳播
- 使用批量和隨機訓練
- 把所有東西結合在一起
- 評估模型
- 線性回歸
- 介紹
- 使用矩陣逆方法
- 實現分解方法
- 學習 TensorFlow 線性回歸方法
- 理解線性回歸中的損失函數
- 實現 deming 回歸
- 實現套索和嶺回歸
- 實現彈性網絡回歸
- 實現邏輯回歸
- 支持向量機
- 介紹
- 使用線性 SVM
- 簡化為線性回歸
- 在 TensorFlow 中使用內核
- 實現非線性 SVM
- 實現多類 SVM
- 最近鄰方法
- 介紹
- 使用最近鄰
- 使用基于文本的距離
- 使用混合距離函數的計算
- 使用地址匹配的示例
- 使用最近鄰進行圖像識別
- 神經網絡
- 介紹
- 實現操作門
- 使用門和激活函數
- 實現單層神經網絡
- 實現不同的層
- 使用多層神經網絡
- 改進線性模型的預測
- 學習玩井字棋
- 自然語言處理
- 介紹
- 使用詞袋嵌入
- 實現 TF-IDF
- 使用 Skip-Gram 嵌入
- 使用 CBOW 嵌入
- 使用 word2vec 進行預測
- 使用 doc2vec 進行情緒分析
- 卷積神經網絡
- 介紹
- 實現簡單的 CNN
- 實現先進的 CNN
- 重新訓練現有的 CNN 模型
- 應用 StyleNet 和 NeuralStyle 項目
- 實現 DeepDream
- 循環神經網絡
- 介紹
- 為垃圾郵件預測實現 RNN
- 實現 LSTM 模型
- 堆疊多個 LSTM 層
- 創建序列到序列模型
- 訓練 Siamese RNN 相似性度量
- 將 TensorFlow 投入生產
- 介紹
- 實現單元測試
- 使用多個執行程序
- 并行化 TensorFlow
- 將 TensorFlow 投入生產
- 生產環境 TensorFlow 的一個例子
- 使用 TensorFlow 服務
- 更多 TensorFlow
- 介紹
- 可視化 TensorBoard 中的圖
- 使用遺傳算法
- 使用 k 均值聚類
- 求解常微分方程組
- 使用隨機森林
- 使用 TensorFlow 和 Keras