0
本文作者: AI研習社-譯站 | 2018-08-28 09:55 |
雷鋒網按:本文為 AI 研習社編譯的技術博客,原標題 Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution,作者為 Yash Katariyae(開發(fā)者項目工程師實習生)。
翻譯 | 老趙 審核 | 凡江
我總是發(fā)現生成和序列模型令人著迷:他們提出的問題與我們剛開始學習機器學習時常遇到的問題不同。當我第一次開始學習ML時,我學了分類和回歸(和大多數人一樣)。這些幫助我們提出并回答以下問題:
這是貓還是狗的照片? (分類)
明天會下雨的幾率是多少? (回歸)
掌握分類和回歸是非常有用的技能,并且這些領域的應用對現實問題幾乎沒有限制。但是,我們可能會問其他不同類型的問題。
我們能生成一首詩嗎? (文字生成)
我們可以生成一張貓的照片嗎? (GANs)
我們可以將句子從一種語言翻譯成另一種語言嗎? (NMT)
我們可以描述圖像內容嗎? (圖像注釋)
在暑期實習期間,我使用TensorFlow的兩個最新API開發(fā)了這些示例:tf.keras,以及eager function,我在下面分享了它們。我希望你發(fā)現它們有用,有趣。
eager function是一個逐步運行的界面,其中操作在從Python調用時即刻執(zhí)行。這使得TensorFlow上手容易,并且可以是研究和開發(fā)更加直觀。
tf.keras是一個定義模型的高級API,就像積木建造的樂高一樣。我使用模型子類化實現了這些示例,它允許通過子類化tf.keras.Model并定義自己的前向傳遞來制作完全可自定義的模型。 當啟用eager function時,模型子類化特別有用,因為可以強制寫入前向傳遞。
如果你對這些APIs不了解,你可以通過探索tensorflow.org/tutorials(http://tensorflow.org/tutorials)上的序列來了解更多信息,其中包含最近更新的示例。
以下每個示例都是端到端的,并遵循類似的模式:
自動下載訓練數據集。
預處理訓練數據,并創(chuàng)建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)由生成器和鑒別器組成。生成器的工作是創(chuàng)建令人信服的圖像以欺騙鑒別器。鑒別器的工作是在真實圖像和偽圖像(由生成器創(chuàng)建)之間進行分類。下面看到的輸出是在使用 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:注意圖像標題
......
想要繼續(xù)閱讀,請移步至我們的AI研習社社區(qū):https://club.leiphone.com/page/TextTranslation/755
更多精彩內容盡在 AI 研習社。
不同領域包括計算機視覺,語音語義,區(qū)塊鏈,自動駕駛,數據挖掘,智能控制,編程語言等每日更新。
雷鋒網雷鋒網(公眾號:雷鋒網
雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。