2018年8月28日 星期二

基於 Tensorflow eager 的文本生成,注意力,圖像注釋的完整代碼




本文為 AI 研習社編譯的技術博客,原標題 Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution,作者為 Yash Katariyae(開發者項目工程師實習生)。


翻譯 | 老趙 整理 | 凡江


我總是發現生成和序列模型令人著迷:他們提出的問題與我們剛開始學習機器學習時常遇到的問題不同。當我第一次開始學習ML時,我學了分類和回歸(和大多數人一樣)。這些幫助我們提出並回答以下問題:



這是貓還是狗的照片? (分類)


明天會下雨的幾率是多少? (回歸)


掌握分類和回歸是非常有用的技能,並且這些領域的應用對現實問題幾乎沒有限制。但是,我們可能會問其他不同類型的問題。


我們能生成一首詩嗎? (文字生成)



我們可以生成一張貓的照片嗎? (GANs)


我們可以將句子從一種語言翻譯成另一種語言嗎? (NMT)


我們可以描述圖像內容嗎? (圖像注釋)


在暑期實習期間,我使用TensorFlow的兩個最新API開發了這些示例:tf.keras,以及eager function,我在下面分享了它們。我希望你發現它們有用,有趣。


eager function是一個逐步運行的界面,其中操作在從Python調用時即刻執行。這使得TensorFlow上手容易,並且可以是研究和開發更加直觀。



tf.keras是一個定義模型的高級API,就像積木建造的樂高一樣。我使用模型子類化實現了這些示例,它允許通過子類化tf.keras.Model並定義自己的前向傳遞來製作完全可自定義的模型。 當啟用eager function時,模型子類化特別有用,因為可以強制寫入前向傳遞。


如果你對這些APIs不了解,你可以通過探索tensorflow.org/tutorials(http://tensorflow.org/tutorials)上的序列來了解更多信息,其中包含最近更新的示例。


以下每個示例都是端到端的,並遵循類似的模式:


自動下載訓練數據集。


預處理訓練數據,並創建tf.data數據集以在輸入管道中使用。



使用tf.keras模型子類API定義模型。


使用eager function訓練模型。


演示如何使用訓練模型。



示例 1:文本生成


我們的第一個例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/text_generation.ipynb)是文本生成,我們使用RNN生成與莎士比亞類似的文本。您可以使用上面的鏈接在Colaboratory上運行它(或者您也可以從GitHub下載它作為Jupyter筆記本)。代碼在筆記本中詳細解釋。



基於莎士比亞的大量作品,這個例子學會了生成聽起來和風格相似的文字:



在訓練莎士比亞寫作集合的30個時期的後,筆記本生成了示例文本。


雖然大多數句子沒有意義(當然,這個簡單的模型還沒有學會語言的意義),令人印象深刻的是大多數單詞是有效的,並且它生成出的戲劇的結構看起來類似於來自原文的那些。 (這是一個基於角色的模型,在訓練的短時間內 – 它已經成功地從頭開始學習這兩件事)。如果您願意,可以通過更改單行代碼來更改數據集。


了解更多關於RNN的最好方法是Andrej Karpathy的文章,即The Unreasonable Effectiveness of Recurrent Neural Networks。如果您想了解更多關於使用Keras或tf.keras實現RNN的信息,我們推薦由Francois Chollet提供的筆記。



示例 2:DCGAN


在這個例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb)中,我們使用DCGAN生成手寫數字。生成式對抗網路(GAN)由生成器和鑒別器組成。生成器的工作是創建令人信服的圖像以欺騙鑒別器。鑒別器的工作是在真實圖像和偽圖像(由生成器創建)之間進行分類。下面看到的輸出是在使用 Unsupervised Representing Learning with Deep Convolutional Generative Adversarial Networks。


這篇文章所述的體系結構和超參數訓練150個曆元的生成器和鑒別器之後生成的。




示例 3:注意力的神經機器翻譯


這個例子(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb)訓練模型將西班牙語句子翻譯成英語句子。訓練模型後,您將能夠輸入西班牙語句子,例如「?todavia estan en casa?」,並返回英文翻譯:「你還在家嗎?」


您在下面看到的圖像是注意力圖。它顯示了輸入句子的哪些部分在翻譯時具有模型的注意力。例如,當模型翻譯「cold」這個詞時,它看著「mucho」,「frio」,「aqui」。我們使用tf.keras和eager function從頭開始實現Neural Machine Translation by Jointly Learning to Align and Translate這篇文章中的例子,詳細解釋在筆記中。您還可以將此實現用作完成自己的自定義模型的基礎。



示例 4:注意圖像標題


在此示例(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/image_captioning_with_attention.ipynb)中,我們訓練模型以預測圖像的注釋。 我們還生成了一個注意力圖,它顯示了模型在生成標題時所關注的圖像部分。 例如,當模型預測單詞「surfboard」時,模型會聚焦在圖像中的衝浪板附近。 使用MS-COCO數據集的子集訓練該模型,該數據集可自動下載。



下一步


要了解有關tf.keras和eager的更多信息,請密切關注tensorflow.org/tutorials(http://tensorflow.org/tutorials)以獲取更新內容,並定期查看此博客和TensorFlow的推特供稿。 謝謝閱讀!


致謝


非常感謝Josh Gordon,Mark Daoust,Alexandre Passos,Asim Shankar,Billy Lamberta,Daniel”Wolff”Dobson和Francois Chollet的貢獻和幫助!


https://medium.com/tensorflow/complete-code-examples-for-machine-translation-with-attention-image-captioning-text-generation-51663d07a63d


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:



http://www.kubonews.com/2018082829251.html

每日即時更新新聞,請上:http://www.kubonews.com

沒有留言:

張貼留言