教程 | 一招教你使用 tf.keras 和 eager execution 解決複雜問題
選自
Medium
作者:
Yash Katariya
機器之心編譯
參與:乾樹
、王淑婷
本文作者利用 TensorFlow 的兩個最新 API(tf.keras 和 eager execution)解決了四類複雜問題:文本生成、生成對抗網路、神經網路機器翻譯、圖片標註。文中對此進行了詳細描述,並附上其 notebook 地址。
生成模型和序列模型總是令我著迷:它們提出的問題與我們初學機器學習時常遇到的問題不同。剛開始學習 ML 時,和很多人一樣,我學的是分類和回歸。這些可以幫助我們提出並回答以下問題:
圖片里是貓還是狗?(分類)
明天有多大概率會下雨?(回歸)
分類和回歸是非常值得掌握的技能,並且幾乎可以無限將這兩者用於現實問題。但是,我們可能會提出其它類型的問題,這些問題與之前的十分不同。
能作詩嗎?(文本生成)
能生成一張貓的圖片嗎?(生成對抗網路)
能翻譯句子嗎?(神經網路機器翻譯)
能根據圖片生成標題嗎?(圖片標註)
在暑期實習期間,我使用 TensorFlow 的兩個最新 API(tf.keras 和 eager execution)開發了這些示例,以下是分享內容。希望你們能覺得它們有用,有趣!
Eager execution 是一個由運行定義的命令式介面,一旦從 Python 調用,其操作將被立即執行。這使得入門 TensorFlow 變得更簡單,也使研發更直觀。
tf.keras 是一個高級 API,用於定義具有類似樂高積木的模型。我使用模型子類化(Model subclassing)實現了這些示例,它允許我們通過子類化 tf.keras 模型和定義自己的前向傳播來建立完全可定製的模型。當啟用 eager execution 時,模型子類化特別有用,因為前向傳播可以被命令式地編寫。
如果你還不了解這些 API,可以通過 tensorflow.org/tutorials 上的 notebook 來了解更多信息,其中包含最近更新的示例。
以下每個示例都是端到端的,並遵循類似的模式:
1. 自動下載訓練數據。
2. 預處理訓練數據,並創建 tf.data 數據集以便在輸入管道中使用。
3. 使用 tf.keras 模型子類化 API 定義模型。
4. 使用 eager execution 訓練模型。
5. 演示如何使用訓練好的模型。
示例#1:文本生成
第一個示例是文本生成,我們用 RNN 生成與莎士比亞風格類似的文本。你可以通過下面的鏈接在 Colaboratory 上運行它(或者從 GitHub 下載它當做 Jupyter notebook)。代碼在 notebook 中有詳細解釋。
示例 1 notebook:https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/text_generation.ipynb
鑒於莎士比亞著作頗豐,這個例子學會了生成與莎翁風格相似的文本:
在莎士比亞文集訓練 30 個 epoch 後,notebook 生成的示例文本。
雖然大部分句子都沒有意義(因為這個簡單的模型還沒有學會語言的含義),但令人印象深刻的是,大多數單詞拼寫正確,並且它生成的劇本結構看起來與原始劇本的結構相似。(這是一個基於字元的模型,我們訓練它的時間不長——但它已經成功地從零開始學會了這兩件事)。只要你想,更改一行代碼就可以更改數據集。)
想要更進一步了解 RNN,可以去看 Andrej Karpathy 的優秀文章——《The Unreasonable Effectiveness of Recurrent Neural Networks》。如果你想了解更多關於用 Keras 或 tf·Keras 實現 RNN 的信息,我們推薦 Francois Chollet 的 notebook。
Francois Chollet 的 notebook:https://github.com/fchollet/deep-learning-with-python-notebooks
示例 #2:DCGAN
在這個示例中,我們用 DCGAN 生成手寫數字。生成對抗網路(GAN)由生成器和判別器組成。生成器的工作是生成逼真的圖像,以欺騙判別器。判別器的工作是在真圖像和偽圖像(由生成器生成)之間進行分類。下面看到的輸出是在使用《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》一文中所述的網路架構和超參數訓練生成器和判別器 150 個 epoch 之後生成的。
示例 2 notebook:https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb
在 150 個 epoch 中每 10 個 epoch 生成一次圖像的 GIF。你可以在 notebook 中找到生成這種 GIF 的代碼。
示例#3:注意力神經網路機器翻譯
這個示例訓練模型將西班牙語句子翻譯成英語句子。模型訓練好後,你可以輸入西班牙語,例如「?todavia estan en casa?」,並返回英文翻譯:「are you still at home?」
下圖是注意力圖。它顯示了翻譯時,輸入句子的哪些部分會引起模型的注意。例如,當模型翻譯「cold」這個詞時,它正看著「mucho」,「frio」,「aqui」。我們使用 tf.keras 和 eager execution 從零開始實現 Bahdanau Attention,詳細解釋在 notebook 中。你還可以將此實現用作實現自定義模型的基礎。
示例 3 notebook:https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb
上述翻譯的注意力圖。
示例 #4:注意力圖像標註
在此示例中,我們訓練模型用以預測圖像的標題。我們還生成了一個注意力圖,它顯示了模型在生成標題時所關注的圖像部分。例如,當模型預測單詞「衝浪板」時,它會聚焦在圖片中的衝浪板附近。我們使用 MS-COCO 數據集的子集訓練該模型,該數據集將由 notebook 自動下載。
示例 4 notebook:https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/image_captioning_with_attention.ipynb
圖像的預測標題。
上圖中每個單詞的注意力圖。
後續
要了解有關 tf.keras 和 eager 的更多信息,請密切關注 tensorflow.org/tutorials 以獲取更新內容,並定期查看此博客和 TensorFlow 的官方推特。
原文鏈接:https://medium.com/tensorflow/complete-code-examples-for-machine-translation-with-attention-image-captioning-text-generation-51663d07a63d
本文為機器之心編譯,
轉載請聯繫本公眾號獲得授權
。?------------------------------------------------
加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com
投稿或尋求報道:
content
@jiqizhixin.com廣告 & 商務合作:bd@jiqizhixin.com


※ECCV 2018 | 曠視科技Oral論文解讀:IoU-Net讓目標檢測用上定位置信度
※一文簡述深度學習優化方法——梯度下降
TAG:機器之心 |