譯者:cangyunyehtml
做者: Matthew Inkawhich前端
本教程將介紹如何是seq2seq
模型轉換爲PyTorch可用的前端混合Torch腳本。 咱們要轉換的模型是來自於聊天機器人教程 Chatbot tutorial. 你能夠把這個教程當作Chatbot tutorial的第二篇章,而且部署你的預訓練模型,或者你也能夠依據本文使用咱們採起的預訓練模型。就後者而言,你能夠從原始的Chatbot tutorial參考更詳細的數據預處理,模型理論和定義以及模型訓練。git
什麼是混合前端(Hybrid Frontend)?
在一個基於深度學習項目的研發階段, 使用像PyTorch這樣即時eager
、命令式的界面進行交互能帶來很大便利。 這使用戶可以在使用Python數據結構、控制流操做、打印語句和調試實用程序時經過熟悉的、慣用的Python腳本編寫。儘管即時性界面對於研究和試驗應用程序是一個有用的工具,可是對於生產環境中部署模型時,使用基於圖形graph-based
的模型表示將更加適用的。 一個延遲的圖型展現意味着能夠優化,好比無序執行操做,以及針對高度優化的硬件架構的能力。 此外,基於圖形的表示支持框架無關的模型導出。PyTorch提供了將即時模式的代碼增量轉換爲Torch腳本的機制,Torch腳本是一個在Python中的靜態可分析和可優化的子集,Torch使用它來在Python運行時獨立進行深度學習。github
在Torch中的torch.jit
模塊能夠找到將即時模式的PyTorch程序轉換爲Torch腳本的API。 這個模塊有兩個核心模式用於將即時模式模型轉換爲Torch腳本圖形表示: 跟蹤tracing
以及 腳本化scripting
。torch.jit.trace
函數接受一個模塊或者一個函數和一組示例的輸入,而後經過函數或模塊運行輸入示例,同時跟跟蹤遇到的計算步驟,而後輸出一個能夠展現跟蹤流程的基於圖形的函數。跟蹤Tracing
對於不涉及依賴於數據的控制流的直接的模塊和函數很是有用,就好比標準的卷積神經網絡。然而,若是一個有數據依賴的if語句和循環的函數被跟蹤,則只記錄示例輸入沿執行路徑調用的操做。換句話說,控制流自己並無被捕獲。要將帶有數據依賴控制流的模塊和函數進行轉化,已提供了一個腳本化機制。腳本顯式地將模塊或函數代碼轉換爲Torch腳本,包括全部可能的控制流路徑。 如需使用腳本模式script mode
, 要肯定繼承了 torch.jit.ScriptModule
基本類 (取代torch.nn.Module
) 而且增長 torch.jit.script
裝飾器到你的Python函數或者 torch.jit.script_method
裝飾器到你的模塊方法。使用腳本化的一個警告是,它只支持Python的一個受限子集。要獲取與支持的特性相關的全部詳細信息,請參考 Torch Script language reference。爲了達到最大的靈活性,能夠組合Torch腳本的模式來表示整個程序,而且能夠增量地應用這些技術。apache
致謝
本篇教程靈感來自以下資源:網絡
- Yuan-Kuei Wu’s pytorch-chatbot implementation: https://github.com/ywk991112/pytorch-chatbot
- Sean Robertson’s practical-pytorch seq2seq-translation example: https://github.com/spro/practical-pytorch/tree/master/seq2seq-translation
- FloydHub’s Cornell Movie Corpus preprocessing code: https://github.com/floydhub/textutil-preprocess-cornell-movie-corpus
閱讀全文/改進本文數據結構