0
本文作者: AI研習(xí)社-譯站 | 2018-08-28 09:55 |
雷鋒網(wǎng)按:本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution,作者為 Yash Katariyae(開發(fā)者項目工程師實習(xí)生)。
翻譯 | 老趙 審核 | 凡江
我總是發(fā)現(xiàn)生成和序列模型令人著迷:他們提出的問題與我們剛開始學(xué)習(xí)機(jī)器學(xué)習(xí)時常遇到的問題不同。當(dāng)我第一次開始學(xué)習(xí)ML時,我學(xué)了分類和回歸(和大多數(shù)人一樣)。這些幫助我們提出并回答以下問題:
這是貓還是狗的照片? (分類)
明天會下雨的幾率是多少? (回歸)
掌握分類和回歸是非常有用的技能,并且這些領(lǐng)域的應(yīng)用對現(xiàn)實問題幾乎沒有限制。但是,我們可能會問其他不同類型的問題。
我們能生成一首詩嗎? (文字生成)
我們可以生成一張貓的照片嗎? (GANs)
我們可以將句子從一種語言翻譯成另一種語言嗎? (NMT)
我們可以描述圖像內(nèi)容嗎? (圖像注釋)
在暑期實習(xí)期間,我使用TensorFlow的兩個最新API開發(fā)了這些示例:tf.keras,以及eager function,我在下面分享了它們。我希望你發(fā)現(xiàn)它們有用,有趣。
eager function是一個逐步運(yùn)行的界面,其中操作在從Python調(diào)用時即刻執(zhí)行。這使得TensorFlow上手容易,并且可以是研究和開發(fā)更加直觀。
tf.keras是一個定義模型的高級API,就像積木建造的樂高一樣。我使用模型子類化實現(xiàn)了這些示例,它允許通過子類化tf.keras.Model并定義自己的前向傳遞來制作完全可自定義的模型。 當(dāng)啟用eager function時,模型子類化特別有用,因為可以強(qiáng)制寫入前向傳遞。
如果你對這些APIs不了解,你可以通過探索tensorflow.org/tutorials(http://tensorflow.org/tutorials)上的序列來了解更多信息,其中包含最近更新的示例。
以下每個示例都是端到端的,并遵循類似的模式:
自動下載訓(xùn)練數(shù)據(jù)集。
預(yù)處理訓(xùn)練數(shù)據(jù),并創(chuàng)建tf.data數(shù)據(jù)集以在輸入管道中使用。
使用tf.keras模型子類API定義模型。
使用eager function訓(xùn)練模型。
演示如何使用訓(xùn)練模型。
示例 1:文本生成
我們的第一個例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/text_generation.ipynb)是文本生成,我們使用RNN生成與莎士比亞類似的文本。您可以使用上面的鏈接在Colaboratory上運(yùn)行它(或者您也可以從GitHub下載它作為Jupyter筆記本)。代碼在筆記本中詳細(xì)解釋。
基于莎士比亞的大量作品,這個例子學(xué)會了生成聽起來和風(fēng)格相似的文字:
在訓(xùn)練莎士比亞寫作集合的30個時期的后,筆記本生成了示例文本。
雖然大多數(shù)句子沒有意義(當(dāng)然,這個簡單的模型還沒有學(xué)會語言的意義),令人印象深刻的是大多數(shù)單詞是有效的,并且它生成出的戲劇的結(jié)構(gòu)看起來類似于來自原文的那些。 (這是一個基于角色的模型,在訓(xùn)練的短時間內(nèi) - 它已經(jīng)成功地從頭開始學(xué)習(xí)這兩件事)。如果您愿意,可以通過更改單行代碼來更改數(shù)據(jù)集。
了解更多關(guān)于RNN的最好方法是Andrej Karpathy的文章,即The Unreasonable Effectiveness of Recurrent Neural Networks。如果您想了解更多關(guān)于使用Keras或tf.keras實現(xiàn)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生成手寫數(shù)字。生成式對抗網(wǎng)絡(luò)(GAN)由生成器和鑒別器組成。生成器的工作是創(chuàng)建令人信服的圖像以欺騙鑒別器。鑒別器的工作是在真實圖像和偽圖像(由生成器創(chuàng)建)之間進(jìn)行分類。下面看到的輸出是在使用 Unsupervised Representing Learning with Deep Convolutional Generative Adversarial Networks。
這篇文章所述的體系結(jié)構(gòu)和超參數(shù)訓(xùn)練150個歷元的生成器和鑒別器之后生成的。
示例 3:注意力的神經(jīng)機(jī)器翻譯
這個例子(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb)訓(xùn)練模型將西班牙語句子翻譯成英語句子。訓(xùn)練模型后,您將能夠輸入西班牙語句子,例如“?todavia estan en casa?”,并返回英文翻譯:“你還在家嗎?”
您在下面看到的圖像是注意力圖。它顯示了輸入句子的哪些部分在翻譯時具有模型的注意力。例如,當(dāng)模型翻譯“cold”這個詞時,它看著“mucho”,“frio”,“aqui”。我們使用tf.keras和eager function從頭開始實現(xiàn)Neural Machine Translation by Jointly Learning to Align and Translate這篇文章中的例子,詳細(xì)解釋在筆記中。您還可以將此實現(xiàn)用作完成自己的自定義模型的基礎(chǔ)。
示例 4:注意圖像標(biāo)題
......
想要繼續(xù)閱讀,請移步至我們的AI研習(xí)社社區(qū):https://club.leiphone.com/page/TextTranslation/755
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計算機(jī)視覺,語音語義,區(qū)塊鏈,自動駕駛,數(shù)據(jù)挖掘,智能控制,編程語言等每日更新。
雷鋒網(wǎng)雷鋒網(wǎng)(公眾號:雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。