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