閱讀481 返回首頁    go 阿裏雲 go 技術社區[雲棲]


六招教你用Python構建好玩的深度學習應用


0?wx_fmt=jpeg


導讀

深度學習是近來數據科學中研究和討論最多的話題。得益於深度學習的發展,數據科學在近期得到了重大突破,深度學習也因此得到了很多關注。據預測,在不久的將來,更多的深度學習應用程序會影響人們的生活。實際上,我認為這種影響已經開始了。


如果你站在圈外的角度,深度學習可能看起來讓人望而生畏。 像TensorFlow,Keras,基於GPU的計算等專業術語可能會嚇到你。 但是,悄悄告訴你 – 深度學習並不難! 緊追前沿的深度學習技術的確需要花費時間和精力,但應用它們解決日常生活中的問題還是很容易的。


有趣的是,在我應用深度學習技術的過程中,我重拾了孩童時期的樂趣和好奇心。在這篇文章裏,我將介紹6個這樣的應用。它們開始的時候看起來很難實現,但是如果利用深度學習,問題就可以在一個小時內迎刃而解。本文展示了一些具有突破性價值的成果,並向你介紹它們是如何運作的。



目錄

1.使用現有API的應用程序

  • 深度學習API的優缺點

  • 利用深度學習為照片著色(使用Algorithmia 開發的API)

  • 使用Watson API構建聊天機器人

  • 基於情感分析的新聞聚合器(使用Aylien 開發的API)

2.開源應用程序

  • 開源代碼的優缺點

  • 利用深度學習進行語句校正

  • 利用深度學習進行男女肖像轉換

  • 開發深度強化學習機器人來玩Flappy Bird這款遊戲

3.其他有價值的資源




1.使用現有API的應用程序



API不過是一種運行在遠端PC的程序。可以在本地通過互聯網遠程連接。例如,即使你的電腦裏已經內置了揚聲器,你仍可以再插入一個藍牙。這樣,利用筆記本電腦就可以遠程訪問揚聲器。


API 的概念類似於有人已經幫你實現了較難的那部分工作。你可以用它來快速解決手上的問題。


我將列出一些使用API構建應用程序的優缺點。

 

1.1.1深度學習API的優點

  • 深度學習應用程序通常對GPU計算能力和數據存儲/處理性能有較高要求。因此,你可以創建自己的工作站(或使用任意雲服務),並在本地使用任意係統來訪問工作站並運行應用程序。

  • 本地係統不受計算負擔影響。

  • 輕鬆集成新功能。

 

1.1.2深度學習API的缺點

  • 構建API的成本很大。開發和維護一個API需要投入時間和資源,這多少有點沉悶乏味。

  • 容易受到互聯網連接的限製。任何時刻的連接失敗都會導致整個係統的中斷。

  • 如果任何人可以輕鬆連接你的應用,它將暴露安全問題。你必須設置額外的安全層,例如設置用戶名和密碼,並限製在一段時間內可以訪問的次數。

 

讓我們開始吧!


1.2使用深度學習(Algorithmia API)為照片著色

自動著色一直是計算機視覺社區中的熱門話題。從一張黑白圖片獲得一張彩色照片似乎是件超現實的事。想象一個4歲的孩子拿著蠟筆全神貫注於塗鴉本的場景,我們是否能教會人工智能同樣去做這件事情呢?


這是當然一個難題。人類在觀察事物顏色的過程中得到了經年累月的訓練,我們自己可能不會注意到,但是我們的大腦在捕捉生活的每一刻,並從中提取有意義的信息,如天空是藍的、草是綠的。這很難在人工智能體中建模。


近期的一項研究表明,如果我們基於大量準備好的數據集,對神經網絡進行足夠的訓練,就能夠從灰度圖像中幻化出顏色的模型。下麵是一個圖像著色器的示例: 


0?wx_fmt=jpeg


為了實現這一點,我們使用由Algorithmia開發的API。

 

規格要求:

  • Python(2或3)

  • 網絡連接(用於調用API端點)

  • 12個積分(積分需要支付獲得,不過注冊Algorithmia可免費獲贈5000積分)


0?wx_fmt=jpeg


步驟1:在Algorithmia上注冊並獲取您自己的API密鑰。 你可以在個人資料中找到API密鑰。


pip install algorithmia


步驟2:輸入pip語句安裝Algorithmia。


0?wx_fmt=jpeg


步驟3:選擇要著色的照片,並將其上傳到algorithmia提供的Data文件夾中。

 

步驟4:在本地創建一個文件,命名為trial1.py。 打開它,並寫如下代碼。注意需要輸入你的圖像在data文件夾中的路徑,還有你的API密鑰.


import Algorithmia

 input = {

"image": "data:// … " # Set location of your own image

}

 client = Algorithmia.client(‘…’) #insert your own API key

 algo = client.algo('deeplearning/ColorfulImageColorization/1.1.5')

 print algo.pipe(input)


步驟5:打開命令提示符並輸入“python trial1.py”運行剛才的代碼。 輸出的結果將自動保存在數據文件夾中。這是我得到的:


0?wx_fmt=jpeg

0?wx_fmt=jpeg


就是這樣 - 你剛剛創建了一個簡單的應用程序,它就像個孩子,可以填充圖像中的顏色!容我自high一下:一顆賽艇!

 

1.3構建聊天機器人(Watson API)

Watson是一個展現人工智能的傑出例子。你可能聽說過Watson在一個問答遊戲中戰勝人類的故事。 Watson集合了許多技術,深度學習是其學習過程的核心部分,特別是在自然語言處理方麵。在此,我們將使用Wastson眾多應用中的一個來構建對話服務。也就是聊天機器人。聊天機器人是一個能像人一樣回答常見問題的智能體。它可以很好地與客戶交流並作出及時回複。

 

這裏有一個演示平台:


0?wx_fmt=jpeg


要求和規格:

  • Python(2或3)

  • 網絡連接(用於調用API端點)

  • 激活的Bluemix帳戶(試用期為30天)

 

讓我們來看看如何用Watson一步步構建簡單的聊天機器人。

 

步驟1:在Bluemix上注冊並激活保護服務以獲取憑據


0?wx_fmt=jpeg


步驟2:打開terminal界麵,運行命令如下:

 

pip install requests responses

pip install --upgrade watson-developer-cloud


步驟3:創建一個文件trial.py並複製以下代碼。記住加入個人憑據。

 

import json

from watson_developer_cloud import ConversationV1

 

conversation = ConversationV1(

username='YOUR SERVICE USERNAME',

password='YOUR SERVICE PASSWORD',

version='2016-09-20')

 

# replace with your own workspace_id

workspace_id = 'YOUR WORKSPACE ID'

 

response = conversation.message(workspace_id=workspace_id, message_input={

'text': 'What\'s the weather like?'})

print(json.dumps(response, indent=2))


步驟4:保存文件並在控製台中輸入“python trial.py”運行程序。你可以在控製台中得到Watson對輸入信息的輸出響應。


輸入:顯示附近的內容。


輸出:我明白你想要我找到一個便利設施。我可以在附近找到餐廳,加油站和洗手間。


如果你想構建一個包含動態汽車儀表盤(如上麵gif所示)的完整對話服務項目。查看這個github存儲庫。


幾分鍾就能實現聊天機器人和著色應用,不錯~

 

1.4基於情緒分析的新聞聚合器(Aylien API)

有時我們隻想看到世界上的美好事物。如果讀報紙的時候,隻看到“好”消息,過濾掉所有壞消息,這將是多麼酷的一件事。


使用先進的自然語言處理技術(其中之一是深度學習)使得一切成為可能。你現在可以根據情緒分析文本對新聞進行過濾,並將其呈現給讀者。


采用Aylien的新聞API可以實現這一功能。下麵是演示的截圖。你可以構建自定義查詢,並檢查結果。


0?wx_fmt=jpeg0?wx_fmt=jpeg0?wx_fmt=jpeg


讓我們看看在python中的實現。


要求和規格:

  • Python(2或3)

  • 網絡連接(用於訪問API端點)

 

步驟1:在Aylien網站上注冊一個帳戶。


0?wx_fmt=jpeg


步驟2:登錄時從個人資料中獲取API_key和App_ID。


0?wx_fmt=jpeg

步驟3:進入terminal界麵輸入下麵的語句,安裝Aylien新聞API。


pip install aylien_news_api

 

步驟4:創建一個文件“trial.py”並複製以下代碼。


import aylien_news_api

from aylien_news_api.rest import ApiException

 

# Configure API key authorization: app_id

aylien_news_api.configuration.api_key['X-AYLIEN-NewsAPI-Application-ID'] = ' 3f3660e6'

# Configure API key authorization: app_key

aylien_news_api.configuration.api_key['X-AYLIEN-NewsAPI-Application-Key'] = ' ecd21528850dc3e75a47f53960c839b0'

 

# create an instance of the API class

api_instance = aylien_news_api.DefaultApi()

 

opts = {

  'title': 'trump',

  'sort_by': 'social_shares_count.facebook',

  'language': ['en'],

  'published_at_start': 'NOW-7DAYS',

  'published_at_end': 'NOW',

  'entities_body_links_dbpedia': [

    'http://dbpedia.org/resource/Donald_Trump',

    'http://dbpedia.org/resource/Hillary_Rodham_Clinton'

  ]

}

 

try:

    # List stories

    api_response = api_instance.list_stories(**opts)

    print(api_response)

except ApiException as e:

    print("Exception when calling DefaultApi->list_stories: %s\n" % e)

 

步驟5:保存文件並通過鍵入“python trial.py”開啟運行。輸出將是如下所示的jason dump:


{'clusters': [],

'next_page_cursor': 'AoJbuB0uU3RvcnkgMzQwNzE5NTc=',

'stories': [{'author': {'avatar_url': None, 'id': 56374, 'name': ''},

'body': 'President Donald Trump agreed to meet alliance leaders in Europe in May in a phone call on Sunday with NATO Secretary General Jens Stoltenberg that also touched on the separatist conflict in eastern Ukraine, the White House said.',

'categories': [{'confident': True,

'id': 'IAB20-13',

'level': 2,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB20-13',

'parent': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB20'},

'score': 0.3734071532595844,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB11-3',

'level': 2,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB11-3',

'parent': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB11'},

'score': 0.2898707860282879,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB10-5',

'level': 2,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB10-5',

'parent': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB10'},

'score': 0.24747867463774773,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB25-5',

'level': 2,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB25-5',

'parent': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB25'},

'score': 0.22760056625597547,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB20',

'level': 1,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB20',

'parent': None},

'score': 0.07238470020202414,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB10',

'level': 1,

'links': {'_self': 'https://api.aylien.com/api/v1/classify/taxonomy/iab-qag/IAB10',

'parent': None},

'score': 0.06574918306158796,

'taxonomy': 'iab-qag'},

{'confident': False,

'id': 'IAB25',

...

 

哇!我可以做一個根據興趣篩選新聞的對話應用程序了!我相信,現在你對深度學習感到很興奮!



2.開源應用程序




現階段,對研究社區起最大幫助的是開源思維。研究人員分享他們取得的成果,深度學習也因此得到了跨越式發展。這裏我涉及了一些開源成果,它們都是從從研究論文中轉變過來的。

 

2.1.1開源應用的優點

  • 由於應用程序是開源的,你可以查看應用程序的任何細節,並且如果需要,還可以輕鬆自定義。


 

  • 來自不同組織、擁有不同經驗的開發人員會在應用程序中協作。這使得應用程序比原始版本更好。此外,因為很多人都可以使用,所以這個應用程序可以不斷地進行測試,更方便地被使用。

 

2.1.2開源應用程序的缺點

  • 因為沒有組織從背後支持,開源項目中往往缺少“責任意識”,如果發生問題也不知道該責問誰。

 

  • 還有明顯的許可問題,許多公司都不願將他們的項目“公開”。


注意:對於開源應用程序,我建議你瀏覽一遍官方的存儲庫。因為很多項目仍處於初級階段,可能會因為未知的原因而中斷。


讓我們來看一些開源應用程序!

 

2.2利用深度學習進行語句校正

現在的係統可以輕鬆檢測和糾正拚寫錯誤,但糾正語法錯誤有點困難。為了提升這一能力,我們可以使用深度學習。這個存儲庫是特意為此設置的。


我整理一下……


這裏我們使用一個語料庫來訓練序列預測神經網絡,該語料庫包含一係列語法錯誤的句子以及它的更正結果。


訓練模型為語句的矯正提供了正確答案。下麵是一個例子:

 

輸入:‘Kvothe went to market’

輸出:‘Kvothe went to the market’

你可以在網站上查看演示:http://atpaino.com/dtc.html

 

該模型仍然無法校正所有的句子,但隨著更多的訓練數據和高效的深度學習算法,結果會越來越好。

 

要求:

  • Python(2或3)

  • GPU(可選用於更快的訓練)

 

步驟1:從官網上安裝tensorflow。另外,從GitHub下載存儲庫,並從https://github.com/atpaino/deep-text-corrector保存到本地。

 

步驟2:下載數據集(Cornell Movie-Dialogs Corpus),並將其解壓到工作目錄中

 

 

步驟3:通過運行命令創建訓練數據

 

python preprocessors/preprocess_movie_dialogs.py --raw_data movie_lines.txt \

               --out_file preprocessed_movie_lines.txt


並創建訓練,驗證和測試文件,並將其保存在當前工作目錄中

 

步驟4:現在訓練深度學習模型:

 

python correct_text.py --train_path /movie_dialog_train.txt \

               --val_path /movie_dialog_val.txt \

               --config DefaultMovieDialogConfig \

               --data_reader_type MovieDialogReader \

               --model_path /movie_dialog_model

 

步驟5:該模型需要一些時間來訓練。訓練完成後,可以通過以下方式進行測試:

 

python correct_text.py --test_path /movie_dialog_test.txt \

               --config DefaultMovieDialogConfig \

               --data_reader_type MovieDialogReader \

               --model_path /movie_dialog_model \

               --decode

 

2.3利用深度學習進行男女肖像轉換

在談到該應用程序之前,請觀察以下結果:


0?wx_fmt=png


這裏第二張圖片是第一張圖片通過深度學習得到的!這個有趣的應用程序表明深度學習無所不能!該應用程序的核心在於GAN(生成對抗網絡),這種類型的深度學習能夠本中生成新樣本。

 

要求:

  • Python(3.5+)

  • Tensorflow(r0.12 +)

  • GPU(可選用於更快捷的訓練)


操作之前給你提個醒,如果不使用GPU,模型訓練需要花很長的時間。即使使用高端GPU(Nvidia GeForce GTX 1080),一個圖像的訓練也需2小時。

 

步驟1:下載存儲庫並在本地解壓縮https://github.com/david-gpu/deep-makeover

 

步驟2:從CelebA數據集下載“Align&Cropped; Images”。創建數據集文件夾,並命名為“dataset”,並把所有圖片解壓到其中。

 

步驟3:通過以下方式訓練模型:

 

python3 dm_main.py --run train


然後通過傳遞想要轉換的圖像進行測試

 

python3 dm_main.py --run inference image.jpg

 

2.4搭建深度強化學習機器人來玩Flappy Bird這款遊戲

你可能玩過Flappy Bird這款遊戲。對於不知道這個遊戲的人來說,這款Android遊戲很讓人上癮。在遊戲裏,玩家需要避開障礙,讓小鳥一直在空中飛翔。


在這個應用中,這個飛鳥機器人就是利用強化學習技術創造的。這下麵是一個訓練好的機器人演示。


0?wx_fmt=jpeg


要求:

  • Python(2或3)

  • Tensorflow(0.7+)

  • Pygame

  • Opencv-python


實現這個應用很容易,因為多數的基本要素都已經包含其中 

 

步驟1:下載官方存儲庫。

 

步驟2:確保已安裝所有依賴項。一旦準備完成,運行如下命令。

 

python deep_q_network.py

 


3.其他值得一提的資源



本文隻是涉及了深度學習模型強大能力的皮毛。每天都有大量論文發表,帶來大批像這樣的應用。關鍵是誰能最先提出想法

 

我還列了一些其他值得一看的資源。


  • A compilation of deep learning applications by Károly Zsolnai-Fehér

  • Neural Artistic Style

  • Building a toy self-driving car bot on Mario Kart.

  • 9 Cool Deep Learning Applications | Two Minute Papers

  • 10 More Cool Deep Learning Applications | Two Minute Papers

  • 10 Even Cooler Deep Learning Applications | Two Minute Papers

  • List of Deep Learning Startups

  • List of awesome Deep Learning Projects

 原文發布時間為:2017-02-28

本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-05-23 17:03:20

  上一篇:go  Harris’s Linked List
  下一篇:go  Tomcat-connector的微調(2): maxConnections, maxThreads