陳擎文教學網:人工智慧入門

資源(Resource)

chp0. 人工智慧在遊戲領域的各種應用

chp1. 人工智慧的四種分級

chp2. 人工智慧的現況與局限(3大浪潮+3大技術+3大應用)

chp3. 人工智慧的發展歷史

chp4. 機器學習,深度學習簡介

chp5. 深度學習(神經網絡)的視覺化理解

chp6. 執行python的四種方法

chp7. 深度學習的常用框架

chp8. keras簡介

chp9. 由keras的4個範例(簡易版)來認識人工智慧

chp10. keras多層感知器(MLP)

chp11. keras多層感知器(MLP)的各種範例

chp12. keras卷積神經網絡(CNN)

chp13. keras卷積神經網絡(CNN)的各種範例

chp14. keras循環神經網絡(RNN),長短期記憶神經網絡(LSTM)

chp15. keras循環神經網絡(RNN),長短期記憶神經網絡(LSTM)的各種範例

chp16. 使用Vislab做AI影像辨識(不用寫程式)

資源
  線上雲端AI 線上雲端AI神經網絡 期中考題庫excel 期末考題庫excel 期末考題庫excel
  上課黑板 線上黑板 上課即時貼
  考試 考試題目
  Goole 輸入法(Input software) Goole輸入法(Input:exe) Goole 輸入法(Input:zip) online goole input(中文) online goole input(英文)
  tensorflow教學資源 TensorFlow 教學課程(官網) 新手快速入門導覽課程(官網) Keras 基本概念教學課程(官網) 使用 tf.data 來載入各種資料格式(官網))
  線上python

方法1:到google雲端硬碟→新增→連結更多應用程式→colaboratory

方法2:https://repl.it/languages/python3

方法3:https://www.python.org/shell/

  pytorch教學資源 PyTorch官網get started PYTORCH TUTORIALS官方教程(英文版) PyTorch官方教程(中文版) PyTorch community(社群)
  mindspore教學資源 Mindspore官網 Mindspore開發者論壇
  三種讀取csv的方法 程式碼(使用anaconda讀入資料集) 程式碼(在colaboratory的python讀入google drive裡的資料集) 程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)
  如何在vs code裡執行sympy

在vs code下方指令列輸入: pip install sympy

 

 
chp0. 人工智慧在遊戲領域的各種應用
目錄 1.分類 2.使用AI來讓環境(道路,物件)看起來更真實 3.使用AI來讓NPC(Non-Player Character)看起來更像真人 4.大型多人線上角色扮演遊戲MMORPG裡的怪物(NPC), 其對戰的戰鬥反應也是AI設定的 5.最強大的NPC之人工智慧設定
目錄 6.使用AI在玩家主角上(非NPC):捉迷藏,貪食蛇 7.使用AI在玩家主角上(非NPC):小朋友下樓梯 8.使用AI在玩家主角上(非NPC):格鬥遊戲,超級馬力歐 9.使用AI在玩家主角上(非NPC):alpha go打敗世界圍棋棋王 10.用Bot AI自動生成遊戲內容

人工智慧在遊戲領域的各種應用:分類
有以下幾種:
(1)第一種:AI應用在unity角色的自動導航(導航網格navMesh):讓角色能夠自動找到最短路徑行走
方法:『在unity角色的自動導航(導航網格navMesh)』
範例:影片:主角膠囊在導航網格內,自由觸控移動
範例:影片:主角unityChan在導航網格內,自由觸控移動+動作(idle,walk,jump)
程式碼:unity.AI程式碼

(2)第二種:AI應用在NPC(Non-Player Character):更像真人,更像真實場景
方法:『行為樹(Behavior Tree)』,『AI的混沌球演算法』

(3)第三種:AI應用在玩家主角:alphaGO圍棋,格鬥遊戲,捉迷藏,貪吃蛇
方法:『類神經網絡』,『遺傳演算法』,『NEAT alogrithm(增強拓補神經網路)』,『Q-learning alogrithm(Q演算法)』

(4)第四種:自動生成遊戲內容
方法:『Bot AI 』




2.使用AI來讓環境(道路,物件)看起來更真實:
(1)用AI人工智慧,創造出最真實的遊戲畫面:

影片:用AI人工智慧,創造出最真實的遊戲畫面
遊戲:GTA5
方法:使用卷積神經網路(Deep Learning)
效果:AI人工智能研究發現,用深度學習提升遊戲畫面效果非常好,這個用了卷積神經網路的Deep Learning技術,將GTA5遊戲轉換成顯示的畫面!

3.使用AI來讓NPC(Non-Player Character)看起來更像真人:
(1)今天的遊戲一般都已經配備了人工智能(Artificial Intelligence)應用程序了。
(2)為了讓玩家在遊戲世界中體驗到更真實的交互和沈浸感,就會把遊戲裡面的NPC非玩家角色使用AI效果,讓它看起來像真人一樣可以自主移動,並有自己的行動脈絡.
例如:
☎《上古卷軸》中各個地域環境的角色或生物、
☎《刺客教條》中不同國度城鎮街道上的市民,
☎《NBA 2K》籃球場上共同合作取勝的隊友們,
這些都是AI架構的互動行為模式,
效果:會有如臨現場真人般的角色,可以更激發出玩家投入遊戲架構的故事環境。
《NBA 2K》:

《刺客教條》:



4.大型多人線上角色扮演遊戲MMORPG裡的怪物(NPC), 其對戰的戰鬥反應也是AI設定的:
(1)大型多人線上角色扮演遊戲(MMORPG,massively multiplayer online role-playing game)
例如:《魔獸世界》、《英雄聯盟》…等等,
特色:線上玩家打怪,這些怪物對戰時的戰鬥反應,也是由AI架構。
有的AI的行為反應單純,有的複雜,
想要角色擁有鮮活、合理性的情境反應,給予AI的指令和結構方式就會是主要的影響因素。

(2)方法:現有遊戲的AI基本上由 2 個建構模式實現:
行為樹(Behavior Tree):較符合人類的一般的思考模式
有限狀態機(Finite State Machines)
《英雄聯盟》玩家打怪, 示意圖
用行為樹(AI)製作怪物樹, 示意圖:


5.最強大的NPC之人工智慧設定:
(1)大多數遊戲的NPC(到處走....),到底是如何設定的?
☎方法:大多數遊戲的NPC都是根據『行為樹』的腳本來設定,設定各種狀況下NPC該如何反應。
反應越豐富的NPC,就會設定很多行為樹腳本

☎大多數的遊戲的NPC的腳本,其實都是行為樹腳本,不是真的AI
(2)最厲害的NPC團隊:不用行為樹腳本,用『AI』
國外:最強大的遊戲AI團隊:OpenAI(曾經用AI打敗Dota 2世界冠軍)
華人:大陸的遊戲人工智慧團隊:rct.AI團隊(幫失控玩家做AI的團隊)

(3)範例:銀行搶劫遊戲(2019年)
☎製作團隊:大陸的遊戲人工智慧團隊:rct.AI團隊(幫失控玩家做AI的團隊)
☎搶匪:2個人(主角+一個NPC),
其它人:但是NPC
☎結果:當作主角做出不同動作,這個遊戲的劇情發展會完全不同,NPC就會做出各種不同的反應動作


☎特色1:裡面全部角色與NPC的反應與台詞,都是有AI所控制的(目前少數遊戲能夠做到的高水準程度)
☎特色2:裡面對話沒有固定對話,但是即時用AI自動生成的。
關鍵技術:使用AI的混沌球演算法

設定目標函數:

受到環境參數,空間參數的影響:



結果:這樣的AI遊戲,故事的發展有無限可能。不會再是傳統固定線性,單調枯燥的故事腳本了。
結果:這樣的AI遊戲,玩家可以主宰整個遊戲的未來故事發展,而不是在重複遊戲公司的固定套路。

5.使用AI在玩家主角上(非NPC):捉迷藏,貪食蛇
(1)目前遊戲的AI應用, 大多數都是應用在NPC上
下面介紹AI輔助在主角本身

(2)OpenAI聯盟對主角的AI測試
遊戲:《捉迷藏》
目的:莊家抓人(紅色),守方阻擋(藍色)
方法:使用AI設定後,讓它們自動學習,自動修正
結果:莊家,守方,都出乎意料之外的聰明


(3)貪食蛇遊戲的自動AI學習:
方法:使用AI的類神經網絡與遺傳演算法
限制:頭部不可以穿過自己的身體
第二個貪食蛇: 影片:用AI人工智慧,第二個貪食蛇

6.使用AI在玩家主角上(非NPC):小朋友下樓梯
(1)用AI訓練古董遊戲:小朋友下樓梯(1996)
☎玩小朋友下樓梯:遊戲網址
☎遊戲的原始javascript程式碼:遊戲程式碼(javascript)
☎遊戲的原始j程式碼(github):遊戲程式碼(github)
☎注意:下載程式碼後,要使用架站軟體,才能夠執行
(架站軟體:下載xamp)
遊戲規則:主角有12點生命值,碰到刀板,減少血量,若是墜樓直接KO
人工智慧方法:NEAT alogrithm(增強拓補神經網路),又名Nero Evolution Augmenting Topologies(神經進化擴充拓補)
特色:是遺傳演算法的一種
☎下載Neat alogrithm的原始程式碼(javascript):NEAT程式碼(github)
☎了解遺傳演算法程式碼的內容:教學影片
☎原理:利用遺傳學的原理,一開始放入很多第一代主角,根據主角的結果給予評分,然後產生下一代的主角(適者生存的演化原理)
☎方法:一開始建立100位不同姓名主角,每位主角的三個選擇:向左,向右,原地不動,結果再給定一個評分score,然後產生下一代。
產生下一代時,會加入某些突變種。
☎結果:到了第48代子孫,能夠下到第249階。

測試影片:



8.使用AI在玩家主角上(非NPC):格鬥遊戲,超級馬力歐:
(1)用AI訓練古董遊戲:格鬥遊戲(美國隊長,鋼鐵俠)
☎格鬥遊戲(美國隊長,鋼鐵俠)線上版:遊戲網址
☎遊戲的原始j程式碼(github):遊戲程式碼(github)
☎注意:下載程式碼後,可以直接執行,角色是右邊打者(p,[,],\,arror key,space to restart)
人工智慧方法:Q-learning alogrithm(Q演算法)
☎特色:是一種『行為--獎勵』法
☎下載Neat alogrithm的原始程式碼(javascript):NEAT程式碼(github)
☎了解遺傳演算法程式碼的內容:教學影片
☎發現:一直出拳,不會獲勝(要有時間做出反應)

測試影片:


(2)用AI訓練古董遊戲:超級馬力歐
特色:這個影片,詳細描述用AI是如何來計算與設定的
測試影片:

(3)用AI訓練格鬥遊戲,經驗談:
特色:這個影片,詳細描述用AI是如何來計算與設定的
測試影片:

9.使用AI在玩家主角上(非NPC):alpha go打敗世界圍棋棋王:


(1)AlphaGo圍棋程式:
方法:半監督式學習法,包括兩種主要演算法:『蒙地卡羅樹狀搜尋』演算法,『兩個深度神經網絡(策略網路,價值網路)』演算法
其中的神經網絡:使用13層的CNN卷積神經網絡。
學習過程:要學習數萬種高手的棋譜。
硬體:配合176個GPU,平行運算。
時間:2016年
公司:Google DeepMind
影片:AlphaGo 三戰完勝大陸棋王柯潔


(2)AlphaGo Zero圍棋程式:
特色:是AlphaGo的下一代產品。進化版,更厲害。
時間:2017年
公司:Google DeepMind
方法:融合兩個,成為一個神經網絡系統,
學習:完全不需要學習人類的棋譜,就是基於圍棋規則去生成各種樣例,然後大量與人對戰,自我增強學習,產生大量經驗樣本,只要40小時就打敗棋王。屬於無師自通型。
硬體:使用4個TPU計算。
成果:打敗所有人類圍棋手,打敗AlphaGo的歷代版本(AlphaGo,AlphaGo Lee,AlphaGo Master)
影片:Alphago Zero 2天就超越人類,40天讓5子
影片:人工智慧時代正式來臨


10.用Bot AI自動生成遊戲內容:
(1)AI也可以應用在:自動產生遊戲內容,產生各種關卡C上

(2)遊戲中 Bot AI,不僅可以用來與玩家對完,更可以提供更多元的遊戲模式、關卡的難易度,以增加遊戲的耐完度、社群的豐富度。
介紹應用於電腦遊戲 Bot AI 之設計方法、優化方式與潛在的其他應用
關卡難易度評鑑模式
測試實際上架遊戲,以驗證實用性



 

 
chp1.人工智慧的四種分級
目錄 1.人工智慧分級

1.人工智慧分級

1.人工智慧(artificial intelligence,縮寫為AI)
亦稱智械、機器智慧


2.人工智慧的四種分級影片:
人工智慧的分級
影片:人工智慧的分級


3.結論:人工智慧的四種分級:
(1)第一級AI:有自動感測與自動控制的機器:
例如:家電產品(有感測器,控制器)
內容:有感測器可以偵測訊號,有控制器可以做出反應
範例:洗衣機,掃地機器人,自動控溫,定時的冷氣機

(2)第二級AI:可以找出輸入,與輸出之間的關係式的程式:
內容:用演算法技術,把輸入資料與輸出結果,找出各種可能的組合,形成各種關聯組合
範例:電腦下棋程式,電腦五子棋程式,自動判斷身體可能疾病的軟體

(3)第三級AI:可以『機器學習』的程式:
機器學習:machine learning
內容:用機率,統計,演算法等技術,把輸入資料,進行學習,並得到規則,進行『迴歸,或分類』
範例:網路會員喜好的大數據分析,搜尋引擎

(4)第四級AI:可以『深度學習』的程式:
深度學習:deep learning
現在流行的AI人工智慧,就是指『深度學習』
內容:沒有告知程式該物體的特徵值,但是『深度學習』程式可以自行學習,然後找出該物體的特徵點
範例:人臉辨識,數字辨識,貓的辨識(先學習1萬張照片,自己學出貓的特徵點,然後就可以預測任何照片,找出哪張是貓。
比較1:『機器學習』程式,必須先告知它,該物體的特徵點是什麼
比較1:『深度學習』程式,不須先告知它特徵點,它會自己學習到該物體的特徵點




 

 
chp2. 人工智慧的現況與局限(3大浪潮+3大技術+3大應用)
目錄 1.人工智慧的現況與局限 2.人工智慧的3大浪潮+3大技術+3大應用 3.語音辨識(speech recognition) 4.影像辨識(Image recognition) 5.自然語言處理(NLP)Natural Language Processing
6.邏輯推理類 7.網站的自動推薦系統 8.疾病預測與醫療建議系統

1.

人工智慧的現況與局限:
影片:1.簡介人工智慧發展的三階段
(1)第一次:演算法式程式
(2)第二次:專家系統
(3)第三次:機器學習,速度學習



影片:2.第三階段的人工智慧大發展與硬體有關嗎?
(1)第三階段的人工智慧大發展與硬體(IC,CPU,GPU,FPGA)的成熟有關,處理速度夠快才能執行複雜的人工智慧程式。


影片:3.人工智慧的新創公司的工作內容?
(1)人工智慧的新創公司的工作內容,主要是在做資料的預先處理,再讓程式讀入資料。


影片:4.人工智慧會取代人類嗎?
(1)那些都是謠言
(2)目前的人工智慧,只是『弱人工智慧』,只是一種『非線性數學模型的數值計算方法』,只能做到大量數據的『辨識,分類』,還無法做到像人一樣的思考


影片:5.人工智慧時代,任何科系的學生都要接觸程式,認識AI嗎?
(1)學生要學程式
(2)中年人要學AI的概念







1.

2.人工智慧的3大浪潮+3大技術+3大應用:
(1)所謂人工智慧(Artificial Intelligence;縮寫:AI):
是指以人工方式來實現人類所具有之智慧的技術。只不過,目前能實現與人類智能同等的技術還不存在,世界上絕大多數的人工智慧還是只能解決某個特定問題。

(2)AI的三次浪潮:

☎第一次AI浪潮:
第一次AI浪潮起於1950~1960年,止於1980年代。由於出現在網路之前,因此又被稱為「古典人工智慧」。這時期出現的「符號主義」與「聯結主義」,分別是日後「專家系統」與「深度學習」的雛形。只不過,雖然當時的成果已能解開拼圖或簡單的遊戲,卻幾乎無法解決實用的問題。

☎第二次AI浪潮:
第二次AI熱潮伴隨著電腦的普及,出現在1980年代。這時期所進行的研究,是以灌輸「專家知識」作為規則,來協助解決特定問題的「專家系統」(Expert system)為主。然而,縱使當時有商業應用的實例,應用範疇卻很有限,熱潮也因此逐漸消退。

☎第三次AI浪潮:
第三次AI浪潮則出現於2010年代,伴隨著高性能電腦、網際網路、大數據、感測器的普及,以及計算成本的下降,「機器學習」隨之興起。所謂機器學習(Machine leaning),是指讓電腦大量學習資料,使它可以像人類一樣辨識聲音及影像,或是針對問題做出合適的判斷。

(3)AI的三大技術:
人工智慧的三大代表性模型:遺傳演算法、專家系統、類神經網路。

☎遺傳演算法
遺傳演算法(Genetic algorithm;GA),又稱為演化式演算法(Evolutionary algorithm),是受達爾文演化論所啟發的人工智慧。它透過「適者生存」的規則,將「優秀的個體」想像成「好的答案」,透過演化的方式來找出最佳解。

☎專家系統
專家系統(Expert system),則是針對預設的問題,事先準備好大量的對應方式。它應用在很多地方,尤其是疾病診斷。只不過,專家系統只能針對專家預先考慮過的狀況來準備對策,它並沒有自行學習的能力,因此還是有其侷限性。

☎類神經網路
從第三次AI浪潮所興起的機器學習(Machine learning)有許多種手法,其中最受矚目的,莫過於「深度學習」(Deep learning)了。所謂深度學習,是透過模仿人腦的「類神經網路」(Neural network)來學習大量資料的手法。

若你去觀察腦的內部,會發現有大量稱為「神經元」的神經細胞彼此相連。一個神經元從其他神經元那裡接收的電氣信號量達某一定值以上,就會興奮(神經衝動);在某一定值以下,就不會興奮。

興奮起來的神經元,會將電器信號傳送給下一個相連的神經元。下一個神經元同樣會因此興奮或不興奮。簡單來說,彼此相連的神經元,會形成聯合傳遞行為。我們透過將這種相連的結構來數學模型化,便形成了類神經網路。


https://www.youtube.com/watch?v=3JQ3hYko51Y
可以發現,經模型化的的類神經網路,是由「輸入層」(Input layer)、「隱藏層」(Hidden layer)及「輸出層」(Output layer)等三層所構成。另外,學習資料則是由輸入資料以及相對應的正確解答來組成。

以影像辨識為例,為了讓AI學習類神經網路的模型,首先必須先將影像學習資料分割成像素資料,然後將各像素值輸進輸入層。

接受了資料的輸入層,將像素值乘上「權重」後,便傳送給後方隱藏層的神經元。隱藏層的各個神經元會累加前一層所接收到的值,並將其結果再乘上「權重」後,傳送給後方的神經元。最後,經由輸出層的神經元的輸出,便可得到影像辨識的預測結果。

為了讓輸出層的值跟各個輸入資料所對應的正解資料相等,會對各個神經元的輸入計算出適當的「權重」值。

這個權重的計算,一般是使用「誤差倒傳遞演算法」(Error Back Propagation),使用與正解資料之間的誤差,從輸出層逆推回去。透過各「權重」的調整,來縮小輸出層的值與正解資料的值之間的誤差,以建立出完成學習的模型。

由於過去類神經網路之間進行傳遞的權重值難以最佳化,因此曾有多數研究者對類神經網路的研究持否定態度。直到2006年,辛頓(Geoffrey Hinton)開發出自動編碼器(Autoencoder)的手法,才突破了這項瓶頸。

自動編碼器是指,在類神經網路的輸入層和輸出層使用相同資料,並將隱藏層設置於二者之間,藉此用來調整類神經網路之間的權重參數的一種手法。利用以自動編碼器所獲得的類神經網路權重參數值進行初始化後,便能應用「誤差倒傳遞演算法」,提高多層類神經網路的學習準確度。

透過類神經網路,深度學習便成為了「只要將資料輸入類神經網路,它就能自行抽出特徵」的人工智慧,而這又稱為「特徵學習」(feature learning)。

深度學習最擅長的,是它能辨識圖像資料或波形資料這類無法符號化的資料。自2010年代以來,如Google、Microsoft及Facebook等美國知名IT企業,都開始著手深度學習的研究。
例如,蘋果「Siri」的語音辨識,Microsoft搜尋引擎「Bing」所具備的影像搜尋等等,而Google的深度學習專案也已超過1,500項。

至於深度學習如此飛躍的成長,要歸功於硬體設備的提升。圖形處理器(GPU)大廠輝達(NVIDIA)利用該公司的圖形卡來提升深度學習的性能,提供程式庫(Library)和框架(framework)產品,並積極開設研討課程。另外,Google也公開了框架「TensorFlow」,可以將深度學習應用於資料分析。

(4)AI的三大應用:
AI應用領域主要可分為語音辨識、影像辨識,自然語言處理等三部分。

3

3.人工智慧的3大應用之一:語音辨識(speech recognition)
AI應用領域主要可分為語音辨識、影像辨識,自然語言處理等三部分。

☎語音辨識(speech recognition):
語音辨識部分,透過多年來語音辨識競賽CHiME的研究,已經有了等同人類的辨識度(CHiME,是針對實際生活環境下的語音辨識,所進行評測的國際語音辨識競賽)。此外,Apple、Google、Amazon也相繼提出可應用於日常生活的服務,因此其成熟度已達到實用等級。


科大訊飛輸入法:


影片:(1)Google 語音轉文字,解決會議逐字稿
影片:(2)針對台灣人口音的雅婷逐字稿APP,語音辨識成文字
影片:(3)語音轉錄神器 google 研發 ! 除了 雅婷逐字稿 之外的選擇
影片:聲音當入口 語音辨識改變未來生活(2014年)
影片:逐字稿太費時?「聲音轉文字」神APP推薦你
影片:AI語音辨識
影片:AI語音辨識技術-雅婷逐字稿

(參考來源文章)

4

5.人工智慧的3大應用之二:影像辨識(Image recognition),電腦視覺(computer vision)
AI應用領域主要可分為語音辨識、影像辨識,自然語言處理等三部分。

☎影像辨識(Image recognition),電腦視覺(computer vision):
影像辨識部分,雖然一般圖片的辨識已有同等於人類的辨識率,但動態影像的辨識準確度卻仍比不上人類,目前還在進行各種演算法的測試。其中,影像辨識目前最火熱的應用場域非自動駕駛莫屬了。

整個汽車、資通訊產業都正朝著自駕車的方向努力,例如Google持續進行自動駕駛的研究,TOYOTA也在美國設立豐田研究所,可以知道現階段的開發已十分接近實用化。因此,我們可判斷目前影像辨識的成熟度是介在研究和實用等級之間。





AI人工智慧機器人:

影片:iphone的人臉辨識工具:Face ID

影片:亞馬遜Amazon GO的無店員商店(使用影像識別自動確認物品)

影片:中國天網智能監控系統(影像辨識)
影片:不可思議的監控天網!AI戰 中國已超越美國
影片:天網智能監控的實際畫面

影片:機器人醫療零售十大產業,AI應用大爆發
影片:USB cam就可以做影像辨識
影片:AI影像辨識技術應用於製造業品質檢測
影片:AI 影像瑕疵檢測的重要概念與產業應用

影片:用樹莓派及桌上型電腦進行實時物體偵測
影片:智駕巴士 - 無人車 - 自動駕駛 - 自駕巴士
影片:自動駕駛巴士台北2020/9月上路
影片:台北市有自動駕駛公車了
影片:打開 AI 黑箱!以自駕車為例認識可解釋的人工智慧

影片:AI人工智慧機器人-Atlas-美國波士頓動力公司(Boston Dynamics)
影片:Atlas機器人跳舞
影片:AI人工智慧機車
(參考來源文章)

5

5.人工智慧的3大應用之三:自然語言處理:Natural Language Processing(NLP)
AI應用領域主要可分為語音辨識、影像辨識,自然語言處理等三部分。

☎自然語言處理:Natural Language Processing(NLP)
自然語言處理(Natural language processing;NLP),是試著讓人工智慧能理解人類所寫的文字和所說的話語。NLP首先會分解詞性,稱之「語素分析」(morphemic analysis),在分解出最小的字義單位後,接著會進行「語法分析」(syntactic analysis),最後再透過「語意分析」(semantic analysis)來瞭解含意。

輸出部分,自然語言處理也與生成文法(generative grammar)密切相關。生成文法理論認為,只要遵循規則即可生成文句。這也代表著,只要把規則組合在一起,便可能生成文章。

在自然語言處理中,最具代表性的應用就是「聊天機器人」(Chatbot)了,它是一種如真人般,可透過文字訊息與人對話的程式。2016年,臉書推出了「Facebook Messenger Platform」,而Line也推出了「Messaging API」,因而促使這種搭載NLP技術的聊天機器人成為矚目的焦點。

另外,由IBM所開發的華生(IBM Watson),也是應用NLP的人工智慧而成。華生可以從維基百科等語料庫中抽取知識,學習詞彙與詞彙之間的相關性。現在,就連軟體銀行(SoftBank)機器人Pepper也是搭載華生系統。

只不過,由於在日常對話中,我們很常省略詞句,也不一定會提及時空背景,因此當前的Chatbot尚無法與人類進行天花亂墜的對話。所以說,現行多數的Chatbot廠商,還是會限定對話的環境與應用領域。






影片:IBM超級電腦華生(IBM Watson)上益智節目比賽 大勝人腦
影片:人腦電腦大對決
影片:IBM華生研究區塊鏈共享病例
影片:台灣的醫院引進IBM華生來看病
影片:機器人"華生",1秒寫出藏頭詩

影片:三款人工智慧音箱比較:小愛,小度,天貓精靈
影片:小米音箱

影片:「聊天機器人」夯! 人工智慧讓服務變科技
影片:糖尿病LINE聊天機器人 解決糖友資訊疑惑
影片:LIne聊天機器人:卡米狗,能陪你談天說地
影片:新北市資訊查詢系統,專屬LINE聊天機器人
影片:如何在LINE群加上聊天機器人

pepper機器人(鴻海製造)
江西圖書館的機器人吵架(1)
網紅圖書館
話癆機器人到電視節目參賽
人類與機器人的有趣對話
江西圖書館的機器人吵架(2)

影片:入門 NLP (自然語言處理)
影片:机器这样理解语言:句向量
影片:机器是这样理解语言的:词向量
影片:你天天用的搜索引擎是怎样工作的?

(參考來源文章)

5

6.人工智慧在其它小領域應用之一:邏輯推理類

☎其它領域應用:
(1)邏輯推理類(例如下棋(alphGO圍棋,IBM深藍西洋棋),即興寫詩,寫稿機器人)
(2)網站的自動推薦系統(例如google自動推薦影片)
(3)疾病預測與醫療建議系統

☎邏輯推理類:在某些領域,人工智慧的邏輯推理能力,已經超過人類了

6-1 下棋:
☎下棋,通常仰賴的具有推理與邏輯能力,對電腦而言,計算、記憶及邏輯判斷,是完全不同的能力。
☎西洋棋:
(1)IBM深藍:是下西洋棋的AI系統,主要先用minimax算法和alpha-beta修剪法來分析局面,然後再用評估函數來決定下一步的走法,使其勝率較大。
(2)1997年,IBM的人工智慧程式“深藍”戰勝了雄據國際象棋霸主12年的卡斯帕羅夫,人工智慧迎來了第三次大發展。
影片:前世界西洋棋王輸給超級電腦「深藍」
(3)但是這種人工智慧,只是『一直窮舉法』,把各種可能的路徑都寫成程式,然後再決定使用哪一種路徑。


☎alpha go圍棋:
(1)使用AI在玩家主角上(非NPC):alpha go打敗世界圍棋棋王:
影片:人機大戰史!AlphaGo 4比1大勝圍棋棋王李世乭

影片:AlphaGo是什麼?科學大爆炸

(3)AlphaGo圍棋程式:
方法:半監督式學習法,包括兩種主要演算法:『蒙地卡羅樹狀搜尋』演算法,『兩個深度神經網絡(策略網路,價值網路)』演算法
其中的神經網絡:使用13層的CNN卷積神經網絡。
學習過程:要學習數萬種高手的棋譜。
硬體:配合176個GPU,平行運算。
時間:2016年
公司:Google DeepMind
影片:AlphaGo 三戰完勝大陸棋王柯潔


(4)AlphaGo Zero圍棋程式:
特色:是AlphaGo的下一代產品。進化版,更厲害。
時間:2017年
公司:Google DeepMind
方法:融合兩個,成為一個神經網絡系統,
學習:完全不需要學習人類的棋譜,就是基於圍棋規則去生成各種樣例,然後大量與人對戰,自我增強學習,產生大量經驗樣本,只要40小時就打敗棋王。屬於無師自通型。
硬體:使用4個TPU計算。
成果:打敗所有人類圍棋手,打敗AlphaGo的歷代版本(AlphaGo,AlphaGo Lee,AlphaGo Master)
影片:AlphaGo Zero為什麼厲害

影片:AlphaGo Zero真的無師自通?

影片:Alphago Zero 2天就超越人類,40天讓5子

影片:人工智慧時代正式來臨


6-2.寫稿機器人:
影片:1秒就能成生原創文案,內容創作者必知道的,智慧寫作機器人

影片:我用AI人工智能創作了一部影片!人工智能是什麼?AI自動寫作工具分享


6-3.寫詩機器人:
「微軟小冰」不但可以聊天、主持節目、創作歌曲等,諸多功能,甚至還可以做到即興寫詩的地步,
你只要給他一張圖片,她就可以幫你寫出一篇詩。
影片:比小愛同學更有趣的【微軟小冰】- 超能聊

影片:18歲的微軟小冰,當前人工智慧第一的虛擬歌手

影片:微軟小冰挑戰職業配音員

影片:人工智能史上第一位出版詩集的機器人小冰


5

7.人工智慧在其它小領域應用之一:網站的自動推薦系統

☎其它領域應用:
(1)邏輯推理類(例如下棋(alphGO圍棋,IBM深藍西洋棋),即興寫詩,寫稿機器人)
(2)網站的自動推薦系統(例如google自動推薦影片)
(3)疾病預測與醫療建議系統

網站的自動推薦系統:
☎推薦系統在現今的生活中隨處可見,舉例來說,我們每天上FB看粉絲團、在YouTube上看影片、去電影網站上評分電影,在看完後被推薦下一個新聞、商品或影片繼續觀看,這其實就是在預測用戶可能會喜歡的東西。

7-1 基於內容的推薦:
最早被使用的推薦方法為基於內容的推薦,它稱為 content-based的方法。
基於內容的推薦,乃是根據用戶過去喜歡的商品(item),並從中分析這些被喜歡的商品特徵再去找沒買過的商品中與之最相似的特徵商品。
這種方法稱為「基於商品的推薦」或是「基於內容的推薦」 (Content-Based)。

7-2 基於熱門度的推薦: 對一個新的使用者而言,推薦系統並無該使用者的購物或是瀏覽紀錄,所以我們並沒有辦法對於空白資料的使用者進行合適的推薦,也就是我們無法用上面提到的「基於內容的推薦」。
這時,推薦系統便可使用「基於熱門度的推薦」這種方法來將商品推薦給新用戶。

7-3 協同過濾: 在同樣都擁有用戶的歷史購物紀錄的條件下,我們除了採用「基於內容的推薦」的方法外,也可以採用「協同過濾」的方法對用戶進行推薦。
對於每位使用者而言,應該都會有許多與他購物習慣相似的使用者,而協同過濾就是找出與該使用者購物習慣相似的群體,並分析其偏好來預測該使用者的個人偏好,進而達到個人化(過濾其他不適合)的推薦效果。

7-4 混和式推薦(Hybrid): 混和式推薦:則是將上面所講推薦方法或是其他種類的推薦演算法進行混和利用,
下面舉一個簡單的混和式推薦當例子:
我們結合Content-based和User-based來進行混和式推薦。


5

8.人工智慧在其它小領域應用之一:疾病預測與醫療建議系統

☎其它領域應用:
(1)邏輯推理類(例如下棋(alphGO圍棋,IBM深藍西洋棋),即興寫詩,寫稿機器人)
(2)網站的自動推薦系統(例如google自動推薦影片)
(3)疾病預測與醫療建議系統

8-1.疾病預測與醫療建議系統:
隨著醫療的進步,人們對疾病的處理態度不再只限於對症下藥,預防勝於治療的觀念也逐漸普及於大眾的認知。

隨著人工智慧的發展,對大量的醫療數據進行分析,以便對重大疾病能進行預測,已是人工智慧應用於醫療領域的發展趨勢。


雖然許多醫療AI應用,目前仍然只在影像判讀上有較多的著墨,但在這人工智慧和大數據正風起雲湧的時代,在不久之後,會大幅地改變全球的醫療體系與大環境。或許不至於取代人類在醫療領域中的地位,但必定會成為醫療領域中強力的助手。



 

 
chp3.人工智慧的發展歷史
目錄 1.人工智慧的三階段發展 2.人工智慧的發展歷史與著名人物 3.人工智能舉例:如何預測房屋的成交價格?(迴歸問題) 4、神經網路
目錄 5、神經網路框架

exp3_1

人工智慧的發展歷史:
1.影片:人工智慧發展歷史





2.影片:人工智能發展史
1、人工智慧的發展史
(1)1950年,英國電腦科學家圖靈提出了一個問題:機器會思考嗎?
圖靈提出了一種測試機器智慧的標準:圖靈測試:
一個人C通過文字等方式與另一個人A和一個電腦B交流,他能否通過一連串的問題區分A和B哪個是人,哪個是電腦?
如果人類無法區分出A和B,就稱電腦通過了圖靈測試。

圖靈測試每年都會舉辦,在2014年時終於有一個人工智慧軟體被33%的人類認為是一個13歲的小男孩,通過了圖靈測試,這個軟體叫做尤金·古斯特曼。
在電腦科學領域的世界最高獎叫做圖靈獎,就是以圖靈的名字命名的,它被稱為電腦界的諾貝爾獎。

(2)1956年,美國電腦科學家馬文·明斯基,約翰·麥卡錫以及資訊理論的奠基者香農等人,召開了達特茅斯會議。在這次會議上,人們創造出了人工智慧這個詞。
從那次會議開始,人工智慧也進入了大發展時代。

(3)從此之後的幾十年中,由於演算法和算力的限制,人工智慧幾經起落。


(4)直到1997年,IBM的人工智慧程式“深藍”戰勝了雄據國際象棋霸主12年的卡斯帕羅夫,人工智慧迎來了第三次大發展。
影片:前世界西洋棋王輸給超級電腦「深藍」

(5)著名人物:
☎傑佛瑞·辛頓:深度學習之父的多倫多大學的電腦學家,他將反向傳播演算法(BP)引入了人工智慧領域。
☎楊立昆:紐約大學電腦科學家,他最著名的工作是卷積神經網路(CNN)。
☎約書亞•本吉奧:加拿大蒙特利爾大學電腦學家,
這三位共同獲得了2018年的圖靈獎。

(6)人工智能的成就:
☎圖像識別:人工智慧的識別率已經超過了人類。
☎語音辨識
☎智慧翻譯
這些人工智慧也有長足的應用。
現在我們上網,遇到看不懂的外文,只要按一下翻譯就能變成漢語了。去國外旅遊,也可以雙方用一個人工智慧軟體就能交流了。

2.人工智能舉例:如何預測房屋的成交價格?
也許我們每個人都有一種簡單判斷:大城市比小城市房子值錢,市區房子比郊區房子值錢,學區房比非學區房值錢…那麼,你能用數學關係把它表示出來麼?
比如:在最簡單的模型下,我們考慮房屋的價格與面積有關。我們有了一些房屋的面積,以及它們的成交價格,把資料(xi,yi)畫在一張圖上,如下:

從圖形上看,我們發現房價和面積接近於正相關,我們希望獲得一個函數關係,使它儘量準確的表示出房價y與面積x的關係,最簡單的關係就是直線y預=wx+b。其中w是直線的斜率,b是直線的截距。參數w和b的值不一樣,這條直線就能在平面內改變位置。
我們希望每一個數據點都能在直線上,但是實際上,這往往是做不到的,通過函數關係預測的房價yi預和實際房價yi之間總有差別。我們用 損失函數 描述這個差別:把每一個數據點真實的價格y與輸出的價格y預做差,再把這些差別做平方和。
☎損失函數:

如果損失函數特別小,就說明我們的函數最貼近實際的資料,這就是一個好的回歸分析。我們的目的就是要尋找合適的參數w和b,使得誤差函數J最小。
在數學上,這叫做最小二乘法,在高斯和勒讓德時代人們就找到了通過方程求解參數w和b的方法。

☎如何找出w,讓損失函數的值最小呢?(方法:用梯度下降演算法即可)
不過,如果參數特別多,高斯的方程演算法就不是那麼方便了,人們提出了一種逐步趨近的方法:梯度下降演算法。通過一次次的逼近,找到小的損失函數和最優的參數。
具體來講:損失函數J其實是參數w和b的函數。我們定性的畫出損失函數隨著參數的變化規律,它有可能存在一個最低點,我們希望尋找這個最低點。



2.人工智慧的發展歷史與著名人物:
2.影片:人工智能發展史
人工智慧的發展史
(1)1950年,英國電腦科學家圖靈提出了一個問題:機器會思考嗎?
圖靈提出了一種測試機器智慧的標準:圖靈測試:
一個人C通過文字等方式與另一個人A和一個電腦B交流,他能否通過一連串的問題區分A和B哪個是人,哪個是電腦?
如果人類無法區分出A和B,就稱電腦通過了圖靈測試。

圖靈測試每年都會舉辦,在2014年時終於有一個人工智慧軟體被33%的人類認為是一個13歲的小男孩,通過了圖靈測試,這個軟體叫做尤金·古斯特曼。
在電腦科學領域的世界最高獎叫做圖靈獎,就是以圖靈的名字命名的,它被稱為電腦界的諾貝爾獎。

(2)1956年,美國電腦科學家馬文·明斯基,約翰·麥卡錫以及資訊理論的奠基者香農等人,召開了達特茅斯會議。在這次會議上,人們創造出了人工智慧這個詞。
從那次會議開始,人工智慧也進入了大發展時代。

(3)從此之後的幾十年中,由於演算法和算力的限制,人工智慧幾經起落。


(4)直到1997年,IBM的人工智慧程式“深藍”戰勝了雄據國際象棋霸主12年的卡斯帕羅夫,人工智慧迎來了第三次大發展。
影片:前世界西洋棋王輸給超級電腦「深藍」

(5)著名人物:
☎傑佛瑞·辛頓:深度學習之父的多倫多大學的電腦學家,他將反向傳播演算法(BP)引入了人工智慧領域。
☎楊立昆:紐約大學電腦科學家,他最著名的工作是卷積神經網路(CNN)。
☎約書亞•本吉奧:加拿大蒙特利爾大學電腦學家,
這三位共同獲得了2018年的圖靈獎。

(6)人工智能的成就:
☎圖像識別:人工智慧的識別率已經超過了人類。
☎語音辨識
☎智慧翻譯
這些人工智慧也有長足的應用。
現在我們上網,遇到看不懂的外文,只要按一下翻譯就能變成漢語了。去國外旅遊,也可以雙方用一個人工智慧軟體就能交流了。

3.人工智能舉例:如何預測房屋的成交價格?(迴歸問題)
(1)影片:梯度下降算法

(2)簡易方法:
也許我們每個人都有一種簡單判斷:大城市比小城市房子值錢,市區房子比郊區房子值錢,學區房比非學區房值錢…那麼,你能用數學關係把它表示出來麼?
比如:在最簡單的模型下,我們考慮房屋的價格與面積有關。我們有了一些房屋的面積,以及它們的成交價格,把資料(xi,yi)畫在一張圖上,如下:

從圖形上看,我們發現房價和面積接近於正相關,我們希望獲得一個函數關係,使它儘量準確的表示出房價y與面積x的關係,最簡單的關係就是直線y預=wx+b。其中w是直線的斜率,b是直線的截距。參數w和b的值不一樣,這條直線就能在平面內改變位置。
我們希望每一個數據點都能在直線上,但是實際上,這往往是做不到的,通過函數關係預測的房價yi預和實際房價yi之間總有差別。我們用 損失函數 描述這個差別:把每一個數據點真實的價格y與輸出的價格y預做差,再把這些差別做平方和。
(3)☎損失函數:

如果損失函數特別小,就說明我們的函數最貼近實際的資料,這就是一個好的回歸分析。我們的目的就是要尋找合適的參數w和b,使得誤差函數J最小。
在數學上,這叫做最小二乘法,在高斯和勒讓德時代人們就找到了通過方程求解參數w和b的方法。

(4)如何找出w,讓損失函數的值最小呢?
☎簡易2D方法:用梯度下降演算法即可,計算損失函數對w的偏微分(效率),二個變數是(損失函數,w),反复迭代計算,當斜率不再變化時(約等於0),就是局部的低點,就是解。
不過,如果參數特別多,高斯的方程演算法就不是那麼方便了,人們提出了一種逐步趨近的方法:梯度下降演算法。通過一次次的逼近,找到小的損失函數和最優的參數。
具體來講:損失函數J其實是參數w和b的函數。我們定性的畫出損失函數隨著參數的變化規律,它有可能存在一個最低點,我們希望尋找這個最低點。

☎實際3D方法:梯度下降演算法,三個變數是(損失函數,w,b),所以三個3D曲面圖,要找到3D曲面的局部低點(反复迭代計算),當局部斜率約為0,就是解。


3.人工智能舉例:如何識別夠與貓?(分類問題)
☎方法:同迴歸問題,也是畫出迴歸線,在狗與貓的分佈圖上,畫出一條線(或是複雜形狀曲線),然後分隔狗與貓。

4、神經網路
(1)影片:神經網絡
(2)從本質上講,人工智慧問題就是通過這種一點點調整參數的方法,尋找一個函數,能夠從輸入的值儘量準確的獲得輸出值。實際的機器學習問題,要比剛才的例子複雜的多,比如房價不光與面積大小有關,還與距離市中心遠近、房齡長短、樓層情況、物業水準、周邊工廠學校醫院情況、匯率、甚至人口結構等等因素相關,而且很有可能不是線性關係。在圖像識別問題上,一幅圖就有上百萬個圖元,也就是上百萬個輸入參數。
為了應對這些複雜的問題,科學家們設計了神經網路演算法,你在網上搜索人工智慧、機器學習、深度學習等關鍵字時,可能經常會看到這張圖,這就是一張神經網路圖,其中每一個圓圈叫做一個神經元。


(3)神經網路的開創來源於人類對生物大腦的認識。人腦中有數百億個神經元細胞,每個神經元細胞前方有有樹突用於接收信號,當樹突收到刺激時,神經元會判斷這個刺激大小,如果刺激足夠大,神經元就會決定通過神經遞質或者電信號的方法,通過突觸將信號傳給下一級。


(4)1943年,美國神經科學家沃爾特·皮茨(WalterPitts)和沃倫·麥卡洛克(Warren SturgisMcCulloch)分析了人類神經元的結構,他們提出:人腦的神經元是一個多輸入、單輸出系統,而且輸出只有兩種:0或者1。如果輸出是0,就表示上一級神經元不向下一級傳遞信號;如果輸出是1,就表示上一級神經元向下一級傳遞信號。用電腦可以類比人類的大腦,這就是所謂的人工神經網路。


(5)這個類神經模型的操作流程是:
1、給定輸入參數x1——xn,將它們線性組合起來獲得函數值y
2、把函數值y放進一個非線性的激活函數中,獲得一個0到1之間的值f(y)。經常使用的激活函數叫做sigmoid函數,它的運算式和圖像如下所示。

3、獲得的激活值越小,向下級傳遞信號的概率越低;激活值越大,向下級傳遞信號的概率越大。

(6)舉例:識別一個圖像『X』:
我們給電腦去一幅圖,這是一幅有25個圖元點的純黑白圖像,我們要讓電腦判斷這個圖像代表的是不是字母X。

電腦並不能像我們一樣一眼看出圖像內容,它只認識數位。這張圖有25個圖元點,每個圖元點要麼是黑色,要麼是白色,相當於有25個輸入,每個輸入端要麼是0,要麼是1。於是,這張圖片對電腦來講,就是一個5*5的數位矩陣。

如果是灰度圖或者彩色圖片又如何呢?灰度圖片中的每一個圖元點可以用0-255之間的一個數字表示,相當於一個8位的二進位數字字;如果是彩色圖,每個圖元點需要用RGB三個顏色的飽和度來表示,資料量再擴大三倍……但無論如何,電腦看來,任何一張圖片都只是一組數位,只是數位有多有少而已。

(7)多層神經網路:



5、神經網路框架:
5.影片:人工智能的框架
(1)tensorflow and keras(google)
(2)pytorch(facebook)
(3)mindspore(華為)

影片:6.總結

 
 
chp4. 機器學習,深度學習簡介
目錄 1.AI,機器學習,深度學習 2.機器學習 3.深度學習

1.機器學習,深度學習簡介:
☎人工智能發展史:


早期的人工智慧,例如:1997年,IBM的人工智慧程式“深藍”戰勝了雄據國際象棋霸主12年的卡斯帕羅夫,人工智慧迎來了第三次大發展。
但是這種人工智慧,只是『一直窮舉法』,把各種可能的路徑都寫成程式,然後再決定使用哪一種路徑。
☎影片:前世界西洋棋王輸給超級電腦「深藍」

2.機器學習簡介(Machine Learning):
☎影片:機器學習的種類:t=120s
影片:1.機器學習的種類
影片:2.什麼是機器學習

(2-1)機器學習的目的:
目的:找出規律,方便我們來做預測,或分類


(2-1)機器學習(Machine Learning):
機器學習是一種透過演算法設計,讓機器去尋求最佳化的一種學科。能幫助人們探討一些複雜的問題,比如需要從一大堆數據資料判斷貓與狗時,從前人們必須利用過往的實驗經驗反覆地找出判斷規則或是最佳的判斷機制。而透過機器學習方式則提供許多有效率的演算法,幫助人們分析資料,比如說資料群聚分布,資料的回歸模型等等,將資料送至機器上進行演算找出最好的解答或是模型。以下將介紹機器學習的類別:


(2-2) 機器學習主要可分類成三類:
(A).監督式學習:
須將每筆資料標記上一個「標籤」,比如是與非回答、狗與貓、蘋果與橘子,利用大量已知標籤資訊與資料訓練的方式建立出一個分類器(Classifier)或稱模型(Model)。除了資料分類,監督式學習亦包含回 歸分析(Regression)算法。最具代表的算法有 Adaboost 、SVM 、Neural Network 等等。


(B).非監督式學習 :
「無須標記標籤」於每筆資料,常以資料的分布狀況去建立一個分類器。除了聚類分類(clustering),非監督式學習亦包含降低維度(dimensionality reduce)以及關聯規則( association rule)等演算法。 最具代表的算法有 Kmean 、PCA 等等。


(C).強化式學習 :
則是「不需給機器任何資料」,讓機器不斷從互動中學習,並利用獎懲與成效評估的機制,不斷嘗試與修正至最佳化的模型。最具代表的算法有 Q-Learning 、SARSA 等等。



(2-3) 機器學習的用途可分為以下幾種:
(A).監督式學習:
須將每筆資料標記上一個「標籤」,比如是與非回答、狗與貓、蘋果與橘子,利用大量已知標籤資訊與資料訓練的方式建立出一個分類器(Classifier)或稱模型(Model)。除了資料分類,監督式學習亦包含回 歸分析(Regression)算法。最具代表的算法有 Adaboost 、SVM 、Neural Network 等等。
☎用途1:迴歸預測:Regression Prediction(target目標值為連續值)
☎用途2:分類預測:Classification Prediction(target目標值為不連續值,類別)

(B).非監督式學習 :
「無須標記標籤」於每筆資料,常以資料的分布狀況去建立一個分類器。除了聚類分類(clustering), ☎用途1:聚類分析(cluster analysis),又稱為『集群分析、分群分析』等,是一種統計方法。這種統計方法常用在商業上、電腦科學、生物學和經濟學
最具代表的算法有 Kmean演算法。
☎用途2:關聯規則( association rule)等演算法。
☎用途3:降維分析(Dimension Reduction),是指在某些限定條件下,降低隨機變量個數,得到一組「不相關」主變量的過程。
最具代表的算法有 PCA演算法。
降維可進一步細分為『變量選擇,和特徵提取』兩大方法。
使用降維的原因1:資料壓縮. 降低記憶體佔用空間。
使用降維的原因2:增加運算效率. 將2 維降為1 維。
使用降維的原因3:資料可視化,將多維降到2 維,容易視覺化呈現。

(C).強化式學習 :
則是「不需給機器任何資料」,讓機器不斷從互動中學習,並利用獎懲與成效評估的機制,不斷嘗試與修正至最佳化的模型。最具代表的算法有 Q-Learning 、SARSA 等等。


(2-4)基本的機器學習算法:
☎線性回歸算法 Linear Regression
☎支持向量機算法 (Support Vector Machine,SVM)
☎最近鄰居/k-近鄰算法 (K-Nearest Neighbors,KNN)
☎邏輯回歸算法 Logistic Regression
☎決策樹算法 Decision Tree
☎k-平均算法 K-Means
☎隨機森林算法 Random Forest
☎樸素貝葉斯算法 Naive Bayes
☎降維算法 Dimensional Reduction
☎梯度增強算法 Gradient Boosting

(2-5)各種機器學習,求取『迴歸線』的方法:
☎目的:預測值,或求迴歸線:


☎各種機器學習方法:


☎方法1:最簡單的預測方法:找出舊有資料的線性關係:


☎方法2:梯度下降法:找出最佳的迴歸線:
☎方法3:線性迴歸法:Linear Regression



(2-6)各種機器學習,求取『分類』的方法:
☎目的:分類:


☎方法1:邏輯迴歸法:Logistic Regression
☎經由一個激勵函數,就可以分2類(0,與1)



☎方法2:決策樹:Decision Tree
☎目的:分類:



☎方法3:隨機森林法,Random Forest
原理:隨機挑選特徵來分類


☎方法4:梯度增強算法 Gradient Boosting Decision Tree,GBDT
原理:讓重要的特徵有較高的權重


☎方法5:最近鄰居/k-近鄰算法 (K-Nearest Neighbors,KNN)
原理:比對最近數據的特徵值,看屬於哪一種分類


☎方法5:單純貝氏分類器(Naive Bayes classifier)
原理:利用貝氏定理,算出特徵與結果的機率關係,從而預測


☎方法6:支持向量機算法 (Support Vector Machine,SVM)
原理:找出分割線,使其最近的點距離越遠越好,從而切割分類


(2-6)各種機器學習,求取『分類』的方法(但數據沒有被分類過):
☎目的:分類(但數據沒有被分類過)
☎方法1:k-平均算法 K-Means
原理:找出每一群的中心點,再分群,再求中心點


(2-8)各種機器學習,求取『分類』的方法(但沒有歷史數據):
☎目的:分類(但沒有歷史數據)
☎方法1:強化學習法(Reinforcement learning,RL)
原理:建立模型,讀取數據,看模型的反應,來動態調整模型


(2-9)該挑選哪一種機器學習算法:
☎原理1:先根據數據有沒有標準答案,分成2類:
監督式學習(Supervised learning):每筆資料『有』標準答案(標籤)
非監督式學習(Non Supervised learning):每筆資料『沒有』標準答案(標籤)
☎原理2:若沒有沒有歷史數據,則用強化學習法(Reinforcement learning,RL)


(2-11)該機器學習算法的缺點:
☎缺點:每種演算法,都有其使用上條件的限制,無法適用與各種複雜的場合
☎取代方法:深度學習法

3.深度學習簡介:
影片:3.深度學習的種類

☎各種機器學習方法:


(3-1)神經網絡模型:
☎目的:類似人類大腦神經元的層層連結網絡



(3-2)能夠處理非線性系統的神經網絡模型:
☎原理:使用激勵函數(activation function),常見有三種:


(3-3)深度學習模型,Deep Learning:
☎原理:多層感知器,多層神經網絡模型:


(3-4)深度學習模型如何調整參數值:
☎原理:計算,正向傳播,計算損失函數,反向傳播法



(3-5)圖像識別,電腦視覺:使用卷積神經網絡(CNN)
☎原理:先找出圖像的特徵,再用特徵來讓神經網絡學習

☎成果:深度學習在圖像識別方面的準確率,已經超過人類的識別率


(3-6)模仿影像藝術風格:生成對抗網絡(GAN)
☎原理:先用兩個神經網絡模型,相互抗衡,一個是生成模型,一個是識別模型,只要生成模型的產出圖片,無法讓識別模型看出為假,即是最佳解

☎成果:變臉軟體,或自動生成的畫作


(3-7)處理聲音文字的自然語言:遞迴神經網絡(RNN)
☎原理:把每個神經網絡模型,傳遞到下一個,是有次序的短期記憶訓練學習過程
(3-8)處理聲音文字的自然語言:長短期記憶神經網絡(LSTM)
☎原理:改善RNN的長期記憶模型快速遞減的缺點,讓神經網絡模型有長短期記憶


(3-9)transformer神經網絡
☎原理:使用注意力attension的神經網絡機制,直接focus on重點部位,適合於:自然語言處理,電腦視覺

☎成果:2020年GPT-3已經可以自動寫出文章,回答問題


(3-10)其它成果
☎成果1:alpha go打敗世界圍棋棋王

☎成果2:自駕車
☎成果3:醫學影像診斷
☎成果4:無人商店


 
chp5.深度學習(神經網絡)的視覺化理解
目錄 1.神經網絡辨識數字過程的3D視覺化 2.機器學習的數學基礎:以數據迴歸為例 3.類神經網絡的數學基礎:以數據分類為例 視覺化第一章:究竟神經網路是什麼?
視覺化第二章:梯度下降,神經網絡如何學習 視覺化第三章:什麼是反向傳播演算法? 視覺化第四章:反向傳播的微積分算法 6.什麼是神經網絡 (中文)

1.神經網絡辨識數字過程的3D視覺化:
影片:5.神經網絡辨識數字過程的3D視覺化

1.機器學習的數學基礎:以數據迴歸為例:
影片簡介:影片:1.機器學習的數學基礎:以數據迴歸為例

2.機器學習machine learning的基本精神:
(1)機器學習是關鍵,是要建立一個數學模型:y=f(x)
x = input
y = output

(2)機器學習的最常用的應用:分類,迴歸

(3)迴歸的應用範例:
攝氏1度 = 華氏33.8度
攝氏2度 = 華氏35.6度
攝氏3度 = 華氏37.4度
請問,攝氏4度時, 華氏是幾度?

方法:用機器學習來處理這個迴歸問題
步驟1:先建立數學模型y=f(x),例如y = wx + b
步驟2:然後學習舊有的(x,y)對應資料,解出w,b
步驟3:最後用已經建立好的機器學習數學模型(y=wx+b),來預測x=4(攝氏4度)時的華氏溫度(y)

(4)機器學習的流程
A.建立模型
B.建立目標函數(例如,我們希望迴歸曲線最接近實際值,所以要找出誤差最小的那條線,因此目標函數就是:誤差函數
C.訓練模型
D.測試模型,避免overfitting
D.模型的預測

(5)數學模型:建立y = wx+ b
w:權重值,weight
b:偏差值,bias

(6)建立目標函數
一般都是以誤差函數(loss function)當作目標函數


(7)建立訓練過程
若要訓練模型得到正確的w,b,可以用土法煉鋼法,一個一個測試,也可以用演算法來快速找到最佳的w,b參數
A.方法1:不斷測試w,b,然後逐漸找出可以讓誤差值最小的那一條線
B.方法2:粒子群演算法
C.方法3:最小梯度法(Gradient Descent)

(8)測試模型,避免overfitting
overfitting的例子:看似符合數據的曲線,但是在非訓練數據區卻是失真曲線


2-1.類神經網絡的數學基礎:以數據分類為例:
(1)影片簡介:2.類神經網絡的數學基礎:以數據分類為例
AI練習網站:數據分類的線上雲端神經網絡

(2)機器學習,深度學習的最常用的應用:分類,迴歸

2-2.類神經網絡Neural Network的基本精神:
(1)人工神經網路(英語:Artificial Neural Network,ANN),
簡稱神經網路(Neural Network,NN)或類神經網路,
在機器學習和認知科學領域,是一種模仿生物神經網路(動物的中樞神經系統,特別是大腦)的結構和功能的數學模型或計算模型,

(2)類神經網路的用途:
A.分類 classification
B.迴歸 Regression


(3)由一個二元分類的範例,來開始研究類神經網路模型:
A.兩個輸入變數:身高,體重
B.輸出變數:過重(1),沒有過重(0)


(4)最常用來做分類的數學模型:邏輯迴歸模型Logistic Regression
A.Logistic Regression:典型的二值分類器,用來處理兩類分類問題

B.邏輯迴歸模型簡介:https://www.itread01.com/content/1548754216.html

C.邏輯迴歸模型的結構圖:


D.邏輯迴歸模型的前半部就是一個神經元的模型結構


E.邏輯迴歸模型Logistic Regression的數學模型:

數學式:y = x1*w1+x2*w2 + b
w:權重值,weight
b:偏差值,bias

F.修正Logistic Regression的輸入值範圍,使它能夠在0~1的範圍內
方法:經過Sigmoid()函數轉換,就可以產出0~1的輸出值
Sigmoid()函數示意圖:

修正後數學模型:y = Sigmoid(x1*w1+x2*w2 + b)


G.簡易線性數據的分類效果:


(5)缺點:邏輯迴歸模型Logistic Regression的先天限制
A.先天限制的缺點:
**只能夠處理線性分類的問題
**無法處理複雜非線性的數據分類



(6)解決非線性份額問題的方法:使用多個神經元
A.邏輯迴歸模型Logistic Regression:使用單一神經元
B.類神經網路模型:使用多個神經元



2-2.線上雲端神經網絡的實際測試:
AI練習網站:數據分類的線上雲端神經網絡
(1)簡易線性分類問題(二元數據):
方法:使用:(2個輸入),(1個隱藏層),(1個神經元)


(2)非線性分類問題(交叉數據):
方法:使用(2個輸入),(2個隱藏層),(3個神經元,2個神經元)


(3)複雜非線性分類問題(環形數據):
方法:使用(2個輸入),(2個隱藏層),(3個神經元,2個神經元)


(4)複雜非線性分類問題(螺旋形數據):
方法:使用(7個輸入),(4個隱藏層),(5個神經元,5個神經元,5個神經元,5個神經元)


1.深度學習的視覺化理解:
(1)影片:第一章:究竟神經網路是什麼?


1.深度學習的視覺化理解:
(2)影片:第二章:梯度下降,神經網絡如何學習


1.深度學習的視覺化理解:
(3)影片:第三章:什麼是反向傳播演算法?


1.深度學習的視覺化理解:
(4)影片:第四章:反向傳播的微積分算法


6.什麼是神經網絡 (中文):
影片:6.什麼是神經網絡 (中文)

 

 
chp6.執行python的四種方法
1.執行python的四種方法 2.Anaconda下載點 3.安裝anaconda 4.Anaconda cmd指令
5.建立Anaconda虛擬環境 6.使用Spyter編譯器 7.網頁版python編輯器jupyter notebook 8.其它線上雲端可編譯的python平台

1.前言

Python堪稱是大數據與AI時代的最重要程式語言,在資料處理上有著非常重要的地位。而隨著AI的興起,讓傳統的零售業、金融業、製造業、旅遊業,以及政府都爭相投入,無不希望能運用數據分析與預測來協助決策方向,也讓新興的數據分析師、資料分析師成為熱門職業,因此本課程將講解如何使用網絡爬蟲技術以掌握資料爬取分析、視覺化呈現,以及儲存交換應用的關鍵技術。

Python資料處理的三大技術分別是:擷取分析、視覺化呈現與儲存應用。
而其應用的範疇包括:網路爬蟲、資料正規化、資料視覺化、資料儲存與讀取(CSV、Excel、Google試算表、SQLite、MySQL)、批次檔案下載、公開資料應用、API建立、驗證碼辨識。

Python大數據分析最重要的四個模組

1.Python大數據分析最重要的四個模組
Python資料分析最重要的四個模組:pandas、numpy、scipy、matplotlib。

(1)pandas:是基於numpy的資料分析工具,能夠快速的處理結構化資料的大量資料結構和函數。
pandas模組應該是python用來進行一般日常的大數據分析,最重要的模組了。
因為pandas的DataFrame資料結構,可以快速的互通於所有的二維結構資料,包括『excel,csv,json,xml,mysql,任何的資料庫,網頁的表格資料,字典dict,二維串列list』
也就是pandas的DataFrame資料結構,可以與它們之間互相簡易的存取。
然後再根據DataFrame來進行想要的大數據分析,它提供內建的演算法與資料結構,能夠用一個指令,就可以進行二維資料的『排序,篩選,關鍵字查詢,任意區間範圍查詢,統計學計算,平均值,變異數,標準差,字串檢索,字串取代,欄位樞紐分析、小記、欄位加總,把二維資料任意方式圖形視覺化顯示』
而建立pandas的DataFrame資料結構,有兩種方式,可以用column的方式來輸入資料,也可以用row的方式來輸入資料。
所以pandas是大數據分析,非常實用的利器工具,是python資料分析的首選。

(2)Numpy: Numpy專門用來處理矩陣,它的運算效率比列表list串列更高效。
Numpy是Python進行專業的數值計算之重要模組,因為大多數提供科學計算的包都是用numPy的陣列作為構建基礎,因此在進行高等數學計算時,numpy就是大數據分析的最重要工具了,因為高等數學運算,都是以矩陣的方式來進行運算,例如人工智慧,機器學習,深度學習,類神經網路計算等。

(3)sscipy:是基於numpy的科學計算包,包括統計、線性代數等工具。

(4)matplotlib:是最流行的用於繪製資料圖表的 Python 庫
也可以結合pandas模組來繪圖。

2.執行python的四種方法(建議用Anaconda,或colaboratory)

1.執行python的四種方法(建議用Anaconda,或colaboratory):
一、方法1:安裝python單純的python
缺點:功能陽春,沒有太多的模組,無法馬上寫大數據分析程式。
安裝網址:python官網下載

二、方法2:安裝Anaconda(**推薦)
優點:會同時安裝python、1000多種數學繪圖模組、Spyder編輯器,能夠支援大數據分析。
缺點:會安裝了很多你用不到的模組,浪費硬碟空間。
安裝網址:到Anacond官網下載安裝

三、方法3:使用python官網線上shell
使用repl線上python

四、方法4:免安裝的colaboratory(**推薦)
(1)特色:Colaboratory (簡稱為「Colab」) 可在瀏覽器上撰寫及執行Python
(2)使用方法:到google雲端硬碟→新增→連結更多應用程式→colaboratory
(3)優點:
☎免費
☎提供GPU運算
☎什麼前置安裝都不需要,請打開瀏覽器,登入Google帳號,就可使用
☎常用模組都已經安裝好
☎未來晉升中高階開發者,也可無痛轉換成Jupyter或其他IDE繼續開發
☎與Google Drive連動,方便存取與備份以外,也方便與他人協作
(4)缺點:
☎最多只能12小時的連續運算
☎每次重新開啟Colab,都要重新連動Drive
☎如果要使用Colab無預設安裝好的特定模組,那每次開啟 Colab 時都要重新安裝一遍
☎與Google Drive連動是優點也是缺點,像是資料容量過大的話可能就放不進去 Google Drive.

3.Anaconda下載點

Anacond官網


3.安裝anaconda 3.安裝anaconda
功能:原始的python功能太陽春,若下載anaconda,則可以提供300多種的科學數學模組,可以提供大數據資料分析
(1)Anaconda是一個免費的Python和R語言的發行版本,用於計算科學(資料科學、機器學習、巨量資料處理和預測分析)
(2)因為Anaconda有很多的數據分析模組,所以大數據分析會使用到的『pandas、Numpy、Scipy』python package套件,在anaconda安裝完成時就已經包含在裡面了。
(3)Anaconda中文是森蚺(大蟒蛇)。
1)可以把Anaconda當作是Python的懶人包,除了Python本身(python2, 3) 還包含了Python常用的資料分析、機器學習、視覺化的套件
2).完全開源和免費
3).額外的加速、優化是收費的,但對於學術用途可以申請免費的 License
4).全平台支持:Linux、Windows、Mac
5).支持 Python 2.6、2.7、3.3、3.4,可自由切換,
6).內帶spyder 編譯器(還不錯的spyder編譯器)
7).自帶jupyter notebook 環境 (就是網頁版的python編輯器,副檔名為IPthon)

(4)常用套件:

Numpy: Python做多維陣列(矩陣)運算時的必備套件,比起Python內建的list,Numpy的array有極快的運算速度優勢
Pandas:有了Pandas可以讓Python很容易做到幾乎所有Excel的功能了,像是樞紐分析表、小記、欄位加總、篩選
Matplotlib:基本的視覺化工具,可以畫長條圖、折線圖等等…
Seaborn:另一個知名的視覺化工具,畫起來比matplotlib好看
SciKit-Learn: Python 關於機器學習的model基本上都在這個套件,像是SVM, Random Forest…
Notebook(Jupyter notebook): 一個輕量級web-base 寫Python的工具,在資料分析這個領域很熱門,雖然功能沒有比Pycharm, Spyder這些專業的IDE強大,但只要code小於500行,用Jupyter寫非常方便,Jupyter也開始慢慢支援一些Multi cursor的功能了,可以讓你一次改許多的變數名稱
(5)優點:省時:一鍵安裝完90%會用到的Python套件,剩下的再用pip install個別去安裝即可
(6)缺點:占空間:包含了一堆用不到的Python的套件(可安裝另一種miniconda)

(7)下載網址:https://www.anaconda.com/
選擇個人版:indivisual
https://www.anaconda.com/products/individual
→Download
→Windows
Python 3.7(會自動幫你安裝Python 3.7)
64-Bit Graphical Installer (466 MB)
32-Bit Graphical Installer (423 MB)

(8)安裝過程,要勾選
不勾選:add the anaconda to the system PATH(但是2020年,ananconda不建議勾選這個,容易發生錯誤)
勾選:Register anaconda as system Python 3.7

(9)安裝結束
→在windows開始→anaconda有6個項目,最常用的有3個
(1)anaconda prompt:可以直接下cmd指令
(2)Spyter:編譯器(還不錯的spyder編譯器)
(3)jupyter notebook(網頁版的python編輯器,副檔名為IPthon)
4.Anaconda prompt:cmd指令 4.使用anaconda prompt:直接下cmd指令
注意:windows 10 必須使用管理員來執行(點選anaconda prompt→滑鼠右鍵→以系統管理員身份進行)
(1)列出目前已經安裝的anaconda的模組與版本:
conda list

(2)對某個模組更新安裝
conda update 模組
範例:conda update ipython

(3)安裝某個模組
方法1:conda install 模組
範例:conda install numpy

# 安裝 NumPy 1.15 以後、 1.16 以前
conda install 'numpy>=1.15,<1.16'

方法2:pip install 模組
範例:pip install numpy

(4)解除安裝某個模組
方法1:conda uninstall 模組
範例:conda uninstall numpy

方法2:輸入 conda remove PACKAGE_NAME可以從目前的工作環境移除指定套件。
# 移除 NumPy
conda remove numpy numpy-base

方法3:pip uninstall 模組
範例:pip uninstall numpy

(5)在anaconda prompt執行python程式
方法1:
先到工作目錄:cd ch1
執行.py程式:python test1.py

方法2:python c:\chp1\test1.py

(6)常用指令
conda --version 檢視 conda 版本
conda update PACKAGE_NAME更新指定套件
conda --help 檢視 conda 指令說明文件
conda list --ENVIRONMENT 檢視指定工作環境安裝的套件清單
conda install PACAKGE_NAME=MAJOR.MINOR.PATCH 在目前的工作環境安裝指定套件
conda remove PACKAGE_NAME 在目前的工作環境移除指定套件
conda create --name ENVIRONMENT python=MAIN.MINOR.PATCH 建立新的工作環境且安裝指定 Python 版本
conda activate ENVIRONMENT 切換至指定工作環境
conda deactivate 回到 base 工作環境
conda env export --name ENVIRONMENT --file ENVIRONMENT.yml 將指定工作環境之設定匯出為 .yml 檔藉此複製且重現工作環境
conda remove --name ENVIRONMENT --all 移除指定工作環境
使用 conda list | grep numpy 檢查 Python 套件清單中是否還有 NumPy 套件
輸入 conda search PACKAGE_NAME可以檢視指定套件在 conda 中可安裝的版本列表。
# 檢視 NumPy 在 conda 中可安裝的版本
conda search numpy=1.16.3
5.用Anaconda prompt來建立虛擬環境p> 5.使用Anaconda prompt來建立虛擬環境
功能:可以建立多個Anaconda虛擬環境
例如:目前安裝後預設是python 3.x版本的環境,若要創建一個python 2.x的環境,就可以在Anaconda虛擬環境實現
(1)# 檢視電腦中可使用與目前所在的工作環境
conda env list

(2)使用 conda create --name ENVIRONMENT python=MAIN.MINOR.PATCH 指令可以建立出乾淨、極簡且資源隔絕的工作環境。
指令:conda create -n 虛擬環境名稱 python=版本 anaconda

# 建立一個名稱為 demo 的 Python 2 工作環境
conda create --name demo python=2
範例:建立py27env環境
conda create -n py27env python=2.7 anaconda

(3)輸入 conda activate ENVIRONMENT 可以啟動指定工作環境、
方法1:conda activate ENVIRONMENT
方法2:activate ENVIRONMENT
範例:activate py27env

方法3:到windows→開始→點選Anaconda prompt(py27env)

(4)關閉虛擬目錄,回到原本pytohn環境(base)
使用 conda deactivate 則是切換回預設的 base 工作環境。
方法1:conda deactivate
方法2:deactivate

(5)# 檢視 demo 工作環境中的套件
conda list -n py27env

(5)範例 A.建立py27env虛擬環境
conda create -n py27env python=2.7 anaconda
B.切換到py27env虛擬環境
activate py27env
C.檢視 demo 工作環境中的套件
conda list -n py27env
D.# 檢視 Python 版本
python --version
E.關閉虛擬目錄,回到原本pytohn環境(base)
deactivate

(5)複製一個與目前pyhon環境(或是py27env) 完全相同的工作環境
conda create -n 新虛擬環境名稱 --clone root
範例:conda create -n py27env2 --clone root

# 檢查明確所有虛擬環境名稱
conda info -e

(6)移除某個虛擬環境
conda remove -n 虛擬環境名稱 --all
範例:conda remove -n py27env --all

(7)常用指令整理
安裝:conda install
更新:conda update
移除:conda remove

在工作環境管理透過
創建:conda create
啟動:conda activate
停止:conda deactivate
匯出設定檔:conda env export
移除:conda remove
6.使用Spyter編譯器 6.使用Spyter:編譯器
(1)新增一個py檔案
File→ New file

print("你好,歡迎光臨")
print(1+1)

Run➤

(2)開啟已經存在的檔案
方法1:File→ Open
方法2:拖曵檔案總管的py檔案到Spyder

(3)在Spyter使用簡易智慧輸入
方法:按『tab』
範例:
先輸入p
然後按『tab』
出現list清單,都是p開始的指令

(4)程式除錯
方法1:若是這一行有指令寫錯,就會在最左邊出現三角形▲警告icon
方法2:在這個一行最左邊double click,就會出現中斷點(或是這一行按F12)
7.jupyter notebook網頁版的python編輯器 7.jupyter notebook
(1)功能:是網頁版的python編輯器,副檔名為IPthon
會開啟瀏覽器:http://localhost:8888/tree
對應的硬碟目錄 = C:\Users\電腦名稱
(例如: C:\Users\user)

(2)練習線上編輯一個簡單python程式
A.右方→New→Python3
在cell裡面輸入In[1]
a = ("apple","grape","banana")
print(a[2])

B.Run

C.修改檔案名稱→Untitled→exp1-3

D.查詢雲端檔案放置位置:C:\Users\電腦名稱\exp1-3.ipynb

(3)二種不同的Run方式
A.Run:會新增一個new cell
B.Ctrl+Enter:會停留在原本的cell

(4)在jupyter notebook使用簡易智慧輸入
方法:按『tab』
範例:
先輸入p
然後按『tab』
出現list清單,都是p開始的指令

(5)在jupyter notebook編輯的檔案無法讓python IDE編譯
jupyter notebook編輯的檔案是.ipynb
與python的.py不同
改善方法:只能把程式碼複製貼上,在兩個平台交流
8.其它線上雲端可編譯的python平台 8.其它線上雲端可編譯的python平台
網站:http://rep.it/languages/python3
 

 
chp7. 深度學習的常用框架
目錄 1.深度學習的常用框架 2.Keras簡介 3.PyTorch簡介 4.Mindspore簡介

1.深度學習的常用框架
(1)影片介紹:TensorFlow 還是 PyTorch?該使用哪個深度學習框架?
影片介紹:TensorFlow,PyTorch,Keras

(2)目前主流的深度學習框架:
☎TensorFlow(google公司開發)
☎Keras(目前已經被包含在TensorFlow 2內)
☎PyTorch(Facebook公司開發)
☎Mindspore(華為)

(2)每個深度學習框架的特點與用途:
☎TensorFlow:(工業界的AI產品,大都使用TensorFlow,語法不直觀,不容易學)
☎PyTorch:(學術界的論文發表,大都使用PyTorch,語法直觀,簡單易學)
☎Mindspore(華為)

(3)適合初學者的深度學習框架:
☎Keras:(簡單,容易學習,目前已經被包含在TensorFlow 2內)
☎PyTorch:(語法簡潔,容易學習,語法類似python,numpy)

(4)趨勢圖:

使用多最高的是:Pytorch, Keras

2.Keras簡介
(1)深度學習—從 Keras開始影片
Keras新手簡介影片

2-1Keras的神經網路訓練步驟
Step 1:準備訓練資料:
將資料分為訓練資料和預期輸出的標記答案

Step 2:搭建神經網路模型:
用來預測數值

Step 3:計算損失函數:
計算模型預測與答案之間的誤差

Step 4:設定優化器:
決定學習過程如何進行,常見分法有SGD、Adam、RMSprop等

Step 5:準備驗證資料和測試資料:
讓網路模型做預測,並透過指標函數來評估模型的好壞


2-2類神經網路(Neural Network)的處理流程與步驟:
☎三種快速搭建網路方式的示意圖:


(1)步驟1:建立模型(Model):
☎內容:用keras的model.add()函數,來設定類神經有幾層?設定每一層的神經元數目(units=10),以及激勵函數(activation='relu')
☎程式碼:
# 建立簡單的線性執行的模型
model = Sequential()
# Add Input layer, 隱藏層(hidden layer) 有 256個輸出變數
model.add(Dense(units=256, input_dim=784, kernel_initializer='normal', activation='relu'))
# Add output layer
model.add(Dense(units=10, kernel_initializer='normal', activation='softmax'))

(2)步驟2:確立求解的目標函數,設定求解方法:
☎內容:用keras的model.compile()函數,來定義:A.損失函數(loss)、B.優化函數(optimizer),C.成效衡量指標(mertrics)
☎程式碼:
# 編譯: 選擇損失函數、優化方法及成效衡量方式
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

(3)步驟3:用建立的模型來『訓練』已經存在的數據:
☎內容:以model.fit()函數進行訓練,必須先指定訓練的樣本資料(x, y)來源,並撥一部分資料作驗證(validation_split=0.2),還要設定訓練幾個週期(epochs=10)、訓練資料的抽樣方式。
☎程式碼:
# 進行訓練, 訓練過程會存在 train_history 變數中
train_history = model.fit(x=x_Train_norm, y=y_TrainOneHot, validation_split=0.2, epochs=10, batch_size=800, verbose=2)

(4)步驟4:『評估(Evaluation)』該模型的成效
☎內容:該模型經過訓練完後,用model.evaluate()函數,來計算成效分數,以評估模型好壞。
☎程式碼:
# 顯示訓練成果(分數)
scores = model.evaluate(x_Test_norm, y_TestOneHot)

(5)步驟5:『預測(Prediction)』新數據
☎內容::經過反覆訓練,有了可信模型後,就可以由新數據的x值,來預測對應的y值。
☎程式碼:
# 預測(prediction)
predictions = model.predict_classes(X)

(參考來源文章)

3.PyTorch簡介
(1)PyTorch簡介影片

(2)PyTorch教學資源
PyTorch官網get started
PYTORCH TUTORIALS官方教程(英文版)
PyTorch官方教程(中文版)
PyTorch community(社群)

(3)PyTorch歷史:
☎2017年初,Facebook 在 Torch的基礎上,針對 Python 語言所開發的深度學習框架 — PyTorch。
☎PyTorch 為 Facebook 在 2017 年初開源的深度學習框架,其建立在 Torch 之上,且標榜 Python First,為量身替 Python 語言所打造,使用起來就跟寫一般 Python 專案沒兩樣,也能和其他 Python 套件無痛整合。
☎PyTorch 的優勢在於其概念相當直觀,且語法簡潔優雅,因此視為新手入門的一個好選項;
☎PyTorch 的輕量架構,讓模型得以快速訓練,且有效運用資源
☎趨勢圖:


(4)PyTorch特點:
☎使用上就像 numpy、scipy 和 scikit-learn 一樣直覺,具備以下特點,因此深受研究人員和開發者的喜愛。
☎使用上比Tensorflow更容易 Debug,
☎Facebook 開源專案幾乎都是以 PyTorch 進行開發,因此可以銜接上最前沿的技術
☎自動求導,加速開發過程
☎動態計算圖結構,迭代上支援不同維度的輸入
☎易編寫新的 Layer 在 GPU 上運行
☎提供大量模組,容易組合

(5)PyTorch 函式庫
☎PyTorch 框架設計了 torch 和 torchvision 函式庫,依據資料的流動,可以用資料(Data)、模型(Model)、最佳化方法(Optimization)來概括一個深度學習模型的建立,而各個子函式庫各有職掌
☎PyTorch框架針對深度學習網路設計的函式庫


(6)torch函式庫:
☎於 PyTorch 框架中,資料類型定義為張量(Tensor),張量可以是純量、向量或是更高維度的矩陣,而 torch 函式庫負責張量在 CPU/GPU 的運算。處理張量的函式多與 numpy 套件相同,因此從事數值分析的同學們,在使用上會有些熟悉感。
☎torch.autograd:負責所有可微張量的自動求導。
☎torch.nn:建立深度神經網路的層(Layer)與模組(Module)。
☎torch.optim:定義模型的學習方針,包含最佳化方法 SGD、Adam、RMSProp 等。
☎torch.utils:包裝資料的方法及其他方便延伸操作的小工具。
☎torch.onnx:開放神經網路交換格式(ONNX)[2]實現主流框架間的模型遷移,此函式庫轉換 PyTorch 模型為通用之形式。

(7)torchvision函式庫:
☎包含兩個部分:資料前處理,模型定義。
☎torchvision.datasets:提供打包好的常用數據資料集(例如 MNIST、MS COCO、CIFAR 和 SVHN 等)。
☎torchvision.transforms:定義資料增量(Data Augmentation)與正則化(Normalization)方法。
☎torchvision.models:提供辨識模型的架構定義,以及使用 ImageNet 資料集[3]預訓練的權重檔,例如 Alexnet、VGG、ResNet、SqueezeNet、DenseNet 和 Inception v3,如此一來,能夠方便同學們實現遷移式學習(Transfer Learning),或是複製、修改某些特定的層。

(參考來源文章)

4.Mindspore簡介
(1)Mindspore簡介影片

(2)Mindspore官網

(3)Mindspore開發者論壇

(4)Mindspore簡介文章


 

 
chp8. keras簡介
目錄 1.keras簡介 2.Keras的神經網路訓練步驟 3.Keras每一步驟的指令與程式碼 4.keras提供三種快速搭建網路的方式
5.Sequential model 6.Functional API model 7.Model Subclassing 8.keras損失函數(Loss Function)的種類
9.Keras 激勵函數(Activation Function)的種類 10.Keras 優化函數(Optimizer)的種類

1

1.keras簡介
(1)Keras是一個開放原始碼,高階深度學習程式庫,使用Python編寫,能夠運行在TensorFlow或Theano之上。其主要作者維護者是Google工程師FrançoisChollet,以MIT開放原始碼授權。



以上內容節錄自這本書:TensorFlow+Keras深度學習人工智慧實務應用

2

1.Keras 是一個用來降低機器學習程式設計門檻的專案,Keras 也整合許多符合商業和研究需求的高階API。透過這些API只需要幾行程式碼就能建構和執行非常複雜的神經網路

2.Keras的神經網路訓練步驟
Step 1:準備訓練資料:
將資料分為訓練資料和預期輸出的標記答案

Step 2:搭建神經網路模型:
用來預測數值

Step 3:計算損失函數:
計算模型預測與答案之間的誤差

Step 4:設定優化器:
決定學習過程如何進行,常見分法有SGD、Adam、RMSprop等

Step 5:準備驗證資料和測試資料:
讓網路模型做預測,並透過指標函數來評估模型的好壞

3.Keras每一步驟的指令與程式碼:
(0)類神經網路(Neural Network)的處理流程與步驟:
☎三種快速搭建網路方式的示意圖:


(1)步驟1:建立模型(Model):
☎內容:用keras的model.add()函數,來設定類神經有幾層?設定每一層的神經元數目(units=10),以及激勵函數(activation='relu')
☎程式碼:
# 建立簡單的線性執行的模型
model = Sequential()
# Add Input layer, 隱藏層(hidden layer) 有 256個輸出變數
model.add(Dense(units=256, input_dim=784, kernel_initializer='normal', activation='relu'))
# Add output layer
model.add(Dense(units=10, kernel_initializer='normal', activation='softmax'))

(2)步驟2:確立求解的目標函數,設定求解方法:
☎內容:用keras的model.compile()函數,來定義:A.損失函數(loss)、B.優化函數(optimizer),C.成效衡量指標(mertrics)
☎程式碼:
# 編譯: 選擇損失函數、優化方法及成效衡量方式
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

(3)步驟3:用建立的模型來『訓練』已經存在的數據:
☎內容:以model.fit()函數進行訓練,必須先指定訓練的樣本資料(x, y)來源,並撥一部分資料作驗證(validation_split=0.2),還要設定訓練幾個週期(epochs=10)、訓練資料的抽樣方式。
☎程式碼:
# 進行訓練, 訓練過程會存在 train_history 變數中
train_history = model.fit(x=x_Train_norm, y=y_TrainOneHot, validation_split=0.2, epochs=10, batch_size=800, verbose=2)

(4)步驟4:『評估(Evaluation)』該模型的成效
☎內容:該模型經過訓練完後,用model.evaluate()函數,來計算成效分數,以評估模型好壞。
☎程式碼:
# 顯示訓練成果(分數)
scores = model.evaluate(x_Test_norm, y_TestOneHot)

(5)步驟5:『預測(Prediction)』新數據
☎內容::經過反覆訓練,有了可信模型後,就可以由新數據的x值,來預測對應的y值。
☎程式碼:
# 預測(prediction)
predictions = model.predict_classes(X)

(參考來源文章)

4.Keras的模型結構有三種方法
Keras提供三種快速搭建網路的方式:
(1)Sequential model:一層層順序執行的簡單模型,只有第一層要寫input的規格,其他層的input就是上一層的output。
(2)Functional API model:可以有多個 input 層或 output 層,結構可以有分叉,適合複雜的模型建立。
(3)Model Subclassing model:你可以透過建立一個類別來搭建一個神經網路的模板。類似PyTorch的寫法。在類別內有兩個函式,第一個是初始化的__init__類似建構子,它的功用是在呼叫類別時會幫你做變數的初始化。因此我們可以在這個函式內先設定好輸入層、隱藏藏以及輸出層。第二個函式是call這個函式是執行神經網路中的前饋(feedforward),也就是說資料會從輸入層流入隱藏層最後再流出輸出層完成一次的神經網路運算。

☎三種快速搭建網路方式的示意圖:


☎三種寫法各有優缺點使用時機也大不同,可以依據需求適當的利用上述三種建模方式。
(1)Sequential:寫法簡單明瞭適合初學者快速地搭建神經網路(Directed graph)。
(2)Functional:有技巧性的將網路包成一個函式且支援多個輸入與輸出,並且在神經網路傳遞過程中能夠動態的掌握資料流(Directed acyclic graph)。
(3)Subclassing:寫法屬於更進階,如果要包裝成產品或是自定義神經網路演算法時就建議使用這種方法

5.Sequential Model
一,Sequential mode 搭建方法簡單快速,並且可以解決大多簡單的問題,例如:手寫字辨識,房價預測或評論分類,基本上只要是回歸問題或是分類問題,都可以用sequential mode來解決,但建立有一個限制就是必須逐層搭建網路,而且網路模型必須是single input and output。

二.Sequential API:
(1)這個寫法 Keras 的用戶應該最為熟悉,我們一層一層有序的(Sequential)搭建神經網路架構。每一層你可以使用 Dense 並設定神經元個數以及 Activation 激發函數,最終變數model中就儲存了我們所設定的網路。

(2)建立Sequential model的程式片段如下:
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])

(3)五層神經網絡的結構圖:


(4)適用場合:
☎Sequential mode 搭建方法簡單快速,並且可以解決大多簡單的問題,
☎例如:手寫字辨識,房價預測,或評論分類,
☎基本上只要是『回歸問題或,是分類問題』,都可以用sequential mode來解決。

(5)限制: 建立有一個限制:就是必須逐層搭建網路,而且網路模型必須是single input and output。
(6)範例1:keras官網的教學範例:
Sequential model教學範例
(7)範例2:Sequential model神經模型
☎內容與目的:
A.輸入:為28x28的照片,將照片的2維向量拉平成784大小的一維向量
B.輸出:為大小10的一維向量(10個種類),輸出層的激活函數是Softmax
C.中間隱藏層有2層:各有64個神經元。隱藏層的激活函數是ReLU

☎網路模型示意圖:單層輸入,單層輸出(輸入層只有1層,輸出層也只有1層)


☎步驟1:匯入函數庫
import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras.utils import plot_model from IPython.display import Image
☎步驟2:建立神經網路模型(有兩種方法)
☎方法一:
#建立一個名為my_sequential的model
model = keras.Sequential(name="my_sequential")
#使用model.add可以增加一層網路到model裡面,在第一層網絡要額外定義輸入大小(input_shape)
#每一層的第一個數字,代表該層神經元數目(就是該層的輸出數目)
model.add(layers.Dense(64, activation="relu", name="layer1", input_shape=(784,)))
model.add(layers.Dense(64, activation="relu", name="layer2"))
#最後一個model.add,就是該model的輸出層
model.add(layers.Dense(10, name="layer3",activation="softmax"))

☎方法二:
#可以將所有三層網路層都放到一個list[]裡面,這個List當作tf.keras.Sequential建模的參數
#list裡面的元素順序:第一個元素是第一層(第一隱藏層,但需要定義輸入層神經元數目),中間是定義隱藏層,最後一個是定義輸出層
#注意層數:輸入層是第0層,第一隱藏層是第1層,第二隱藏層是第2層,輸出層是第3層
#而在keras建模model時,不需要建立第0層(輸入層),但第0層(輸入層)的神經元數目,要在第1層(第一隱藏層)裡面定義
# Define Sequential model with 3 layers
model = tf.keras.Sequential(
[
layers.Dense(64, activation="relu", name="layer1", input_shape=(784,)),
layers.Dense(64, activation="relu", name="layer2"),
layers.Dense(10, activation="softmax", name="layer3"),
]
)

☎步驟3:顯示網絡模型圖
#產生網絡拓撲圖
plot_model(model, to_file="model1.png")

#顯示網絡拓撲圖
Image("model1.png")
結果:


(8)神經網絡層的種類:
A.Dense層:為上下緊密連結的神經網路層
又名『全連接層』:全連接層考慮的是全局的訊息,但在分類圖像中,重要的是物體本身的局部資訊
全連接層缺點:輸入影像資料時,會先將所有 data 通過 Flatten 層拉成一維,也就是說輸入的影像會被 reshape 成一維的 tensor。我們認為圖片中的像素與其鄰近的像素有一定的關聯程度,或是在不同的channel之間也可能具有某些關連性。而這樣的做法會失去圖像特徵之間的空間資訊
B.Conv2d層(卷積層,Convolution Layer):卷積層的用意是來提取圖片中的特徵(feature) 包括:一維(Conv1D)、二維(Conv2D)、三維(Conv3D),分別處理時序資料、2D 圖形及每一點含其他資訊的2D 圖形
C.Flatten層(扁平層,平坦層,Flatten Layer):把多維的輸入壓扁為一維輸出,常用在從卷積層到全連接層的過渡,無參數
D.池化層 (Pooling Layer)
E.Dense層(全連接層):搭建『全連接層』的指令

6.Functional API model:
(1)此寫法利用函式自定義模型並提供了更靈活的方法。每一層的輸入即為上一層的輸出。這種方法可以更彈性的設定每一層的 input,或是可以自由的修改神經網路的資料流。

(2)建立Functional API model的程式片段如下:
# 建立模型
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Model
InputTensor = tf.keras.Input(shape=(100,))
H1 = Dense(10, activation='relu')(InputTensor)
H2 = Dense(20, activation='relu')(H1)
Output = Dense(1, activation='softmax')(H2)
model_API = Model(inputs=InputTensor, outputs=Output)
model_API.summary()
from keras.utils import plot_model
tf.keras.utils.plot_model(model_API, to_file='Functional_API_model.png')
])

(3)四層神經網絡的結構圖:


7.Model Subclassing:
(1)可以透過建立一個類別來搭建一個神經網路的模板。
可發現在類別內有兩個函式:
A.第一個是初始化的__init__類似建構子,它的功用是在呼叫類別時會幫你做變數的初始化。因此我們可以在這個函式內先設定好輸入層、隱藏藏以及輸出層。
B.第二個函式是call這個函式是執行神經網路中的前饋(feedforward),也就是說資料會從輸入層流入隱藏層最後再流出輸出層完成一次的神經網路運算

(2)建立Model Subclassing的程式片段如下:
from tensorflow import keras
from tensorflow.keras import layers

class network(keras.Model):
def __init__(self):
super(network,self).__init__()
self.layer_1 = layers.Dense(8 , activation='relu')
self.layer_2 = layers.Dense(16 , activation='relu')
self.output_layer = layers.Dense(3 , activation='softmax')

def call(self,x):
x_1 = self.layer_1(x)
x_2 = self.layer_2(x_1)
predict = self.output_layer(x_2)
return predict

(3)呼叫類別的方式:model = network()

8.Keras 損失函數(Loss Function)的種類:
(1)建立模型後的目標:
keras建立模型後,要開始求解目標函數,模型的目標乃是下午預測與實際的數據之間的誤差越來越小,所以目標函數,就是算損失函數(loss function)。

(2)keras常用的損失函數,有以下幾種:

(2-1)均方誤差(mean_squared_error):也就是最小平方法(Least Square)
☎目標函數 = mean_squared_error = 均方誤差函數 = 預測值與實際值的差距之平均值。

☎範例:model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics
☎其他相關的改良版目標函數:mean_absolute_error、mean_absolute_percentage_error、mean_squared_logarithmic_error。

(2-2)Hinge Error (hinge):
☎說明:這是一種單邊誤差,不考慮負值,適用於『支援向量機』(SVM)的最大間隔分類法(maximum-margin classification)
☎目標函數 = hinge
☎範例:model.compile(loss='hinge', optimizer='adam', metrics=['accuracy'])

(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics
☎其他相關的改良版目標函數:squared_hinge、categorical_hinge

(2-3)Cross Entropy (categorical_crossentropy):
☎說明:當預測值與實際值愈相近,損失函數就愈小,反之差距很大,就會更影響損失函數的值
☎目標函數 = categorical_crossentropy

☎範例:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics
☎其他相關的改良版目標函數:sparse_categorical_crossentropy、binary_crossentropy

(2-4)其它目標函數:
☎目標函數 =logcosh、kullback_leibler_divergence、poisson、cosine_proximity
☎範例:model.compile(loss='logcosh', optimizer='adam', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(參考來源文章)

9.Keras 激勵函數(Activation Function)的種類:
(1)激勵函數(Activation Function)的功能:
A.可提供非線性函數的轉換
B.是一種門檻(Threshold)的過濾,例如,sigmoid,將預測值(W * X) 轉為 [0,1] 之間,只有預測值大於0,才會傳導至下一層的神經元

(2)keras常用的激勵函數(Activation Function),有以下幾種:

(2-1)softmax函數:
☎說明:這個函數的值介於 [0,1] 之間,且機率總和等於 1,所以適合多分類使用
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='softmax'))


(2-2)sigmoid函數:
☎sigmoid:值介於 [0,1] 之間,且分布兩極化,大部分不是 0,就是 1,適合二分法。
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='sigmoid'))



(2-3)Relu函數:
☎說明:Relu (Rectified Linear Units):忽略負值,介於 [0,∞] 之間
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='Relu'))


(2-4)tanh函數:
☎tanh:與sigmoid類似,但值介於[-1,1]之間,即傳導有負值
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='tanh'))



(參考來源文章)

10.Keras 優化函數(Optimizer)的種類:
(1)優化函數(Optimizer)的功能:
A.類神經網絡在求解過程中,需要不斷調整參數(w,b)來讓誤差函數的值最小,故需要在各種參數組合中找出最佳的一組參數,這個過程稱為最佳化過程(optiomization process)
B.優化函數(Optimizer),就是讓模型找出最佳參數的方法,能讓誤差值最小
C.有各種各樣的優化函數(Optimizer)可以使用
D.梯度法是常用找出最佳參數的方法,包括多種梯度法可以選擇:最速下降梯度,牛頓(newton's method),隨機梯度下降法(SGD:stochastic gradient descent)

(2)優化函數(Optimizer)的種類:
A.種類:在keras有多種優化函數(Optimizer):Adam,SGD,RMSprop,Adagrad,Adadelta,Adam 等
B.梯度下降最常見種類:梯度下降最常見的三種變形:BGD,SGD,MBGD
C.各種優化函數(Optimizer)的效率比較圖:


(3)keras常用的優化函數(Optimizer),有以下幾種:

(3-1)梯度下降法的分類:
從訓練樣本數量的角度來看,梯度下降法可分爲三種
(3-1-a)批量梯度下降(BGD):
☎說明:這個函數乃是在整個訓練集上,計算損失函數對於參數的梯度
☎優點:(1)疊代次數少;(2)若損失函數爲凸函數,能夠保證收斂到全局最優解;若爲非凸函數,能夠收斂到局部最優值(結果的準確度)。
☎缺點:(1)速度很慢;(2)對內存資源要求高;(3)不能在線學習,即無法在訓練過程中增加新的樣本。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='bgd', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-1-b)隨機梯度下降(Stochastic Gradient Descent, SGD):
☎說明:隨機梯度下降法:乃是利用偏微分,逐步按著下降的方向,尋找最佳解。
☎它包括以下參數:
(A)Learning Rate (lr):逼近最佳解的學習速率,速率訂的太小,計算最佳解的時間花費較長,訂的太大,可能會在最佳解兩旁擺盪,找不到最佳解。
(B)momentum:更新的動能,一開始學習速率可以大一點,接近最佳解時,學習速率步幅就要小一點,一般訂為0.5,不要那麼大時,可改為 0.9。
(C)decay:每次更新後,學習速率隨之衰減的比率。
☎優點:(1)訓練速度快;(2)支持在線更新;(3)有機率跳出局部最優解。
☎缺點:(1)容易收斂到局部最優,並且容易被困在鞍點;(2)疊代次數多。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-1-c)小批量梯度下降(MBGD):
☎說明:在每次更新時使用n個小批量訓練樣本
☎優點:(1)減少參數更新的方差,可以得到更加穩定的收斂結果;(2)通過矩陣優化方法可以高效地求解每個小批量數據的梯度。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='mbgd', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-2)梯度下降優化算法:
從梯度下降優化算法一般分爲兩種:
☎(1)固定學習率的方法(SGD,Momentum,NAG)
☎(2)學習率自適應的方法(Adagrad,Adadelta,RMSprop,Adam,AdaMax,Nadam)

(3-3)固定學習率的方法(SGD,Momentum,NAG)
(3-3-a)SGD:
☎說明:這是最初始的梯度下降算法
☎範例:model.compile(loss='categorical_crossentropy', optimizer='SGD', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-3-b)Momentum:
☎說明:Momentum旨在加速學習,特別是處理高曲率或帶噪音的梯度。Momentum算法會觀 察歷史梯度(動量),若當前梯度的方向與歷史梯度一致(表明當前樣本不太可能爲異常點),則會增強這個方向的梯度,若當前梯度與歷史梯方向不一致,則梯度會衰減。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='Momentum', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-4)自適應學習率(Adagrad,Adadelta,RMSprop,Adam,AdaMax,Nadam)
(**建議使用這個)

(3-4-a)Adagrad:
☎說明:通過記錄每次疊代過程中的前進方向和距離,從而使得針對不同問題,有一套自適應調整學習率的方法,對於出現頻率較低參數採用較大的α更新;相反,對於出現頻率較高的參數採用較小的α更新。非常適合處理稀疏數據,極大提高了SGD的魯棒性,但是存在學習率單調遞減以至於最終會接近無限小的問題
☎範例:model.compile(loss='categorical_crossentropy', optimizer='Adagrad', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-4-b)Adadelta:
☎說明:在一個窗口期內中對梯度進行求和,而不是對梯度一直累加。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='Adadelta', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-4-c)RMSprop:
☎說明:Adagrad會累加之前所有的梯度平方,而RMSprop僅僅是計算對應的平均值,因此可緩解Adagrad算法學習率下降較快的問題。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='RMSprop', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-4-d)Adam(**建議使用這個):
☎說明:以SGD作爲最初的算法,Momentum在其基礎上加入了一階動量(歷史梯度的累計),AdaGrad和RMSProp在其基礎上加入了二階動量(歷史梯度的平方累計),Adam就是結合了一階動量和二階動量算法。
☎說明:Adam:一般而言,比SGD模型訓練成本較低,請參考『Adam - A Method for Stochastic Optimization』,
☎Adam包含下參數,與建議值範圍:
lr:逼近最佳解的學習速率,預設值為0.001。
beta_1:一階矩估計的指數衰減因子,預設值為0.9。
beta_2:二階矩估計的指數衰減因子,預設值為0.999。
epsilon:為一大於但接近 0 的數,放在分母,避免產生除以 0 的錯誤,預設值為1e-08。
decay:每次更新後,學習速率隨之衰減的比率。

☎範例:model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-5-e)AdaMax:
☎說明:基於無窮範數的Adam方法的變體。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='AdaMax', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(3-6-f)Nadam:
☎說明:Nadam = Adam + NAG。
☎範例:model.compile(loss='categorical_crossentropy', optimizer='Nadam', metrics=['accuracy'])
(# 編譯模型:設定:選擇損失函數loss、優化方法optimizer,成效衡量方式metrics

(4)keras常用的優化函數(Optimizer) vs 對應的梯度下降演算法:


(5)如何選擇哪一種優化函數(Optimizer)?
(5-1)如果數據是稀疏的,
建議選用『自適應方法』:即Adagrad, Adadelta, RMSprop, Adam。RMSprop, Adadelta, Adam
☎在很多情況下的效果是相似的,
☎隨著梯度變的稀疏,Adam 比 RMSprop 效果會好。
☎整體來講,Adam 是最好的選擇。

(5-2)現在很多論文裡都會使用不加momentum 的 SGD。
☎SGD 雖然在一大多數情況下都能達到極小值,但是比其它算法用的時間長且依賴於魯棒的初始化和退火策略,
☎另外SGD可能會被困在鞍點而無法逃脫。

(5-3)所以,如果需要更快的收斂,或者是訓練更深更複雜的神經網絡,建議選用『自適應的學習率』的方法。

(參考來源文章1)(參考來源文章2)

 

 
chp9. 由keras的4個範例(簡易版)來認識人工智慧
目錄 1.TensorFlow官網的教學範例1:用1層神經網絡來做迴歸分析 2.TensorFlow官網的教學範例2:基本神經網絡深度學習模型 3.TensorFlow官網的教學範例3:卷積神經網絡模型 4.TensorFlow官網的教學範例4:識別剪刀石頭布Rock,Paper,Scissors

1.從一個範例來認識人工智慧(TensorFlow官網的教學範例1):用1層神經網絡來做迴歸分析
☎人工智慧的最常見用途:分類,迴歸
☎目的:從一堆xy對應數據,找出迴歸線(歸納找出趨勢)
☎參考教學影片:教學影片(中文)
教學影片(英文)
(1)如何找出輸入x,與輸出y的關係(迴歸法,分類法,類神經網路法)


(2)TensorFlow官網的教學文件1:
TensorFlow官網的教學範例1:找出數據的趨勢線

(9-1-1)練習範例(1):學習線性趨勢線(直線),預測x=10的y值?
數據點:
xs = [-1.0, 0.0, 1.0, 2.0, 3.0, 4.0]
ys = [-3.0, -1.0, 1.0, 3.0, 5.0, 7.0]
☎題目:找出這堆數據的迴歸(歸納找出趨勢線):

☎執行類神經網路的求解步驟示意圖:

☎方法:使用神經網絡模型,單層神經,一個神經元units=1
#建立1層神經網絡
☎成果:
成果圖片
程式碼
專案成果檔案.py專案成果檔案.ipynb

(4)補充觀念:python的副檔名有兩種:.py 或 .ipynb
A.用Python語言編寫的原始碼檔案,其檔案字尾是 「.py」 或 「.ipynb」。用Python語言編寫的原始碼檔案,其檔案字尾是 「.py」 或 「.ipynb」。
B.「.py」檔案:是標準的Python原始碼檔案,可以用Spyder、Visual Studio Code、PyCharm編輯並執行.py檔案。也可以用notepad++或者sublime免費的編輯器進行.py檔案的編輯。
C.「.ipynb」檔案:是使用 Jupyter Notebook 來編寫Python程式時的檔案

(9-1-2)練習範例(2):學習線性趨勢線(直線),畫出數據點與預測點
數據點:
xs = [-1.0, 0.0, 1.0, 2.0, 3.0, 4.0]
ys = [-3.0, -1.0, 1.0, 3.0, 5.0, 7.0]

AI的7步驟流程程式碼解答


(9-1-3)練習範例(3):學習非線性趨勢線(雙曲線),預測x=1.0的y值,畫出數據點與預測點
數據點:
xs = [-0.5, -0.44736842, -0.39473684, -0.34210526, -0.28947368, -0.23684211, -0.18421053, -0.13157895, -0.07894737, -0.02631579, 0.02631579, 0.07894737, 0.13157895, 0.18421053, 0.23684211, 0.28947368, 0.34210526, 0.39473684, 0.44736842, 0.5]
ys = [0.24595018, 0.19992016, 0.11848622, 0.09924376, 0.08173275, 0.0596075, 0.02737021, 0.01544445, 0.02764277, 0.00527432,-0.00814974,-0.01725386, 0.0489, 0.02935983, 0.04428556, 0.08552249, 0.12389014, 0.15113714, 0.20734122, 0.23009059]

☎注意:每一層的激勵函數activation="relu"
☎注意:優化函數optimizer = Adam()
☎可以成功執行的神經層(6,4,4,4,1)
☎可以成功執行的神經層(8,4,4,4,1)
☎可以成功執行的神經層(10,8,8,8,1)

AI的7步驟流程程式碼解答


(9-1-4)練習範例(4):學習非線性趨勢線(拋物線),預測x=12的y值,畫出數據點與預測點
數據點:
xs = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
ys = [0.105, 0.105, 0.148, 0.210, 0.349, 0.540, 0.840, 1.251, 1.799, 2.483]

☎注意:每一層的激勵函數activation="relu"
☎注意:優化函數optimizer = Adam()
☎可以成功執行的神經層(6,4,4,4,1),epochs=1000
☎可以成功執行的神經層(10,8,8,8,1),epochs=1000
☎可以成功執行的神經層(12,8,8,8,8,8,8,8,1)

AI的7步驟流程程式碼解答



2.TensorFlow官網的教學範例2:基本神經網絡深度學習模型
☎人工智慧的最常見用途:分類,迴歸
☎目的:如何由鞋子圖片,自動識別是什麼鞋子款式編號
☎參考教學影片:教學影片(中文)
教學影片(英文)
(1)如何由鞋子圖片,自動識別是什麼鞋子款式

(2)TensorFlow官網的教學文件2:
TensorFlow官網的教學範例2:識別鞋子
官網教學: Classify images of clothing

(3)練習範例:
☎題目:如何由鞋子圖片,自動識別是什麼鞋子款式:

☎鞋子圖片來源:讀取鞋子資料集dataset(tensorflow裡面已經內建有fashion_mnist的資料集)
鞋子資料集(fashion_mnist),裡面的鞋子種類有10類,圖片有7萬張(每一類鞋子有7千張),每張圖片28x28像素
☎指令:mnist = tf.keras.datasets.fashion_mnist


☎執行類神經網路的求解步驟示意圖:

☎成果:
成果圖片成果圖片
程式碼
專案成果檔案.py專案成果檔案.ipynb
☎預測結果:


(4)注意:這個範例的鞋子圖片都是規律的(28x28,灰階,鞋子都在圖片正中央)
A.如果:圖片是像普通的照片,物體不規律(物體在邊角,多物體混雜....),本方法就無法正確的學習與預測
B.不規律的圖片,必須用辨別特徵的類神經方法:卷積神經法

3.TensorFlow官網的教學範例3:卷積神經網絡模型的簡介(Introduction to Convolutions)
☎人工智慧的最常見用途:分類,迴歸
☎目的:簡介卷積神經網絡(Introduction to Convolutions),識別不規律圖片的特徵
(1)參考教學影片:教學影片(中文)
教學影片(英文)

(2)TensorFlow官網的教學文件3: Learn Tensorflow 3: Introduction to Convolutions
TensorFlow官網的教學範例2:識別鞋子

(3)如何識別混雜一起的鞋子圖片:
方法:必須使用卷積神經網絡


(4)卷積神經網絡的原理:
A必須先把圖像『過濾』(過濾的功用:可以凸顯圖像的特徵)
B然後再進行『深度學習』

(5)什麼是過濾器:
☎過濾器就是『乘法器』
例如:紅色3x3矩陣就是乘法器,
使用方法:每一個像素點(例如192)x過濾器=新的數值

圖片每個像素被過濾後,就會凸顯出特徵了(如下圖)
效果1:這個過濾器可以塗掉大部分的像素,只留下豎直的線條特徵

效果2:若要圖片經過第二個過濾器的過濾,就可以只留下水平的線條特徵


(6)什麼是最大池化(max pooling):
A.把4x4像素,分解成4個2x2的子項目,
B.然後找出每個子項目(2x2)的最大值
C.於是把原本的4x4像素 → 池化(pooling) → 找出局部最大值 → 簡化成 2x2像素
D.把原本圖像縮小成1/4(但卻可以保留所有的特徵點)

E.經過『過濾+最大池化max pooling』轉化後的示意圖:(不但保留原本圖片特徵,還壓縮圖檔大小)
(換言之,圖片檔案size縮小了,卻還能夠清楚辨識


(7)如何才能得到最佳的『過濾器』:
觀念:卷積神經網絡會自動產生過濾器
A.圖片輸入後,傳送到卷積神經層
B.『卷積神經層』會自動產生『過濾器』,並將過濾器覆蓋到每個圖片的像素上
C.再傳到下一層,進行深度學習計算
D.學習計算後,過濾器會把最好的結果記錄下來(特徵提取)
E.所以『過濾器』是被『卷積神經層』反复學習計算後所自動得到的參數,不是人為設定的


(8)卷積神經層透過『過濾器』所『特徵提取』的結果圖:
A.第一列就是結果卷積神經『特徵提取』的結果:看到『鞋底』的特徵,看到『鞋子外圍輪廓』的特徵


(8)下列影片演示了卷積神經網路運作之原理 :
(1).How Convolutional Neural Networks work

(2).How Deep Neural Networks Work(youtube 影片)


(9)卷積神經層產生『過濾器』的程式碼:
A.第1層(卷積神經層),會產生64個過濾器,輸入向量是28x28
B.這64個過濾器,卷積神經層會自動反复學習,得到最佳的參數解(就類似深度學習的方法)
C.MaxPooling2D(2, 2)乃是執行最大池化壓縮圖片檔案大小,但保留特徵
model = tf.keras.models.Sequential([
# Note the input shape is the desired size of the image 28x28 with 1 bytes color
# This is the first convolution
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D(2, 2),
# Flatten the results to feed into a DNN
tf.keras.layers.Flatten(),
# 128 neuron hidden layer
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')



(9)多個卷積神經層反复過濾,壓縮的程式碼:
A.多個卷積神經層反复過濾,壓縮,就可以提取出多種特徵
B.優點:
☎前一個範例(一般神經網絡),是根據『像素』來進行學習
☎這個範例(卷積神經層),卷積神經網絡可以根據『像素,特徵』來進行學習
C.例如:神經網絡看到『兩個袖子』的特徵,就可以判斷這個是『襯衣,短袖』,而不是鞋子
看到『鞋底,鞋帶』,就可以判斷這是『短靴,雨鞋』,而不是襯衣
model = tf.keras.models.Sequential([
# Note the input shape is the desired size of the image 28x28 with 1 bytes color
# This is the first convolution
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D(2, 2),
# The second convolution tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), # The third convolution tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), # The fourth convolution tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), # Flatten the results to feed into a DNN
tf.keras.layers.Flatten(),
# 128 neuron hidden layer
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')


☎執行類神經網路的求解步驟示意圖:


(10)資料來源(fashion_mnist資料集)
☎鞋子衣服圖片來源:讀取鞋子衣服資料集dataset(tensorflow裡面已經內建有fashion_mnist的資料集)
☎鞋子衣服資料集(fashion_mnist),裡面的樣式種類有10類,圖片有7萬張(每一類鞋子有7千張),每張圖片28x28像素
☎指令:mnist = tf.keras.datasets.fashion_mnist

(11)成果:



程式碼
專案成果檔案.py專案成果檔案.ipynb


4.TensorFlow官網的教學範例4:識別剪刀石頭布Rock,Paper,Scissors
☎人工智慧的最常見用途:分類,迴歸
☎目的:如何由鞋子圖片,自動識別是什麼鞋子款式編號
☎參考教學影片:教學影片(中文)
教學影片(英文)
(1)自動識別識別剪刀石頭布

(2)TensorFlow官網的教學文件4: Learn Tensorflow 4: Build an image classifier
TensorFlow官網的教學範例4:識別剪刀石頭布Rock,Paper,Scissors
Build convolutional neural networks (CNNs) to enhance computer vision

(3)下載『剪刀石頭布』的資料集(Rock, paper, scissors dataset )

(4)練習範例:
☎題目:自動識別識別剪刀石頭布

(4-1)如何下載數據檔案
#1-1:訓練所需的數據
!wget --no-check-certificate \
https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps.zip \
-O /tmp/rps.zip
#1-2:測試與驗證所需的數據
!wget --no-check-certificate \
https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps-test-set.zip \
-O /tmp/rps-test-set.zip

(4-2)如何解壓缩下載的檔案
☎解壓縮到程式碼:
import os
import zipfile

local_zip = '/tmp/rps.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp/')
zip_ref.close()

local_zip = '/tmp/rps-test-set.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp/')
zip_ref.close()
☎解壓縮產生的目錄:images-Training-Rock, Paper, Scissors
☎並且會幫你自動把圖片編號

☎注意:解壓縮後,所產生的訓練用圖檔為train_generator,測試用圖檔為validation_generator

(4-3)使用卷積神經網絡建立深度學習模型:
☎為什麼要建立4層的卷積神經層:因為數據較複雜(圖片比較大(150x150),顏色比較多(黑人,白人,黃種人))
model = tf.keras.models.Sequential([
# Note the input shape is the desired size of the image 150x150 with 3 bytes color
# This is the first convolution
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
# The second convolution
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
# The third convolution
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
# The fourth convolution
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
# Flatten the results to feed into a DNN
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
# 512 neuron hidden layer
tf.keras.layers.Dense(512, activation='relu'),
#最後輸出成:1層,三個神經元的網絡(輸出的答案有三種)
tf.keras.layers.Dense(3, activation='softmax')
])

(4-4)如何由自己電腦上傳圖片,進行測試
#測試上傳的圖片,看看預測結果是否正確(布,石頭,剪刀)
#例如:布=(1,0,0),石頭=(0,1,0),剪刀=(0,0,1)
import numpy as np
from google.colab import files
from keras.preprocessing import image
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
path = fn
img = image.load_img(path, target_size=(150, 150))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

images = np.vstack([x])
classes = model.predict(images, batch_size=10)
print("這個照片是:",fn)
print("識別這個照片是:",classes)
print("布=(1,0,0),石頭=(0,1,0),剪刀=(0,0,1)")

(4-5)成果:





下載測試用的布石頭剪刀的圖片
卷積神經網絡程式碼上傳圖片程式碼
專案成果檔案.py專案成果檔案.ipynb
☎預測結果:



 

 
chp10. keras多層感知器(MLP)
目錄 1.什麼是多層感知機 Multilayer perceptron, MLP 2.神經網絡隱藏層的神經元要設定多少 3.深度學習神經網絡的運作核心原理:找出最佳的參數(權重值w) 4.神經網絡的訓練每次迴圈的三步驟:前向傳遞,評估損失,反向傳遞
5.訓練迴圈是否越多越好:過度擬合/低度擬合(Overfit/underfit) 6.為什麼深度學習的神經元要用激勵函數/啟動函數/Activation 7.該使用哪一種激勵函數/Activation function? 8.該使用哪一種損失函數/Loss function?
9.樣本與標籤(samples/labels) 10.樣本要做哪些預處理 11.樣本的正規化與標準化(Normalization/Standardization) 12.樣本要切割成三份:『訓練用,驗證用,測試用』樣本
13.迴圈的設定:訓練週期Epochs,批次Batch,批次尺寸Batch Size,迭代數Iterations 14.Keras常用的2種深度學習模型models 15.常用的3種神經網絡類型types:MLP,CNN,RNN 範例10-1:基本圖片分類:Basic classification: Classify images of clothing

1.感知器(perceptron):就是神經元(neuron)

2.單一感知機的缺點:無法處理『線性不可分』的問題(就是無法用一條線就進行分類)


3.多層感知機:可以處理『線性不可分』的問題


4.什麼是多層感知機 Multilayer perceptron, MLP
(1)MLP在以前就有了,不是因為深度學習網路模型之後才有的。
(2)MLP:其實就是類神經網路。
(3)MLP的傳統定義:MLP多層感知機是一種前向傳遞類神經網路,至少包含三層結構(輸入層、隱藏層和輸出層),並且利用到「倒傳遞」的技術達到學習(model learning)的監督式學習
(4)由現代深度學習DNN的視角來看MLP:MLP多層感知機是深度神經網路(deep neural network, DNN)的一種特殊案例special case,
☎換言之,MLP與DNN,其基本概念是一樣的,
☎DNN只是在學習過程中,多了一些手法,和更多的層數。
☎三層結構MLP示意圖:
(5)四層以上MLP:就是深度學習神經網路(輸入層,第1隱藏層,第2隱藏層,輸出層)


5.多層感知機MLP,就是類神經網絡模型(深度學習)的基本款
☎所以,若要學習類神經網絡模型(深度學習),就要從基本款開始學。
☎所以,深度學習的入門,就從『多層感知機MLP』開始

6.密集神經層Dense layer:
上圖的每一層神經元都會連接到下一層的每個神經元頂點
(1)這種稱為『全連接, Full Connectd』
(2)這種神經層稱為『密集層, Dense layer』


6.建構神經網絡的一個重要問題:隱藏層的神經元要設定多少?
(1)沒有標準答案,只有參考準則
(2)隱藏層的神經元數量:介於輸入層,與輸出層之間
(3)隱藏層的神經元數量:小於2倍輸入層
(4)隱藏層的神經元數量:可以是,(2/3輸入層+輸出層)神經元數量

7.深度學習神經網絡的幾何物理意義:
(1)若隱藏層有2個神經元:y=f(x),是一個平面坐標轉換
(2)若隱藏層有3個神經元:y=f(x),是一個3D空間坐標轉換


8.深度學習神經網絡的運作核心原理:找出最佳的參數(權重值w)

8-1.深度學習神經網絡的運作原理:
(1)深度學習,是在學習什麼呢?
☎神經網絡模型能夠找到最佳解的關鍵:就是能夠經由學習,找出最佳的調整權重值w
(2)所以,整個神經網絡模型的核心關鍵:就是在不斷的測試『調整權重值w』,來降低誤差值(loss function損失函數)
(3)調整神經網絡模型的參數:參數就是『權重值w,偏差值b』
(4)一旦計算出誤差值(loss function損失函數)後,就可以經由『優化器optimizer』來調整更新權重值w

影片教學:深度学习基础课程07 - 神经网络的损失函数 loss function

8-2.基本的人工神經元的組成: (Components of the basic Artificial Neuron:)
1. Inputs: Inputs are the set of values for which we need to predict the output value. They can be viewed as features or attributes in a dataset.
輸入 :輸入是我們需要為其預測輸出值的一組值。 可以將它們視為資料集中的要素或屬性。

2. Weights: weights are the real values that are associated with each feature which tells the importance of that feature in predicting the final value. (we will know more about in this article)
權重:權重是與每個要素關聯的實際值,表明了該要素在預測最終值中的重要性。 (我們將在本文中瞭解更多資訊)

3. Bias: Bias is used for shifting the activation function towards left or right, it can be referred to as a y-intercept in the line equation. (we will know more about this in this article)
偏差:偏差用於將啟動函數向左或向右移動,在線性方程式中可以稱為y截距。 (我們將在本文中對此有更多瞭解)

4. Summation Function: The work of the summation function is to bind the weights and inputs together and find their sum.
求和函數:求和函數的作用是將權重和輸入綁定在一起,以求和。

5. Activation Function: It is used to introduce non-linearity in the model.
激勵函數(啟動函數):用於在模型中引入非線性。



10.神經網絡的訓練每次迴圈的三步驟:前向傳遞,評估損失,反向傳遞

10-1.深度學習神經網絡的訓練迴圈:
(1)要讓神經網絡模型,不斷學習,不斷調整這些參數(權重值w,偏差值b),不是只做一次
☎所以整個神經網絡的訓練學習,都是圍繞著調整『權重值w』,這是整個深度學習的關鍵核心探討主題所在
☎深度學習:就是在學習如何『調整權重值w』

(2)而是要做很多次(迴圈Loop),也稱為迭代iteation

(3)神經網絡的訓練迴圈的三步驟(三階段):
☎前向傳遞 (Forward propagation):輸入層到隱藏層
☎評估損失 (Estimate Loss):一般來說都是用誤差均方和(mean square error)當作目標函數
☎反向傳遞 (Backward propagation):輸出層到隱藏層




10-2.keras深度學習訓練迴圈的5個step:
(1)step1:一開始,使用亂數設定random,設定每一神經元的權重值w
(2)step2:使用前向傳遞 (Forward propagation)法,計算預測值y
☎y=f(wx+b)
f是激勵函數
w是權重值,b是偏差值
y是預測值,x是輸入值
☎注意:因為訓練的資料集很大,不太可能一次全部計算,而是採用小量分批(Batch)的方式,每一批次的樣本數稱為Batch size
(3)step3:計算損失函數(目標函數,就是預測值與正確值的誤差)
(4)step4:反向傳遞 (Backward propagation),更新權重值w
☎反向計算(由輸出層->隱藏層),使用偏微分方法,計算每一層權重值w的梯度(grdient)
(5)step5:使用『梯度下降法,Gradient Descent』更新權重值w,然後重複step2~5,不斷迭代迴圈計算(iteration,loop)
☎注意:做一次step2~step5,稱為一個訓練週期(Epoch)



11.訓練迴圈次數是否越多越好:過度擬合/低度擬合(Overfit/underfit)
(1)訓練迴圈是否越多越好?
☎不是
☎訓練迴圈次數太少,造成預測失真(低度擬合/underfit)
☎訓練迴圈次數剛剛好,造成預測最接近正確解(最佳解/Optimum)
☎訓練迴圈次數太多,造成預測失真(過度擬合/Overfit)



(2)過度學習(訓練迴圈太多)的缺點
☎如果過度學習(訓練迴圈太多),就會造成模型缺少『泛化性,Generalization』
☎『泛化性』:對於沒有學習過的資料來源/圖片,也能成功地預測出正確答案
☎訓練迴圈太多➜過度學習➜缺少『泛化性』➜對於沒有見過的數據,預測率很低


12.為什麼深度學習的神經元要用激勵函數/啟動函數/Activation
☎使用激勵函數的目的:讓神經網絡模型可以處理『非線性的資料轉換』

(1)沒有使用激勵函數/Activation的神經網絡模型:
☎神經網絡模型的每個神經元,都是由前一層神經元輸入值×權重值w的總和summation(Σ,sigma)


☎因為是計算summation,所以是線性組合,所以轉換後,y=f(x)也是個線性函數,
☎y=f(x)是線性函數,最後就只能夠處理線性問題

(2)若使用激勵函數/Activation function的神經網絡模型:
☎因為激勵函數/Activation function是一種非線性函數,就可以把原本summation的線性關係,轉換成『非線性關係』


☎y=Activation(f(x)),可以把線性函數轉換成:非線性問題(就像把原本的一條直線,變成曲線了)
☎激勵函數/Activation function,可以把原本只能擬合『直線』問題,變成,可以擬合『曲線』問題了


13.該使用哪一種:激勵函數/Activation function?

(1)傳統『單一感知器』使用的激勵函數/Activation function是什麼
☎傳統使用『階梯函數/step function』


(2)現代『MLP,深度學習神經網絡』使用的激勵函數/Activation function是什麼
4-1:在隱藏層:最常使用『ReLU函數』
4-2:在輸出層:最常使用『sigmoid函數,tanh函數,softmax函數』
☎二元分類問題:使用『sigmoid函數,tanh函數』
☎多元分類問題:使用『softmax函數』

(3)輸出層的激勵函數:
(3-1)sigmoid函數:
☎sigmoid:值介於 [0,1] 之間,且分布兩極化,大部分不是 0,就是 1,適合二分法。
☎sigmoid的缺點:sigmoid函數的微分,會讓在反向傳播過程,只需要3~5層的summation後,就讓梯度=0,造成梯度消失問題。
這種會讓反向傳播過程中,梯度消失的問題,讓sigmoid函數不適合放在隱藏層,只能放在輸出層。
所以,這是為什麼在隱藏層,一般都用ReLU函數。
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='sigmoid'))



(3-2)tanh函數:
☎tanh:與sigmoid類似,但值介於[-1,1]之間,即傳導有負值
☎tanh函數的優點:雙曲函數是一種三角函數,對於神經網絡模型而言,它的優點是若有處理負值。
注意:sigmoid函數,與ReLU函數,都沒有負值
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='tanh'))



(3-3)softmax函數:
☎說明:這個函數的值介於 [0,1] 之間,且機率總和等於 1,所以適合多分類使用
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='softmax'))



(4)隱藏層的激勵函數:
(4-1)ReLU函數:
☎說明:ReLU (Rectified Linear Units):忽略負值,介於 [0,∞] 之間
☎ReLU的重要性:深度學習能夠重新被重視,重新引領風潮,就是因為當初AlexNet神經網絡,使用ReLU函數取代sigmoid函數,讓模型對圖片的識別率提高了15%。
所以ReLU函數非常重要,尤其在隱藏層,尤其是對圖片的識別
☎ReLU在>0區域的微分=1,不會有sigmoid函數的梯度消失問題:
☎範例:model.add(Dense(units=10, kernel_initializer='normal', activation='Relu'))




13.該使用哪一種損失函數/Loss function?

(13-1)損失函數/Loss function是什麼
☎深度學習的目標函數object function,就是損失函數/Loss function
☎損失函數/Loss function:計算『預測值』與『真實值』之間的差距
☎所以,損失函數是一個『非負值』
☎代表意義:損失函數越小,表示深度學習模型越正確,能夠精準預測

(13-2)該使用哪一種損失函數/Loss function?
☎分類問題:使用『交叉熵函數,Cross Entropy (categorical_crossentropy)函數』
☎迴歸問題:使用『均方誤差函數,mean square error(mean_squared_error)』

(13-3)均方誤差函數(mean_squared_error):也就是最小平方法(Least Square)
☎目標函數 = mean_squared_error = 均方誤差函數 = 預測值與實際值的差距之平均值。

☎範例:model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

(13-4)交叉熵函數Cross Entropy (categorical_crossentropy):
☎說明:當預測值與實際值愈相近,損失函數就愈小,反之差距很大,就會更影響損失函數的值
☎目標函數 = categorical_crossentropy

☎範例:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
☎說明:『交叉熵』函數乃是使用『資訊熵』來評估兩組機率向量之間的差異程度,當交叉熵越小,則表示兩組機率向量間的差異越接近。
☎說明:所以若『交叉熵』越小,就表示越接近目標值。
☎因此:可以把『交叉熵』函數,當作評估神經網絡模型的目標object。

(13-5)什麼是『資訊熵』(Information Entropy)?
☎功用:『資訊熵』主要是用來評估『資訊混亂的程度』
☎若『資訊熵』越小:表示資訊確定,不混亂
☎若『資訊熵』越大:表示資訊不確定,混亂




14.什麼是樣本與標籤(samples/labels)

(14-1)什麼是樣本與標籤(samples/labels)
☎樣本samples:就是神經網絡模型所輸入的資料集dataset
☎標籤labels:就是每個『樣本』,所對應的『目標值/答案』
☎注意:樣本與標籤(samples/labels)都是張量/向量/陣列

(13-2)該使用哪一種損失函數/Loss function?
☎分類問題:使用『交叉熵函數,Cross Entropy (categorical_crossentropy)函數』
☎迴歸問題:使用『均方誤差函數,mean square error(mean_squared_error)』

(13-3)均方誤差函數(mean_squared_error):也就是最小平方法(Least Square)
☎目標函數 = mean_squared_error = 均方誤差函數 = 預測值與實際值的差距之平均值。

☎範例:model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

(13-4)交叉熵函數Cross Entropy (categorical_crossentropy):
☎說明:當預測值與實際值愈相近,損失函數就愈小,反之差距很大,就會更影響損失函數的值
☎目標函數 = categorical_crossentropy

☎範例:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
☎說明:『交叉熵』函數乃是使用『資訊熵』來評估兩組機率向量之間的差異程度,當交叉熵越小,則表示兩組機率向量間的差異越接近。
☎說明:所以若『交叉熵』越小,就表示越接近目標值。
☎因此:可以把『交叉熵』函數,當作評估神經網絡模型的目標object。

(13-5)什麼是『資訊熵』(Information Entropy)?
☎功用:『資訊熵』主要是用來評估『資訊混亂的程度』
☎若『資訊熵』越小:表示資訊確定,不混亂
☎若『資訊熵』越大:表示資訊不確定,混亂




15.樣本要做哪些預處理:

(15-1)樣本要做哪些預處理?
神經網絡模型在開始讀入資料訓練前,要先做數據的預處理,包括:
☎先把樣本進行『特徵標準化』
☎把樣本切割成三部分:訓練用樣本,驗證用樣本,預測用樣本
☎設定『訓練週期Epoch,批次Batch,批次尺寸Batch Size』
注意:因為訓練的資料集很大,不太可能一次全部計算,而是採用小量分批(Batch)的方式,每一批次的樣本數稱為Batch size
注意:做一次step2~step5,稱為一個訓練週期(Epoch)

(15-2)為什麼要做『特徵標準化』?
☎當樣本的兩個特徵AB,彼此的數據數值差距很大(例如:特徵A數值為955555,特徵B為0.01)
差距這麼大的特徵值,讓神經網絡模型去訓練,將導致目標函數無法收斂
☎所以要先把樣本進行『特徵標準化』,平衡特徵值的貢獻度與影響程度

(15-3)『特徵標準化』的兩種可行方法:
☎第一種方法:正規化/Normalization
方法:把樣本的數值,都轉換成『0~1』
使用時機:若樣本的數據平均,沒有極端峰值,就用『正規化/Normalization』方法,來平衡特徵值

☎第二種方法:標準化/Standardization
方法:把樣本的『平均值』調整成0,『標準差』調整成1
使用時機:若樣本的數據雜亂,有很多極端峰值,就用『標準化/Standardization』方法,來平衡特徵值




16.『特徵標準化』的兩種可行方法:正規化/Normalization,標準化/Standardization

(16-1)『特徵標準化』的兩種可行方法:
☎第一種方法:正規化/Normalization
方法:把樣本的數值,都轉換成『0~1』
使用時機:若樣本的數據平均,沒有極端峰值,就用『正規化/Normalization』方法,來平衡特徵值

☎第二種方法:標準化/Standardization
方法:把樣本的『平均值』調整成0,『標準差』調整成1
使用時機:若樣本的數據雜亂,有很多極端峰值,就用『標準化/Standardization』方法,來平衡特徵值

(16-2)正規化/Normalization:
☎原理:把樣本數據的範圍,依照比例縮放,例如:縮小成(0~1)的範圍內

(16-3)標準化/Standardization:
☎原理:python可以使用scipy.stats模組的一個函數:zscore(),來執行標準化
☎範例:
from scipy.stats import zscore
import numpy as np
x = np.array([255,128,45,0])
print('標準化後的張量=', zscore(x))



17.樣本要切割成三份:『訓練用,驗證用,測試用』樣本

(17-1)樣本要切割成三份:
☎第1種:訓練用資料集/training Dataset
用途:訓練神經網絡模型的參數(權重值w)

☎第2種:驗證用資料集/Validation Dataset
用途1:用來『評估Evaluate』模型的準確率
用途2:用來『優化Optimize』模型(使過度擬合overfitting的情況最小化)
注意:若訓練準確率高,但驗證時準確率低,這表示過度擬合overfitting了。
改善方法:停止訓練,增加隱藏層數目,測試看看,是否能夠改善過度擬合overfitting

☎第3種:測試用資料集/Testing Dataset
用途1:用來『預測Predict』

(17-2)樣本切割成三份的比例:
☎原理:『訓練,驗證,測試』資料集的比例為:70%,20%,10%





18.迴圈的設定:訓練週期Epochs,批次Batch,批次尺寸Batch Size,迭代數Iterations

(18-1)神經網絡模型的訓練:
☎指令:train_history = model.fit(x=x_Train_norm, y=y_TrainOneHot, validation_split=0.2, epochs=10, batch_size=800, verbose=2)
☎內容:以model.fit()函數進行訓練,必須先指定訓練的樣本資料(x, y)來源,並撥一部分資料作驗證(validation_split=0.2),還要設定訓練幾個週期(epochs=10)、訓練資料的抽樣方式。
☎訓練過程5步驟:step1~step5

(18-2)訓練週期Epochs:
☎用途:訓練過程5步驟,每次執行step2~step5,稱為一個訓練週期(Epoch)

(18-3)批次Batch,批次尺寸Batch Size:
☎用途:因為訓練的資料集很大,不太可能一次全部計算,而是採用小量分批(Batch)的方式,每一批次的樣本數稱為Batch size

(18-4)迭代數Iterations:
☎內容:迭代數 = 需要多少批次Batch,才能夠完成一個訓練週期Epochs
☎範例:某個神經網絡模型:
訓練樣本數有:2000筆
小樣本訓練的批次尺寸為:500筆
Question:請問,需要多少的迭代數,才能完成一次的訓練週期?
Answer:
迭代數Iterations = (訓練樣本數/批次尺寸)= 4 次


19.Keras常用的2種深度學習模型models

(19-1)第1種models:Sequential Model
☎用途:Sequential mode 搭建方法簡單快速,並且可以解決大多簡單的問題,例如:手寫字辨識,房價預測或評論分類,基本上只要是回歸問題或是分類問題,都可以用sequential mode來解決
☎限制1:必須逐層搭建網路,也就是每一層接著下一層,不允許跨層連接
☎限制2:而且網路模型必須是single input and output
☎範例:建立Sequential model的程式片段如下: model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])

☎五層神經網絡的結構圖:


(19-2)第2種models:Functional API model
☎用途1:如果是複雜的『多輸入,多輸出』,就可以用Functional API model
☎用途1:如果模型會使用到『共享神經層』,就可以用Functional API model
☎範例:建立Functional API model的程式片段如下: # 建立模型
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Model
InputTensor = tf.keras.Input(shape=(100,))
H1 = Dense(10, activation='relu')(InputTensor)
H2 = Dense(20, activation='relu')(H1)
Output = Dense(1, activation='softmax')(H2)
model_API = Model(inputs=InputTensor, outputs=Output)
model_API.summary()
from keras.utils import plot_model
tf.keras.utils.plot_model(model_API, to_file='Functional_API_model.png')
])

☎四層神經網絡的結構圖:



20.常用的3種神經網絡類型types:MLP,CNN,RNN

(20-1)第1種types:MLP/多層感知器
☎內容1:多層感知器,簡稱MLP,是神經網絡的經典類型。
☎內容2:它是由一層或多層神經元組成。數據被饋送到輸入層,可能存在一個或多個提供抽象級別的隱藏層,並且在輸出層(也稱爲可見層)上進行預測
☎用途1:MLP適用於分類預測問題,其中輸入被分配一個類或標籤。
☎用途2:也適用於迴歸預測問題,其中給定一組輸入對實值量進行預測。數據通常以表格格式提供,例如:CSV文件或電子表格中看到的那樣。
☎用途3:適合於『表格式數據集,分類預測問題,迴歸預測問題』
☎用途4:MLP非常靈活,通常可用於學習從輸入到輸出的映射。

(20-2)第2種types:CNN/卷積神經網絡
☎用途1:CNN 專門解決『影像識別』問題的,可用把它看作特徵提取層,放在輸入層上,最後用MLP 做分類
☎用途2:卷積神經網絡(CNN)被設計成,將圖像數據,映射到輸出變量。
☎用途3:對於涉及圖像數據作爲輸入的任何類型的預測問題,它們都是可行的方法。
☎用途4:適合於『圖像數據,分類預測問題,迴歸預測問題』
☎用途5:CNN能夠很好地處理具有空間關係的數據。
☎用途6:CNN輸入傳統上是二維的,字段或矩陣,但也可以改變爲一維,允許它開發一維序列的內部表示。
☎用途7:CNN 卷積擅長從『區域性』特徵,逼近『整體』特徵
☎用途8:CNN應該側重空間對映,影象資料尤為貼合此場景。

(20-3)第3種types:RNN/循環神經網絡,遞歸神經網絡
☎特點1:遞歸神經網絡(RNNs)被設計成,處理『序列』預測問題。
序列預測問題有多種形式,最好用所支持的輸入和輸出類型來描述。
序列預測問題的一些示例包括:
一對多:作爲輸入的觀察映射到多個步驟的輸出序列。(也就是用一步觀測值往後預測多步)
多對一:作爲輸入映射到類或數量預測的多個步驟的序列。(多步觀測值預測一個類別或一步)
多對多:作爲輸入的多個步驟的序列,映射到具有多個步驟作爲輸出的序列。(多步觀測值預測多步)

☎特點2:傳統上,遞歸神經網絡很難訓練。
☎特點3:長短期記憶網絡,或者LSTM網絡可能是最成功的RNN,因爲它克服了訓練循環網絡的問題,並且反過來已經在廣泛的應用中使用。
☎特點4:一般來說,RNN和LSTM在處理單詞和段落序列(通常稱爲自然語言處理)時獲得了最大的成功。
☎特點5:這包括文本序列和以時間序列表示的口語序列。它們也被用作需要序列輸出的生成模型,不僅用於文本,還用於生成手寫等應用程序。
☎特點6:RNN 專門解決時間序列問題的,用來提取時間序列資訊,放在特徵提取層(如CNN)之後。
☎特點7:RNN,遞迴型網路,用於序列資料,並且有了一定的記憶效應,輔之以lstm。
☎特點8:RNN 擅長對付時間序列。

☎用途1:適合於『文本數據,語音數據』
☎用途2:適合於『分類預測問題,迴歸預測問題』

☎限制1:不要使用RNN用於:『表格數據,圖像數據』


1.基本圖片分類:Basic classification: Classify images of clothing
☎人工智慧的最常見用途:分類,迴歸
☎目的:從一堆圖片,學習找出圖片的分類規律
(1)官網的教學文件:
官網的教學範例:基本圖片分類:Basic classification: Classify images of clothing

(3)練習範例:
☎題目:uses the Fashion MNIST dataset which contains 70,000 grayscale images in 10 categories. The images show individual articles of clothing at low resolution (28 by 28 pixels), as seen here:

☎執行類神經網路的求解步驟示意圖:


(3-1)使用神經網絡模型,三層神經網絡(第1層把2D陣列轉成1D陣列(Flatten),第2-3層dendse層)
☎使用:tf.keras.layers.Flatten指令來轉換維度, transforms the format of the images from a two-dimensional array (of 28 by 28 pixels) to a one-dimensional array (of 28 * 28 = 784 pixels)
☎The first Dense layer: has 128 nodes (or neurons).
☎The second (and last) layer(輸出層): returns a logits array with length of 10
model = tf.keras.Sequential(
[
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10)
])

(3-2)Compile the model
These are added during the model's compile step:
☎Loss function:his measures how accurate the model is during training. You want to minimize this function to "steer" the model in the right direction.
☎Optimizer:This is how the model is updated based on the data it sees and its loss function.
☎Metrics:Used to monitor the training and testing steps. The following example uses accuracy, the fraction of the images that are correctly classified.

(3-3)Train the model
As the model trains, the loss and accuracy metrics are displayed. This model reaches an accuracy of about 0.91 (or 91%) on the training data.
model.fit(train_images, train_labels, epochs=10)

(3-4)評估準確率:Evaluate accuracy
compare how the model performs on the test dataset:
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)

(3-5)什麼是Overfitting model:
☎Overfitting:測試的準確率<訓練的準確率
☎Overfitting的model:無法精準預測新的數據(unseen)
It turns out that the accuracy on the test dataset is a little less than the accuracy on the training dataset.
This gap between training accuracy and test accuracy represents overfitting.
Overfitting happens when a machine learning model performs worse on new, previously unseen inputs than it does on the training data.
An overfitted model "memorizes" the noise and details in the training dataset to a point where it negatively impacts the performance of the model on the new data.

(3-6)預測新的數據:Make predictions
☎With the model trained, you can use it to make predictions about some images.
pred_classifications = model.predict(test_images)
☎take a look at the first prediction:
echo predictions[0];
array([2.9212106e-07, 1.6208847e-10, 1.3363140e-08, 2.7341349e-09, 5.5379962e-10, 4.5457238e-04, 4.2226111e-06, 4.4925120e-03, 5.8868943e-07, 9.9504781e-01], dtype=float32)

(3-7)用圖形驗證預測結果對不對:Verify predictions
i = 0
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions[i], test_labels)
plt.show()


(3-8)成果:





程式碼
專案成果檔案.py專案成果檔案.ipynb

 

 
chp11. keras多層感知器(MLP)的各種範例
目錄 範例11-1-a:糖尿病的識別與預測:讀入資料集檔案 範例11-1-b:建立糖尿病的神經網絡模型 範例11-1-c:把訓練資料先進行特徵標準化Standardization 範例11-1-d:在神經層使用權重初始器initializer
範例11-1-e:輸出向量改成2個(yes,no) 範例11-1-f:使用adam優化器optimizer試看看可否提高準確率 範例11-1-g:若樣本數不多,可縮小神經網絡尺寸,以提高準確率 範例11-1-h:把資料集分割成訓練資料集,測試資料集
範例11-1-i:如何找到最佳訓練週期epochs(看驗證資料的history圖) 範例11-1-j:使用validation_split=0.2參數,來自動分割驗證用資料集 範例11-1-k:顯示模型的預測值
目錄 範例11-2-a:預測波士頓房價Boston Housing price regression:讀入csv資料集 範例11-2-b:建立模型來訓練波士頓房價資料集 範例11-2-c:使用定義函數來『建立模型+編譯模型』:model=def bulid_mode() 範例11-2-d:當資料集數目少時可用k-摺疊交叉驗證法(k fold cross validation)
範例11-2-e:使用四層神經網絡,來降低誤差 範例11-2-f:由『驗證資料集』找出避免overfitting的『最佳週期』後,就只用『訓練資料集,測試資料集』重新訓練模型 範例11-2-g:同時一次儲存已經訓練好的模型『結構,權重』 範例11-2-h:一次讀入已經訓練好的模型『結構,權重』
範例11-2-i:分開儲存已經訓練好的模型『結構,權重』 範例11-2-j:分開讀入已經訓練好的模型『結構,權重』
目錄 範例11-3-a:鳶尾花資料集(The iris dataset)的多元分類:讀入csv資料集 範例11-3-b:繪圖(散佈圖,seabron繪圖庫):鳶尾花資料集 範例11-3-c:建立鳶尾花資料集(The iris dataset)的神經網絡模型

範例11-2-a:糖尿病的識別與預測:讀入資料集檔案
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras預測糖尿病
☎目的:分類問題(讀入美國糖尿病最高的皮馬印第安人pima indians資料集,學習,並預測)

(11-1a-1)教學文件:
利用python機器學習庫進行Kaggle皮馬印第安人糖尿病預測分析
Your First Deep Learning Project in Python with Keras Step-By-Step
Using a Keras based neural network to predict diabetes
Practical Deep Neural Network in Keras on PIMA Diabetes Data set
[ML] 用 Keras 預測糖尿病

(11-1a-2)讀入csv的方法:
(1)在anaconda讀入csv:
import pandas as pd df = pd.read_csv("./diabetes.csv") ☎程式碼:程式碼(使用anaconda讀入資料集)


(2)在colaboratory讀入csv:方法1
☎注意:diabetes.csv已經上傳到google drive裡面了
在colaboratory的python讀入google drive裡面的diabetes.csv
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_csv("./diabetes.csv")
☎程式碼:程式碼(在colaboratory的python讀入google drive裡的資料集)



(3)在colaboratory讀入csv:方法2
☎注意:diabetes.csv在自己的個人電腦硬碟裡
#上傳diabetes.csv
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
# 確認diabetes.csv是否已上載
!ls *.* -l
# use Pandas to read diabetes.csv
df = pd.read_csv("./diabetes.csv")
print(df)
☎程式碼:程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


(11-1a-3)下載pima印第安人糖尿病資料集:
(1)下載pima印第安人糖尿病資料集

(2)糖尿病資料集結構分析:
☎該資料集源至美國國家糖尿病、消化及腎臟疾病研究所。
☎資料集的目的:可以根據已有診斷資訊,來預測患者是否患有糖尿病。
但該資料庫存在一定局限性,特別是資料集中的患者都是年齡大於等於21歲的皮馬印第安女性。
☎資料來源:https://www.kaggle.com/uciml/pima-indians-diabetes-database
☎資料集共9個欄位(8個預測變數,和1個目標變數Outcome)。
☎預測變數包括:患者的懷孕次數,BMI,胰島素水準,年齡等。如下圖所示:



(11-1a-4)讀入csv檔案,印出前5筆,印出資料集的size(row,column)=(筆數,欄位數)
☎成果:

1.程式碼(使用anaconda讀入資料集)
2.程式碼(在colaboratory的python讀入google drive裡的資料集)
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-1-b:建立糖尿病的神經網絡模型
☎目的:接續上題(11-1-a),建立糖尿病神經網絡模型,學習,並預測

(11-1b-1)教學文件:
利用python機器學習庫進行Kaggle皮馬印第安人糖尿病預測分析
Your First Deep Learning Project in Python with Keras Step-By-Step
Using a Keras based neural network to predict diabetes
Practical Deep Neural Network in Keras on PIMA Diabetes Data set
[ML] 用 Keras 預測糖尿病

(11-1b-1)import函數庫的寫法有兩種:
(1)方法1:
import tensorflow as tf
....
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu"))
model.add(tf.keras.layers.Dense(8, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))

(2)方法2:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
.....
model = Sequential()
model.add(Dense(10, input_shape=(8,), activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))

(11-1b-2)建立深度學習神經網絡模型(四層):

☎輸入層:8種特徵資料
☎隱藏層1:10個神經元
☎隱藏層2:8個神經元
☎輸出層:這是個分類問題(是否得病:yes,no)
所以,輸出可以說一個神經元(true,false)
或是,輸出可以說二個神經元

(11-1b-3)建立三層神經層:
keras使用Sequential來建立神經層:
☎建立model指令:model = Sequential()
☎加入三層網絡:
範例:
model = Sequential()
model.add(Dense(10, input_shape=(8,), activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))
☎參數說明:
(1)第0層:輸入層,不需要建立
(2)第1層:隱藏層,model.add(Dense(設定參數))
☎參數units:神經元數目
☎參數input_shape:設定輸入層的形狀 =(樣本數,輸出維度)
例如:input_shape=(8,)=使用(*,8)的輸入資料,*為樣本數,8為8個特徵數
☎也可以用參數input_dim=8,設定輸入的特徵數
☎參數activation:設定激勵函數,例如:activation="relu",設定ReLU函數
☎範例1:model.add(Dense(units=10, input_shape=(8,), activation="relu"))
☎範例2:model.add(Dense(10, input_shape=(8,), activation="relu"))

(3)第2層:隱藏層,model.add(Dense(設定參數))
☎範例:model.add(Dense(8, activation="relu"))

(4)第3層:輸出層,model.add(Dense(設定參數))
☎範例:model.add(Dense(1, activation="sigmoid"))
建立一個輸出層,設定一個神經元,設定激勵函數=sigmoid

(11-1b-4)顯示神經網絡模型的摘要資訊:
☎指令:model.summary()

(11-1b-5)編譯模型:
☎目的:把上面keras建立好的四層神經網絡,編譯成低階的tensorflow計算圖
☎指令:model.compile(設定參數)
☎範例:model.compile(loss="binary_crossentropy", optimizer="sgd",metrics=["accuracy"])

☎參數說明:
(1).loss參數:損失函數的名稱,一般常用的函數,例如:均方誤差(mse),交叉熵(crossentropy)
下表是『激勵函數 vs 損失函數對應表』

☎這個糖尿病資料的判斷,是二元分類,
所以『激勵函數/啟動函數 = sigmoid』,
所以『損失函數 = binary_crossentropy』

(2).optimizer參數:優化器,就是所使用的『梯度下降法 gradient descent』,keras可以設定多種類的梯度下降法
☎範例:optimizer="sgd",設定使用『隨機梯度下降法』

(3).metrics參數:設定『訓練模型』,『評估模型』的評估標準,所以這個是個list清單[....]
通常使用『accuracy』
☎範例:metrics=["accuracy"]

(11-1b-6)訓練模型:
☎目的:把特徵資料數據,放入上面模型來訓練
☎指令:model.fit(設定參數)
☎範例:model.fit(X, Y, epochs=150, batch_size=10)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).epochs參數:epochs是訓練週期的次數,epochs=150代表總共訓練150次
(3).batch_size參數:batch_size是批次尺寸
☎訓練過程的輸出資訊:

☎epoch=1/150,代表第一次訓練
☎77/77,77是樣本數
☎loss是損失函數,acc是準確度

(11-1b-7)評估模型的效能:
☎指令:model.evaluate(設定參數)
☎範例:loss, accuracy = model.evaluate(X, Y, verbose=0)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).verbose參數:訓練過程輸出方式,若verbose=0則不輸出資訊,若verbose=1則輸出資訊

(11-1b-8)印出模型的準確度:
☎指令:print("準確度 = {:.2f}".format(accuracy))
小數點2位的浮點數

☎成果:

☎注意:因為一開始使用亂數打亂資料,所以每個人run的結果會不一樣
1.程式碼(使用anaconda讀入資料集)
2.程式碼(在colaboratory的python讀入google drive裡的資料集)
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-1-c:把訓練資料先進行特徵標準化Standardization
☎目的:希望能夠提高上面神經網絡模型的訓練,讓模型的準確率更高
☎方法:因為的csv訓練資料,數值大小差距大,

(11-1c-1)『特徵標準化』的兩種可行方法:
☎第一種方法:正規化/Normalization
方法:把樣本的數值,都轉換成『0~1』
使用時機:若樣本的數據平均,沒有極端峰值,就用『正規化/Normalization』方法,來平衡特徵值

☎第二種方法:標準化/Standardization
方法:把樣本的『平均值』調整成0,『標準差』調整成1
使用時機:若樣本的數據雜亂,有很多極端峰值,就用『標準化/Standardization』方法,來平衡特徵值

(11-1c-2)『特徵標準化』的程式寫法:
目的:把樣本的『平均值』調整成0,『標準差』調整成1
(1)X先減去平均值mean():先把整個平均值往下拉,拉到平均值=0
(2)X再除以標準差std():X再除以標準差,造成標準差=1
X -= X.mean(axis=0)
X /= X.std(axis=0)

(11-1c-3)import函數庫的寫法有兩種:
(1)方法1:
import tensorflow as tf
....
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu"))
model.add(tf.keras.layers.Dense(8, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))

(2)方法2:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
.....
model = Sequential()
model.add(Dense(10, input_shape=(8,), activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="sigmoid"))

☎成果:

☎注意:因為一開始使用亂數打亂資料,所以每個人run的結果會不一樣
☎結果:模型的準確率有提高(0.7->0.8)
1.程式碼(使用anaconda讀入資料集)
2.程式碼(在colaboratory的python讀入google drive裡的資料集)
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-1-d:在神經層使用權重初始器initializer
☎目的:希望能夠提高上面神經網絡模型的訓練,讓模型的準確率更高
☎方法:在神經層使用權重初始器initializer(設定權重陣列w,偏差向量b),若沒有設定就是用預設值
☎可以設定的參數:
kernel_initializer='Zeros':全零初始化
kernel_initializer='Ones':全1初始化
kernel_initializer='random_normal':常態分佈的隨機亂數
kernel_initializer='random_uniform':均勻分佈的隨機亂數
bias_initializer='Zeros':全零初始化
bias_initializer='Ones':全1初始化
bias_initializer='random_normal':常態分佈的隨機亂數
bias_initializer='random_uniform':均勻分佈的隨機亂數

(1)在神經層設定『權重w,偏差向量b』的初始值:
☎程式碼指令:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,),
kernel_initializer="random_uniform",
bias_initializer="ones",
activation="relu"))
model.add(tf.keras.layers.Dense(8, kernel_initializer="random_uniform",
bias_initializer="ones",
activation="relu"))
model.add(tf.keras.layers.Dense(1, kernel_initializer="random_uniform",
bias_initializer="ones",
activation="sigmoid"))

(2)成果:

☎結果:模型的準確率沒有提高太多(0.75->0.78)
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-1-e:輸出向量改成2個(yes,no)
(1)觀念:判別是否得到糖尿病,輸出向量有兩種方式:
(A).一個輸出向量y:(y=0,或y=1),y=1得病
(B).二個輸出向量y1,y2:(y1=0,y2=1),或(y1=1,y2=0),y2=1得病
☎前面範例:一個輸出向量y:(y=0,或y=1),y=1得病
☎本題範例目的:二個輸出向量y1,y2
(y1=0,y2=1),或(y1=1,y2=0),y2=1得病

(2)程式碼重點:一個輸出向量y:(y=0,或y=1),y=1得病:
☎重點1:神經層的最後一層,要設定units=1
☎重點2:神經層的最後一層,要設定激勵函數為sigmoid(activation="sigmoid")
sigmoid激勵函數的對應損失函數= binary_crossentropy
☎準則:
二元分類問題(單一輸出向量):使用『sigmoid函數,tanh函數』
多元分類問題(多個輸出向量):使用『softmax函數』

☎這個糖尿病資料的判斷,是二元分類(單一輸出向量)
所以『激勵函數/啟動函數 = sigmoid』,
所以『損失函數 = binary_crossentropy』
☎程式碼指令:
model.add(tf.keras.layers.Dense(units=1, kernel_initializer="random_uniform",
bias_initializer="ones",
activation="sigmoid"))

☎成果:

3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


(3)程式碼重點:二個輸出向量y1,y2:(y1=0,y2=1),或(y1=1,y2=0),y2=1得病:
☎重點1:神經層的最後一層,要設定units=2
☎重點2:神經層的最後一層,要設定激勵函數為softmax(activation="softmax")
sigmoid激勵函數的對應損失函數= categorical_crossentropy
☎重點3:二元/多元分類問題(多個輸出向量),則其輸出向量的標籤,必須先進行one-hot編碼,才能與softmax計算的預測向量(機率向量),進行損失函數的計算
☎程式碼:如何把輸出向量y進行one-hot編碼
# One-hot編碼
from tensorflow.keras.utils import to_categorical
Y = to_categorical(Y)
或是
# One-hot編碼
Y = tf.keras.utils.to_categorical(Y)
☎準則:
二元分類問題(單一輸出向量):使用『sigmoid函數,tanh函數』
多元分類問題(多個輸出向量):使用『softmax函數』

☎這個糖尿病資料的判斷,是多元分類問題(多個輸出向量)
所以『激勵函數/啟動函數 = softmax』,
所以『損失函數 = categorical_crossentropy』
☎程式碼指令:
model.add(tf.keras.layers.Dense(units=2, kernel_initializer="random_uniform",
bias_initializer="ones",
activation="softmax"))

☎成果:

3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-1-f:使用adam優化器optimizer試看看可否提高準確率
(1)觀念:設定優化器optimizer的種類,是影響神經網絡模型效能的重要因素之一
☎優化器optimizer:就是各種改良版本的『梯度下降法Gradient Descent』

(2)keras常用的優化函數(Optimizer) vs 對應的梯度下降演算法:


(3)如何選擇哪一種優化函數(Optimizer)?
(3-1).如果數據是稀疏的,
建議選用『自適應方法』:即Adagrad, Adadelta, RMSprop, Adam。RMSprop, Adadelta, Adam
整體來講,Adam 是最好的選擇。

(3-2).如果使用循環神經網絡模型RNN,
☎則優化函數選擇: rmsprop的效能是最好的


(4)程式:延續範例11-1-c(沒有加上優化器optimizer)

(5)程式碼重點:使用adam優化器
☎程式碼:
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

☎成果:

☎結果:模型的準確率有提高(0.75->0.85)
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-1-g:若樣本數不多,可縮小神經網絡尺寸,以提高準確率
(1)觀念:若樣本數不多,可縮小神經網絡尺寸(減小神經網絡的參數量),可以提高準確率

(2)方法:把第二層隱藏層的神經元數目,由8->6個

(4)程式:延續範例11-1-f

(5)程式碼重點:
☎程式碼:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu"))
model.add(tf.keras.layers.Dense(6, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))

☎成果:

☎結果:模型的準確率->0.83
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-1-h:把資料集分割成訓練資料集,測試資料集
(1)觀念:前面範例是用同一批資料來做『訓練,與測試』,正確的做法是,要把資料集分割成『訓練資料集,測試資料集』

(2)方法:把768筆資料,分割成『690筆訓練用資料,78筆測試用資料』

(3)程式:延續範例11-1-g

(4)程式碼重點:
☎把768筆資料,分割成『690筆訓練用資料,78筆測試用資料』:
#前690筆,是訓練用資料
X_train, Y_train = X[:690], Y[:690]
#最後78筆(690以後筆數),是測試用資料
X_test, Y_test = X[690:], Y[690:]

☎用X_train, Y_train來做訓練
#12.訓練模型(用X_train, Y_train來做訓練)
model.fit(X_train, Y_train, epochs=150, batch_size=10, verbose=0)

☎比較用『訓練用資料集,測試資料集』的模型準確率
loss, accuracy = model.evaluate(X_train, Y_train)
print("訓練用資料集的準確度 = {:.2f}".format(accuracy))

loss, accuracy = model.evaluate(X_test, Y_test)
print("測試資料集的準確度 = {:.2f}".format(accuracy))

☎成果:

☎結果:訓練用資料集的準確度比較高,測試資料集的準確度的準確率比較低,這是因為測試用的資料沒有遇見過
☎原因:這是泛化性不足,可能是因為『過度擬合over fitting』所造成的
☎改善方法:可能是因為訓練週期太多,造成過度學習,所以必須找出最佳訓練週期,所以必須在『訓練資料集,再分割出部分資料集當作驗證用』=『驗證用資料集』
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-1-i:如何找到最佳訓練週期epochs(看驗證資料的history圖)
(1)觀念:過度擬合overfitting的改善方法:
☎現象:訓練用資料集的準確度比較高,測試資料集的準確度的準確率比較低,這是因為測試用的資料沒有遇見過
☎原因:這是泛化性不足,可能是因為『過度擬合over fitting』所造成的
☎改善方法:可能是因為訓練週期太多,造成過度學習,所以必須找出最佳訓練週期,所以必須在『訓練資料集,再分割出部分資料集當作驗證用』=『驗證用資料集』

(2)為什麼除了『訓練資料集,測試資料集』外,還要有『驗證資料集』?
☎(1)因為:若只用『訓練資料集,測試資料集』,往往會出現『過度擬合overfitting,泛化不足』,這可能是因為過度學習導致的
☎(2)所以,必須用『驗證資料集』,找出『最佳的訓練週期』
☎(3)若是已經找出『最佳的訓練週期』了,就可以在此週期下,重新只用『訓練資料集,測試資料集』來訓練模型

(3)方法:如何找到最佳訓練週期epochs
☎在history = model.fit(參數)裡面,加上參數validation_data=(X_test,Y_test)
☎然後觀察history歷史圖,畫出val_loss(validation loss)歷史圖,當val_loss最低點就是最佳訓練週期

☎最佳訓練週期在epochs = 30左右,這時val_loss的誤差值是最低的,之後val_loss就會逐漸上升(若繼續訓練,就會造成overfitting過度擬合)
☎或是,畫出val_accuracy(validation accuracy)歷史圖,當val_accuracy最高點就是最佳訓練週期
☎最佳訓練週期在epochs = 30左右,這時validation accuracy的準確率是最高的,之後validation accuracy就會逐漸降低(若繼續訓練,就會造成overfitting過度擬合)


(3)程式:延續範例11-1-h

(4)程式碼重點:
☎.訓練模型(用X_test,Y_test來做訓練)(加上參數validation_data=(X_test,Y_test)):
#輸出訊息,多了兩個:val_loss驗證資料的損失,val_accuracy驗證資料的準確率 history = model.fit(X_train, Y_train, epochs=150, validation_data=(X_test,Y_test), batch_size=10, verbose=1) #14.評估模型的效能(比較用『訓練用資料集,測試資料集』的模型準確率) loss, accuracy = model.evaluate(X_train, Y_train) print("訓練用資料集的準確度 = {:.2f}".format(accuracy)) loss, accuracy = model.evaluate(X_test, Y_test) print("測試資料集的準確度 = {:.2f}".format(accuracy))
☎畫出val_loss(validation loss)歷史圖,當val_loss最低點就是最佳訓練週期
import matplotlib.pyplot as plt loss = history.history['loss'] val_loss = history.history['val_loss'] epochs = range(1,len(loss)+1) plt.plot(epochs, loss, "bo", label="Training_loss") plt.plot(epochs, val_loss, "r", label="Validation_loss") plt.title("Training_loss vs Validation_loss") plt.xlabel("epochs") plt.ylabel("loss") plt.legend() plt.show()
☎比較用『訓練用資料集,測試資料集』的模型準確率
loss, accuracy = model.evaluate(X_train, Y_train)
print("訓練用資料集的準確度 = {:.2f}".format(accuracy))

loss, accuracy = model.evaluate(X_test, Y_test)
print("測試資料集的準確度 = {:.2f}".format(accuracy))

☎成果:




☎修改:最佳訓練週期在epochs = 20~30左右
☎結果:沒有過度擬合overfitting現象,驗證資料集的誤差值0.76沒有明顯增高(0.79)

3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-1-j:使用validation_split=0.2參數,來自動分割驗證用資料集
(1)觀念:過度擬合overfitting的改善方法:
☎現象:訓練用資料集的準確度比較高,測試資料集的準確度的準確率比較低,這是因為測試用的資料沒有遇見過
☎原因:這是泛化性不足,可能是因為『過度擬合over fitting』所造成的
☎改善方法:可能是因為訓練週期太多,造成過度學習,所以必須找出最佳訓練週期,所以必須在『訓練資料集,再分割出部分資料集當作驗證用』=『驗證用資料集』

(2)方法:如何找到最佳訓練週期epochs
☎在history = model.fit(參數)裡面,加上參數validation_split=0.2參數,就會把X_train, Y_train訓練資料集中,自動分割出20%當作驗證資料集
☎然後觀察history歷史圖,畫出val_loss(validation loss)歷史圖,當val_loss最低點就是最佳訓練週期

☎最佳訓練週期在epochs = 10左右,這時val_loss的誤差值是最低的,之後val_loss就會逐漸上升(若繼續訓練,就會造成overfitting過度擬合)
☎或是,畫出val_accuracy(validation accuracy)歷史圖,當val_accuracy最高點就是最佳訓練週期
☎最佳訓練週期在epochs = 10左右,這時validation accuracy的準確率是最高的,之後validation accuracy就會逐漸降低(若繼續訓練,就會造成overfitting過度擬合)


(3)程式:延續範例11-1-i

(4)程式碼重點:
☎.訓練模型(用X_test,Y_test來做訓練)(加上參數validation_data=(X_test,Y_test)):
#輸出訊息,多了兩個:val_loss驗證資料的損失,val_accuracy驗證資料的準確率 history = model.fit(X_train, Y_train, epochs=150, validation_split=0.2, batch_size=10, verbose=1) #14.評估模型的效能(比較用『訓練用資料集,測試資料集』的模型準確率) loss, accuracy = model.evaluate(X_train, Y_train) print("訓練用資料集的準確度 = {:.2f}".format(accuracy)) loss, accuracy = model.evaluate(X_test, Y_test) print("測試資料集的準確度 = {:.2f}".format(accuracy))

☎成果:



☎修改:最佳訓練週期在epochs = 10左右
☎結果:沒有過度擬合overfitting現象,驗證資料集的誤差值0.76沒有明顯增高(0.79)


3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-1-k:顯示模型的預測值
(1)觀念:神經網絡明顯經過訓練學習後,就可以進行預測:

(2)預測指令:使用y1 = model.predict(x1, batch_size=10)來進行預測
☎使用X_test,預測Y_pred
Y_pred = model.predict(X_test, batch_size=10)


(3)☎注意:這個糖尿病預測,輸出向量可以說一個輸出向量,或二個輸出向量
所以,模型的預測值有兩種可能(一個向量,或兩個向量)

(4)程式碼:處理1個輸出向量的神經網絡模型:
#1.將資料分割成輸入的訓練資料X,和標籤資料Y
#特徵資料集 = X = 前8個欄位(0~7) = 訓練資料用
#標籤資料集 = Y = 第9個欄位(8) = 目標值
X = dataset[:, 0:8]
Y = dataset[:, 8]
#特徵標準化
X -= X.mean(axis=0)
X /= X.std(axis=0)

#2.把資料集分割成訓練資料集,測試資料集
#前690筆,是訓練用資料
X_train, Y_train = X[:690], Y[:690]
#最後78筆(690以後筆數),是測試用資料
X_test, Y_test = X[690:], Y[690:]

#3.定義模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu"))
model.add(tf.keras.layers.Dense(6, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))

#4.編譯模型
#目的:把上面keras建立好的四層神經網絡,編譯成低階的tensorflow計算圖
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
#5.訓練模型(用X_test,Y_test來做訓練)
history = model.fit(X_train, Y_train, epochs=20, validation_split=0.2, batch_size=10, verbose=0)

#6.進行預測(使用X_test,預測Y_pred)
Y_pred = model.predict(X_test, batch_size=10)

(5)程式碼:處理2個輸出向量的神經網絡模型:
#1.將資料分割成輸入的訓練資料X,和標籤資料Y
#特徵資料集 = X = 前8個欄位(0~7) = 訓練資料用
#標籤資料集 = Y = 第9個欄位(8) = 目標值
X = dataset[:, 0:8]
Y = dataset[:, 8]
#特徵標準化
X -= X.mean(axis=0)
X /= X.std(axis=0)
#2. One-hot編碼
Y = tf.keras.utils.to_categorical(Y)

#3.把資料集分割成訓練資料集,測試資料集
#前690筆,是訓練用資料
X_train, Y_train = X[:690], Y[:690]
#最後78筆(690以後筆數),是測試用資料
X_test, Y_test = X[690:], Y[690:]

#4.定義模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_shape=(8,), activation="relu"))
model.add(tf.keras.layers.Dense(6, activation="relu"))
model.add(tf.keras.layers.Dense(2, activation="softmax"))

#5.編譯模型
#目的:把上面keras建立好的四層神經網絡,編譯成低階的tensorflow計算圖
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

#6.訓練模型(用X_test,Y_test來做訓練)
history = model.fit(X_train, Y_train, epochs=20, validation_split=0.2, batch_size=10, verbose=0)

#7.進行預測(使用X_test,預測Y_pred)
Y_pred = model.predict(X_test, batch_size=10)

(6)程式:延續範例11-1-j

(7)成果:

☎結果1:單一輸出向量,預測值接近0,表示預測不會得到糖尿病
☎結果2:兩個輸出向量,預測值接近[1,0],第一個值=1表示預測不會得到糖尿病,第二個值=1表示預測會得到糖尿病

(8)模型預測糖尿病(比較,輸出一個向量,輸出二個向量)的程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)
(9)模型預測糖尿病(輸出二個向量)的程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)


範例11-2-a:預測波士頓房價/Boston Housing price regression:讀入csv資料集
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎目的:迴歸問題(找出波士頓房價的趨勢線)

(11-2a-1)教學文件:
Regression with Keras
回归问题(boston_housing数据为例)
Tutorial: Basic Regression
TENSORFLOW 2 – REGRESSION ON THE BOSTON HOUSING DATASET. PART 2 – KERAS CALLBACKS
浅入浅出用Keras实现波士顿房价预测
【keras實戰】波士頓房價預測
从零开始学keras之预测房价

(11-2a-2)讀入csv的方法:
(1)在anconda讀入csv:
import pandas as pd df = pd.read_csv("./diabetes.csv")

(2)在colaboratory讀入csv:方法1
☎注意:diabetes.csv已經上傳到google drive裡面了
在colaboratory的python讀入google drive裡面的diabetes.csv
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_csv("./diabetes.csv")



(3)在colaboratory讀入csv:方法2
☎注意:diabetes.csv在自己的個人電腦硬碟裡
#上傳diabetes.csv
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
# 確認diabetes.csv是否已上載
!ls *.* -l
# use Pandas to read diabetes.csv
df = pd.read_csv("./diabetes.csv")
print(df)


(11-2a-3)下載波士頓房價資料集/Boston Housing price dataset:
(1)下載波士頓房價資料集

(2)波士頓房價資料集結構分析:
☎該資料集包含美國人口普查局收集的美國麻塞諸塞州波士頓住房價格的有關資訊, 資料集很小,只有506個案例。
☎boston_housing資料集對房價資料進行回歸分析,資料來自1970年代,波斯頓周邊地區的房價,是用於機器學習的經典資料集。
☎注意:這個資料集很小,共計506條資料,分為404個訓練樣本和102個測試樣本,因此需要採用K-Fold交叉驗證法(把資料集折成很多折,分區訓練與驗證),這裡取K=4。
☎資料集都有以下14個屬性:



☎資料集來源:https://www.heywhale.com/mw/dataset/590bd595812ede32b73f55f2
☎資料集來源:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_boston.html
☎資料集共14個欄位(前面13個特徵變數,最後1個是目標變數Outcome)。
☎預測變數包括:患者的懷孕次數,BMI,胰島素水準,年齡等。如下圖所示:

No

属性

数据类型

字段描述

1

CRIM

Float

城镇人均犯罪率

2

ZN

Float

占地面积超过2.5万平方英尺的住宅用地比例

3

INDUS

Float

城镇非零售业务地区的比例

4

CHAS

Integer

查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0)

5

NOX

Float

一氧化氮浓度(每1000万份)

6

RM

Float

平均每居民房数

7

AGE

Float

在1940年之前建成的所有者占用单位的比例

8

DIS

Float

与五个波士顿就业中心的加权距离

9

RAD

Integer

辐射状公路的可达性指数

10

TAX

Float

每10,000美元的全额物业税率

11

PTRATIO

Float

城镇师生比例

12

B

Float

1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例

13

LSTAT

Float

人口中地位较低人群的百分数

14

MEDV

Float

(目标变量/类别属性)以1000美元计算的自有住房的中位数


(11-2a-4)讀入csv檔案,印出前5筆,印出資料集的size(row,column)=(筆數,欄位數)
☎成果:

☎程式碼: 3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2-b:建立模型來訓練波士頓房價資料集
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎目的:迴歸問題(找出波士頓房價的趨勢線)

(11-2a-1)教學文件:
Regression with Keras
回归问题(boston_housing数据为例)
Tutorial: Basic Regression
TENSORFLOW 2 – REGRESSION ON THE BOSTON HOUSING DATASET. PART 2 – KERAS CALLBACKS
浅入浅出用Keras实现波士顿房价预测
【keras實戰】波士頓房價預測
从零开始学keras之预测房价

(11-2b-2)建立深度學習神經網絡模型(三層):
☎輸入層:13個神經元(訓練特徵值的數目)
☎dense隱藏層:32個神經元
☎輸出層:這是個預測房價問題,目標標籤y=房價
所以,輸出是一個神經元(數字)

(11-2b-3)建立三層神經層:
keras使用Sequential來建立神經層:
☎建立model指令:model = Sequential()
☎加入三層網絡:
範例:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(32, input_shape=(X_train.shape[1],), activation="relu"))
model.add(tf.keras.layers.Dense(1))

☎參數說明:
(1)第1層:輸入層,不需要建立
(2)第2層:隱藏層,model.add(Dense(設定參數))
☎參數units:神經元數目
☎參數input_shape:設定輸入層的形狀 =(樣本數,輸出維度)
例如:輸入向量size = 13 = X_train.shape[1],為13個特徵數
☎參數activation:設定激勵函數,例如:activation="relu",設定ReLU函數

(4)第3層:輸出層,model.add(Dense(設定參數))
☎範例:model.add(Dense(1))
建立一個輸出層,設定一個神經元

(11-2b-4)顯示神經網絡模型的摘要資訊:
☎指令:model.summary()

(11-2b-5)編譯模型:
☎目的:把上面keras建立好的三層神經網絡,編譯成低階的tensorflow計算圖
☎指令:model.compile(設定參數)
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])
☎參數說明:
(1).loss參數:損失函數的名稱,迴歸常用的函數,例如:均方誤差(mse)
下表是『激勵函數 vs 損失函數對應表』

☎二元分類,
所以『激勵函數/啟動函數 = sigmoid』,
所以『損失函數 = binary_crossentropy』

(2).迴歸問題損失函數:
☎迴歸和分類,必須使用不同的損失函數,
☎在迴歸中的損失函數:
通常使用:Mean Square Error(MSE)
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(3).在迴歸問題任務(對連續值的預測)中,常見的評估指標(Metric)有:
☎平均絕對誤差(Mean Absolute Error,MAE),例如:metrics=["mae"]
☎均方誤差(Mean Square Error,MSE),例如:metrics=["mse"]
☎均方根誤差(Root Mean Square Error,RMSE),例如:metrics=["rmse"]
☎平均絕對百分比誤差(Mean Absolute Percentage Error,MAPE),例如:metrics=["mape"]
☎其中用得最為廣泛的就是:MAE和MSE。
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(4).比較:迴歸 vs 分類問題的『評價標準』(metrics=["..."]):
☎迴歸問題:通常使用Mean Absolute Error(MAE),例如:metrics=["mae"],
☎分類問題:通常使用accuracy,例如:metrics=["accuracy"]
☎當樣本資料量小的時候,通常使用K-Fold方法使訓練的模型,才會更可靠
☎分類-範例:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
☎迴歸-範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(5).誤差名詞的定義:
☎mse 損失函數,即均方誤差(MSE,mean squared error),預測值與目標值之差的平方。這是回歸問題常用的損失函數。
☎平均絕對誤差(MAE,mean absolute error)。它是預測值與目標值之差的絕對值。
☎我們評估標準是MAE越小,即預測值與真實值越接近,模型效果越好。

(2).optimizer參數:優化器,就是所使用的『梯度下降法 gradient descent』,keras可以設定多種類的梯度下降法
☎範例:optimizer="adam"

(3).metrics參數:設定『訓練模型』,『評估模型』的評估標準,所以這個是個list清單[....]
迴歸問題通常使用『mae』
☎範例:metrics=["mae"]
☎平均絕對誤差(MAE,mean absolute error)。它是預測值與目標值之差的絕對值。
☎我們評估標準是MAE越小,即預測值與真實值越接近,模型效果越好。

(11-2b-6)訓練模型:
☎目的:把特徵資料數據,放入上面模型來訓練
☎指令:model.fit(設定參數)
☎範例:history = model.fit(X_train, Y_train, epochs=150, batch_size=10, verbose=0)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).epochs參數:epochs是訓練週期的次數,epochs=150代表總共訓練150次
(3).batch_size參數:batch_size是批次尺寸

(11-2b-7)評估模型的效能:
☎指令:model.evaluate(設定參數)
☎範例:mse,mae = model.evaluate(X_train, Y_train)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).verbose參數:訓練過程輸出方式,若verbose=0則不輸出資訊,若verbose=1則輸出資訊
☎訓練用資料集的損失函數 = 均方誤差(mse) = mse越小越好,代表誤差越小
☎訓練用資料集的評估效率 = 平均絕對誤差(mae) = mae越小越好,代表越接近標準答案

(11-2b-8)若要畫圖,則編譯模型的評估函數必須用全名(mean_absolute_error),不用簡稱(mae)
#16.編譯模型
model.compile(loss="mse", optimizer="adam", metrics=['mean_squared_error','mean_absolute_error'])

#17.訓練模型(用X_train, Y_train來做訓練)
history = model.fit(X_train, Y_train, epochs=500, batch_size=10, verbose=0)

#18.畫出val_loss(validation loss)歷史圖,當val_loss最低點就是最佳訓練週期
import matplotlib.pyplot as plt
loss = history.history['mean_squared_error']
epochs = range(1,len(loss)+1)
plt.plot(epochs, loss, "r", label="mse")
plt.title("Training_Loss(mse)")
plt.xlabel("epochs")
plt.ylabel("Accuracy")
plt.legend()
plt.show()

(11-2b-9)成果:




(11-2b-10)程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2c:使用定義函數來建立模型+編譯模型:model=def bulid_mode()
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎目的:迴歸問題(找出波士頓房價的趨勢線)

(11-2c-1)使用定義函數來建立模型:model=def bulid_mode():
☎程式碼:
#10.定義模型(加入三層網絡:輸入層,隱藏層,輸出層)
def build_model():
# 建立模型+編譯模型:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(32, input_shape=(X_train.shape[1],), activation="relu"))
model.add(tf.keras.layers.Dense(1))
model.summary()
model.compile(loss="mse", optimizer="adam", metrics=["mae"])
return model
☎注意:最後要加上『return model』

(11-2c-2)宣告模型變數:model=def bulid_mode():
☎程式碼:
# 宣告一個模型變數
model = build_model()

# 訓練模型(用X_train, Y_train來做訓練)
history = model.fit(X_train, Y_train, epochs=150, batch_size=10, verbose=0)


(11-2c-3)成果:




(11-2c-4)程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2-d:當資料集數目少時可用k-摺疊交叉驗證法(k fold cross validation)
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:當資料集數目少(只有500多筆資料),又要訓練,又要驗證,資料會不夠
☎改善方法:交叉驗證法(k fold cross validation),把資料集分成很多分隔區partitions,當一區作為驗證用時,其它區就當作訓練用


(11-2c-1)為什麼除了『訓練資料集,測試資料集』外,還要有『驗證資料集』?
☎(1)因為:若只用『訓練資料集,測試資料集』,往往會出現『過度擬合overfitting,泛化不足』,這可能是因為過度學習導致的
☎(2)所以,必須用『驗證資料集』,找出『最佳的訓練週期』
☎(3)若是已經找出『最佳的訓練週期』了,就可以在此週期下,重新只用『訓練資料集,測試資料集』來訓練模型

(11-2c-2)k-摺疊交叉驗證法:
☎程式碼:
☎nb_val_samples :每一折的樣本數。
☎nb_epochs = 80,nb_epochs是訓練週期數。
☎mae_scores = [],mae_scores清單變數,乃是記錄著每次迴圈評估模型的mae。
☎for i in range(k):共執行迴圈k=4次,用『切割運算子』取出第k個驗證資料集:X_val,Y_val
☎再用concatenate()函數取出剩下的折來建立訓練資料集:X_train_p,Y_train_p
程式碼

(11-2c-3)成果:



☎結果:共執行4次(即4折疊),每一折驗證資料的樣本數是101筆,最後顯示驗證資料,與測試資料的MSE,MAE。
☎MSE,MAE的單位是100美金/誤差。
☎例如:MAE=3.302,表示房價誤差=3305美金。

(11-2c-4)神經網絡模型程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2-e:使用四層神經網絡,來降低誤差
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:前面是三層神經網絡,現在測試使用四層神經網絡,是否可以降低誤差?
☎改善:用二層隱藏層,分別使用32個,16個神經元

(11-2c-1)程式碼:
☎使用11-2-d範例,來修改

(11-2c-2)成果:

☎測試資料集:MAE=2.223,表示房價誤差=2223美金。
☎表示誤差變小(房價誤差:由3305->2223美金)

(11-2c-3)神經網絡模型程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2-f:由『驗證資料集』找出避免overfitting的『最佳週期』後,就只用『訓練資料集,測試資料集』重新訓練模型
☎本範例方法:讀入csv,用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:前面是使用『訓練資料集,測試資料集,驗證資料集』,用『驗證資料集』,可以找出『最佳的訓練週期』
☎目的:一旦由『驗證資料集』找出避免overfitting的『最佳週期=80』後,就只用『訓練資料集,測試資料集』重新訓練模型

(11-2f-1)為什麼除了『訓練資料集,測試資料集』外,還要有『驗證資料集』?
☎(1)因為:若只用『訓練資料集,測試資料集』,往往會出現『過度擬合overfitting,泛化不足』,這可能是因為過度學習導致的
☎(2)所以,必須用『驗證資料集』,找出『最佳的訓練週期=80』
☎(3)若是已經找出『最佳的訓練週期』了,就可以在此週期下(80),重新只用『訓練資料集,測試資料集』來訓練模型

(11-2f-1)程式碼:
☎使用11-2-b範例,來修改

(11-2f-2)成果:

☎測試資料集:MAE=2.16,表示房價誤差=2160美金。
☎表示誤差變小(房價誤差:由3305->2223->2160美金)

(11-2f-3)神經網絡模型程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-2-g:同時一次儲存已經訓練好的模型『結構,權重』
☎本範例:用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:若已經訓練好模型,過了一段時間,要用這個模型來預測,就必須要先把已經訓練好的模型參數,儲存起來
☎目的:儲存已經訓練好的模型的『結構,參數』

(11-2g-1)儲存已經訓練好的模型的『結構,權重』參數,有兩種方法:
☎(1)同時一次儲存模型的『結構,權重』
☎(2)分開儲存模型的『結構,權重』

(11-2g-2)程式碼:
☎(1)同時一次儲存模型的『結構,權重』
# 儲存模型結構和權重 model.save("k11-2g-1.h5")

☎(2)分開儲存模型的『結構,權重』

(11-2g-3)成果(同時一次儲存)
(1)成果圖片:
☎輸入:ls,可以查詢目錄的檔案
☎輸入:cat k11-2g-1.h5,可以打開檔案



(2)神經網絡模型程式碼:
3.程式碼(anaconda程式碼)

範例11-2-h:一次讀入已經訓練好的模型『結構,權重』
☎本範例:用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:若已經訓練好模型,過了一段時間,要用這個模型來預測,就必須要先把已經訓練好的模型參數,儲存起來
☎目的:一次讀入已經訓練好的模型『結構,參數』

(11-2h-1)儲存已經訓練好的模型的『結構,權重』參數,有兩種方法:
☎(1)同時一次儲存模型的『結構,權重』
☎(2)分開儲存模型的『結構,權重』

(11-2h-2)程式碼:
☎(1)同時一次讀入模型的『結構,權重』
# 讀入模型
model = tf.keras.models.Sequential()
model = tf.keras.models.load_model("k11-2g-1.h5")

☎(2)分開讀入模型的『結構,權重』

(11-2h-3)成果(同時一次讀入模型的『結構,權重』)
(1)成果圖片:
☎注意三步驟:(必須在同一個cola檔案上執行,才能夠讀取到k11-2g-1.h5,若是分開兩個檔案執行,則*.h5會消失)
A.先執行:k11-2g-3的程式
B.然後執行:ls
C.然後執行:k11-2h-3的程式
☎輸入:ls,可以查詢目錄的檔案
☎輸入:cat k11-2g-1.h5,可以打開檔案



(2)神經網絡模型程式碼:
3.程式碼(anaconda程式碼)

範例11-2-i:分開儲存已經訓練好的模型『結構,權重』
☎本範例:用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:若已經訓練好模型,過了一段時間,要用這個模型來預測,就必須要先把已經訓練好的模型參數,儲存起來
☎目的:分開儲存已經訓練好的模型的『結構,參數』

(11-2i-1)儲存已經訓練好的模型的『結構,權重』參數,有兩種方法:
☎(1)同時一次儲存模型的『結構,權重』
☎(2)分開儲存模型的『結構,權重』

(11-2i-2)程式碼:
☎(1)同時一次儲存模型的『結構,權重』

☎(2)分開儲存模型的『結構,權重』
# 儲存模型結構
json_str = model.to_json()
with open("k11_2i_Model.config", "w") as text_file:
text_file.write(json_str)

# 儲存模型權重
model.save_weights("k11_2i_Model.weight")


(11-2i-3)成果(分開儲存模型的『結構,權重』)
(1)成果圖片:
☎注意3步驟:
A.先執行:k11-2i-3的程式
B.然後執行:ls
C.然後執行:cat k11_2i_Model.config,可以打開檔案




(2)神經網絡模型程式碼:
3.程式碼(anaconda程式碼)

範例11-2-j:分開讀入已經訓練好的模型『結構,權重』
☎本範例:用Keras預測預測波士頓房價/Boston Housing price regression
☎問題:若已經訓練好模型,過了一段時間,要用這個模型來預測,就必須要先把已經訓練好的模型參數,儲存起來
☎目的:分開讀入已經訓練好的模型的『結構,參數』

(11-2j-1)儲存已經訓練好的模型的『結構,權重』參數,有兩種方法:
☎(1)同時一次儲存模型的『結構,權重』
☎(2)分開儲存模型的『結構,權重』

(11-2j-2)程式碼:
☎(1)同時一次儲存模型的『結構,權重』

☎(2)分開儲存模型的『結構,權重』
# 儲存模型結構
json_str = model.to_json()
with open("k11_2i_Model.config", "w") as text_file:
text_file.write(json_str)

# 儲存模型權重
model.save_weights("k11_2i_Model.weight")

(11-2j-3)成果(分開讀入儲存模型的『結構,權重』)
(1)成果圖片:
☎注意三步驟:(必須在同一個cola檔案上執行,才能夠讀取到k11-2i-1.h5,若是分開兩個檔案執行,則*.h5會消失)
A.先執行:k11-2i-3的程式
B.然後執行:ls
C.然後執行:k11-2j-3的程式(讀取已經儲存的檔案)




(2)神經網絡模型程式碼:
3.程式碼(anaconda程式碼)

範例11-3-a:鳶尾花資料集(The iris dataset)的多元分類:讀入csv資料集
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras做鳶尾花資料集的多元分類/The iris dataset
☎目的:讀入鳶尾花資料集(The iris dataset),並印出前5筆



(11-3a-1)教學文件:
Keras之對鳶尾花識別
Keras多分類例項:鳶尾花
Classifying the Iris Data Set with Keras
Deep Learning with Keras on Iris Dataset
Keras之對鳶尾花識別

(11-3a-2)鳶尾花資料集欄位說明:


了解數據集

鳶尾花數據集是一個經典的機器學習數據集,非常適合用來入門。
鳶尾花數據集鏈接:下載鳶尾花數據集
鳶尾花數據集包含四個特徵和一個標籤。這四個特徵確定了單株鳶尾花的下列植物學特徵:

  • 花萼長度:sepal_length
  • 花萼寬度:sepal_width
  • 花瓣長度:petal_length
  • 花瓣寬度:petal_width
  • 鳶尾花種類:target(包括:setosa, versicolor, virginica)

該表確定了鳶尾花品種,品種必須是下列任意一種:

  • 山鳶尾 Iris-Setosa(0)
  • 雜色鳶尾 Iris-versicolor(1)
  • 維吉尼亞鳶尾 Iris-virginica(2)

數據集中三類鳶尾花各含有50個樣本,共150各樣本


(11-3a-2)讀入csv的方法:
(1)在anconda讀入csv:
import pandas as pd df = pd.read_csv("./diabetes.csv")

(2)在colaboratory讀入csv:方法1
☎注意:diabetes.csv已經上傳到google drive裡面了
在colaboratory的python讀入google drive裡面的diabetes.csv
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_csv("./diabetes.csv")



(3)在colaboratory讀入csv:方法2
☎注意:diabetes.csv在自己的個人電腦硬碟裡
#上傳diabetes.csv
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
# 確認diabetes.csv是否已上載
!ls *.* -l
# use Pandas to read diabetes.csv
df = pd.read_csv("./diabetes.csv")
print(df)


(11-3a-3)下載鳶尾花資料集(The iris dataset):
(1)下載鳶尾花csv資料集

(2)鳶尾花資料集說明:
☎資料集包含了150個樣本,都屬於鳶尾屬下的三個亞屬,分別是山鳶尾、變色鳶尾和維吉尼亞鳶尾。
☎四個特徵被用作樣本的定量分析,它們分別是花萼和花瓣的長度和寬度。基於這四個特徵的集合,費雪發展了一個線性判別分析以確定其屬種。


(11-3a-4)讀入csv檔案,印出前5筆,印出資料集的size(row,column)=(筆數,欄位數)
☎成果:

☎程式碼: 3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-3-b:繪圖(散佈圖,seabron繪圖庫):鳶尾花資料集
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras做鳶尾花資料集的多元分類/The iris dataset
☎目的:將鳶尾花資料集(The iris dataset),執行繪圖視覺化,做兩種繪圖:散佈圖scatter,seabron繪圖庫

(11-3b-1)教學文件:
Keras之對鳶尾花識別
Keras多分類例項:鳶尾花
Classifying the Iris Data Set with Keras
Deep Learning with Keras on Iris Dataset
Keras之對鳶尾花識別

(11-3b-2)顯示花瓣,花萼的長寬散佈圖:
☎紅色點:山鳶尾 Iris-Setosa(0)
☎綠色點:雜色鳶尾 Iris-versicolor(1)
☎黃色點:維吉尼亞鳶尾 Iris-virginica(2)

☎方法:為了顯示彩色圖,所以要把df(dataframe)的traget欄位,轉換成0~2的整數(Y)。
☎colmap[Y]:是讀取色彩對照表(對應到:red, green, yellow)
☎程式碼: 3.程式碼

df = pd.read_csv("./iris_data.csv")
target_mapping = {"setosa": 0,
"versicolor": 1,
"virginica": 2}
Y = df["target"].map(target_mapping)

# 使用Matplotlib顯示視覺化圖表
colmap = np.array(["r", "g", "y"])
plt.figure(figsize=(10,5))
plt.subplot(1, 2, 1)
plt.subplots_adjust(hspace = .5)
plt.scatter(df["sepal_length"], df["sepal_width"], color=colmap[Y])
plt.xlabel("Sepal Length")
plt.ylabel("Sepal Width")
plt.subplot(1, 2, 2)
plt.scatter(df["petal_length"], df["petal_width"], color=colmap[Y])
plt.xlabel("Petal Length")
plt.ylabel("Petal Width")
plt.show()

(11-3b-3)資料集視覺化:seabron繪圖庫
(1)seabron是一個功能強大的python繪圖庫,由於其簡易使用的特性,以及與pandas高度整合的特性,使得seaborn受到資料科學家的歡迎
(2)seaborn為python繪圖函式庫,以matplotlib為基礎封裝了許多實用的統計圖表
(3)參考:教學文件
(4)安裝seaborn:
pip install seaborn

(4)使用(x,y)繪製一個seaborn圖:
sns.relplot(x="total_bill", y="tip", data=tips)

(5)使用df(dataframe)繪圖
import seaborn as sns
sns.pairplot(df, hue="target")

☎成果:

☎程式碼: 3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

範例11-3-c:建立鳶尾花資料集(The iris dataset)的神經網絡模型,並輸入結構與權重檔案
☎人工智慧的最常見用途:分類,迴歸
☎本範例方法:讀入csv,用Keras做鳶尾花資料集的多元分類/The iris dataset
☎目的:讀入鳶尾花資料集(The iris dataset),建立神經網絡模型

(11-3c-1)教學文件:
Keras之對鳶尾花識別
Keras多分類例項:鳶尾花
Classifying the Iris Data Set with Keras
Deep Learning with Keras on Iris Dataset
Keras之對鳶尾花識別

(11-3c-2)建立深度學習神經網絡模型(四層):
☎輸入層:4個神經元(訓練特徵值的數目)
☎第1 dense隱藏層:6個神經元
☎第2 dense隱藏層:6個神經元
☎輸出層:3個神經元(三類花名)

(11-3c-3)建立四層神經層:
keras使用Sequential來建立神經層:
☎建立model指令:model = Sequential()
☎加入四層網絡:
範例:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(6, input_shape=(4,), activation="relu"))
model.add(tf.keras.layers.Dense(6, activation="relu"))
model.add(tf.keras.layers.Dense(3, activation="softmax"))

☎參數說明:
(1)第1層:輸入層,不需要建立
(2)第2層:隱藏層,model.add(Dense(設定參數))
☎參數units:神經元數目
☎參數input_shape:設定輸入層的形狀 =(樣本數,輸出維度)
例如:輸入向量size = 13 = X_train.shape[1],為13個特徵數
☎參數activation:設定激勵函數,例如:activation="relu",設定ReLU函數

(4)第3層:輸出層,model.add(Dense(設定參數))
☎範例:model.add(Dense(1))
建立一個輸出層,設定一個神經元

(11-3c-4)顯示神經網絡模型的摘要資訊:
☎指令:model.summary()

(11-3c-5)編譯模型:
☎目的:把上面keras建立好的三層神經網絡,編譯成低階的tensorflow計算圖
☎指令:model.compile(設定參數)
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])
☎參數說明:
(1).loss參數:損失函數的名稱,迴歸常用的函數,例如:均方誤差(mse)
下表是『激勵函數 vs 損失函數對應表』

☎二元分類,
所以『激勵函數/啟動函數 = sigmoid』,
所以『損失函數 = binary_crossentropy』

(2).迴歸問題損失函數:
☎迴歸和分類,必須使用不同的損失函數,
☎在迴歸中的損失函數:
通常使用:Mean Square Error(MSE)
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(3).在迴歸問題任務(對連續值的預測)中,常見的評估指標(Metric)有:
☎平均絕對誤差(Mean Absolute Error,MAE),例如:metrics=["mae"]
☎均方誤差(Mean Square Error,MSE),例如:metrics=["mse"]
☎均方根誤差(Root Mean Square Error,RMSE),例如:metrics=["rmse"]
☎平均絕對百分比誤差(Mean Absolute Percentage Error,MAPE),例如:metrics=["mape"]
☎其中用得最為廣泛的就是:MAE和MSE。
☎範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(4).比較:迴歸 vs 分類問題的『評價標準』(metrics=["..."]):
☎迴歸問題:通常使用Mean Absolute Error(MAE),例如:metrics=["mae"],
☎分類問題:通常使用accuracy,例如:metrics=["accuracy"]
☎當樣本資料量小的時候,通常使用K-Fold方法使訓練的模型,才會更可靠
☎分類-範例:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
☎迴歸-範例:model.compile(loss="mse", optimizer="adam", metrics=["mae"])

(5).誤差名詞的定義:
☎mse 損失函數,即均方誤差(MSE,mean squared error),預測值與目標值之差的平方。這是回歸問題常用的損失函數。
☎平均絕對誤差(MAE,mean absolute error)。它是預測值與目標值之差的絕對值。
☎我們評估標準是MAE越小,即預測值與真實值越接近,模型效果越好。

(2).optimizer參數:優化器,就是所使用的『梯度下降法 gradient descent』,keras可以設定多種類的梯度下降法
☎範例:optimizer="adam"

(3).metrics參數:設定『訓練模型』,『評估模型』的評估標準,所以這個是個list清單[....]
迴歸問題通常使用『mae』
☎範例:metrics=["mae"]
☎平均絕對誤差(MAE,mean absolute error)。它是預測值與目標值之差的絕對值。
☎我們評估標準是MAE越小,即預測值與真實值越接近,模型效果越好。

(11-3c-6)訓練模型:
☎目的:把特徵資料數據,放入上面模型來訓練
☎指令:model.fit(設定參數)
☎範例:history = model.fit(X_train, Y_train, epochs=150, batch_size=10, verbose=0)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).epochs參數:epochs是訓練週期的次數,epochs=150代表總共訓練150次
(3).batch_size參數:batch_size是批次尺寸

(11-3c-7)評估模型的效能:
☎指令:model.evaluate(設定參數)
☎範例:mse,mae = model.evaluate(X_train, Y_train)
☎參數說明:
(1).X, Y參數:X是輸入資料(特徵資料),Y是輸出資料(目標值,標籤資料)
(2).verbose參數:訓練過程輸出方式,若verbose=0則不輸出資訊,若verbose=1則輸出資訊
☎訓練用資料集的損失函數 = 均方誤差(mse) = mse越小越好,代表誤差越小
☎訓練用資料集的評估效率 = 平均絕對誤差(mae) = mae越小越好,代表越接近標準答案

(11-3c-9)成果:並輸入結構與權重檔案
A.先執行:k11-3c-c的程式
B.然後執行:ls(查看檔案)
C.然後執行:cat iris.h5(可以打開檔案)


(11-3c-10)程式碼:
3.程式碼(在colaboratory的python讀入個人電腦硬碟裡的資料集)

 

 
chp16. 使用Vislab做AI影像辨識(不用寫程式)
目錄 1.VisLab,VisCam簡介 2.VisLab,VisCam教學影片
3.範例1:Classification分類器:標記工具 4.範例2:Classification分類器:訓練工具 5.範例3:Classification分類器:驗證工具
6.範例4:Object Detection 物件偵測:標記工具 7.範例5:Object Detection 物件偵測:訓練工具 8.範例6:Object Detection 物件偵測:驗證工具
9.範例7:Segmentation 分割:標記工具 10.範例8:Segmentation 分割:訓練工具 11.範例9:Segmentation 分割:驗證工具
12.範例10:VisCam 13.VisLab 進階操作 &蒐集圖片方式

1.VisLab,VisCam簡介
VisLab:AI圖像檢測軟體
VisCam:AI影像辨識光學模組
VisLab,VisCam簡介簡報

2.VisLab簡介
(1)VisLab:免費,下載使用

☎VisLab軟體下載:
官網:下載VisLab
安裝時,會詢問序號,不理它,再開一次,即可

☎VisLab使用手冊:
官網:VisLab使用說明書

VisLab係由智泰科技耗時數年自主開發的AI模型訓練套裝軟體,可應用於各行各業上。
透過簡易且可視化的操作介面,讓未曾學習過程式語言與不孰悉AI資料庫的各界人士,都能藉由VisLab立即應用AI技術所帶來的便利性

(2)VisLab有影像辨識三大功能:
☎影像分類:辨識這張圖片上貓,狗,是撲克牌9,10,11,12,13,1
☎影像偵測:偵測這張圖片的兩個物件,框框1是貓,框框2是夠
☎影像分割:把這張圖片的貓的區域,分割出來(有範圍,面積),可應用於醫學影像辨識(辨識病灶區域)
成果圖片

(3)三種工具:
上述分類偵測分割三大功能,其中的每個功能皆有『標記、訓練、驗證』三個工具
成果圖片
成果圖片
成果圖片

(4)圖形化操作界面,不需要寫程式碼
在VisLab中有分類、偵測與分割功能,每種功能都具備標記、訓練與驗證工具,使用者透過圖片針對其目的輕鬆進行標記,標記後可依照需求調整參數進行訓練,
目前已有36種網路模型可供使用,訓練過程均可透過可視化介面控制,使用者亦可依照個人時間選擇中斷或接續訓練,最後訓練完成的AI模型,透過可視化的驗證工具輕鬆檢視其訓練成果,決定是否串接設備與重新標記或訓練的依據

(5)AI實力分析:
☎VisLab可以處理大多數的工業影像辨識專案。
☎VisLab可以處理大多數的學界影像辨識研究。
☎智泰科技所負責的業界AI專案,與自行下載的VisLab功能幾乎類似。
☎VisLab幾乎可以處理大多數的AI影像辨識問題。
(可以處理:車牌辨識,物種辨識,醫學影像辨識)
(無法處理:人臉辨識)

(5)各種實際應用:
智慧醫療(影像分割)
智慧醫療(影像分類)
智慧醫療(物件偵測)
鐵道安全檢查(物件偵測)
自動駕駛(影像分類)
智慧零售(物件偵測)

(6)最低硬體配備需求:
智慧醫療(影像分割)

2.VisCam簡介
(1)功能:
☎配備相機鏡頭,可以即時辨識
☎可以事先部署VisLab 的AI參數模型
VisCam功能
VisCam配備示意圖
為深度學習圖像辨識打造的檢測模組,可將VisLab輸出之檢測模型搭載到VisCam系統中,配合專屬的AI相機、光源進行產線即時智慧檢測。此外,VisCam也可同時作為資料蒐集器,截取、管理檢測圖像與資料庫,進而支援深度學習模型在VisLab中接續學習。


2.VisLab,VisCam教學影片
官網:教學用品
共9部教學影片。使用者可依據需求功能選擇觀看的段落,並搭配試用版軟體進行練習。

(1)VisLab軟體下載:
官網:下載VisLab
安裝時,會詢問序號,不理它,再開一次,即可

(1)VisLab使用手冊:
官網:VisLab使用說明書


(1)Classification 分類器
VisLab 教學影片1 - CFL 分類器 標記工具教學Classification Lable Tool
官網:VisLab 教學影片1
VisLab 教學影片2 - CFT 分類器 訓練工具教學Classification Trainer
官網:VisLab 教學影片2
VisLab 教學影片3 - CFV 分類器 驗證工具教學Classification Verify
官網:VisLab 教學影片3

(2)Object Detection 物件偵測
VisLab 教學影片4 - ODL 物件偵測 標記工具教學Object Detection Lable Tool
官網:VisLab 教學影片4
VisLab 教學影片5 - ODT 物件偵測 訓練工具教學Object Detection Trainer
官網:VisLab 教學影片5
VisLab 教學影片6 - ODV 物件偵測 驗證工具教學Object Detection Verify
官網:VisLab 教學影片6

(3)Segmentation 分割
VisLab 教學影片7 - SEL 分割 標記工具教學Segmentation Lable Tool
官網:VisLab 教學影片7
VisLab 教學影片7 - SEL 分割 標記工具教學Segmentation Lable Tool
VisLab 教學影片8 - SET 分割 訓練工具教學Segmentation Trainer
官網:VisLab 教學影片8
VisLab 教學影片7 - SEL 分割 標記工具教學Segmentation Lable Tool
VisLab 教學影片9 - SEV 分割 驗證工具教學Segmentation Verify
官網:VisLab 教學影片9

3.範例1:Classification分類器:標記工具
☎目的:把收集來的圖片素材,加上標記label(例如,貓,狗)
☎方法:使用分類器/標記工具

(1)Classification 分類器教學影片
VisLab 教學影片1 - CFL 分類器 標記工具教學Classification Lable Tool
官網:VisLab 教學影片1
VisLab分類器(操作篇)簡報
官網:VisLab使用說明書


(2)下載圖片素材檔案:
下載圖片素材檔案
☎圖片要分成三個目錄:train,test,output(名稱自訂,可以其它名稱)
示意圖

(3)圖片分類的操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)標記:振作步驟:
步驟一:先建立 train 、testtest 與output output 資料夾。
示意圖
步驟二:將照片分別放置 train 與testtest 資料夾中。
步驟三:開啟 VisLab VisLab VisLab,選取分類器
示意圖
步驟四:點選工具列下方第一個 「開新設定檔」,選取欲標記的資料夾 (train/test) (train/test)。
示意圖
示意圖
示意圖
步驟五:分類標籤新增名稱 (Cats 與Dogs) 並進行標記。
示意圖
進行標記
示意圖
示意圖
步驟六:標記完成,回首頁。

☎注意:先做train的標記
➜做完後,一定要先按Home首頁
➜才能自動產生一個標記xml檔案(LabelMap.pbtxt),才算完成
➜才能開始做下一個test目錄的標記

(5)標記:要記得完成三個目錄的標記(train, test, output):

4.範例2:Classification分類器:訓練工具
☎目的:把加上標記label(例如,貓,狗)圖片,進行訓練
☎方法:使用分類器/訓練工具

(1)Classification 分類器教學影片
VisLab 教學影片2 - CFT 分類器 訓練工具教學Classification Trainer
官網:VisLab 教學影片2
VisLab分類器(操作篇)簡報
官網:VisLab使用說明書

(3)圖片分類的操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)訓練:振作步驟:
步驟一:進入分類器的訓練工具後,從資料中依序將train、test與output資料夾。 資料夾。
示意圖
示意圖
示意圖
示意圖
步驟二:點選開始訓練,開始製作AI 模型檔。
示意圖
步驟三:訓練完成取得AI模型檔,回首頁。
示意圖
☎注意:先做train的標記
➜做完後,一定要先按Home首頁
➜才能自動產生一個標記xml檔案(LabelMap.pbtxt),才算完成
➜才能開始做下一個test目錄的標記


5.範例3:Classification分類器:驗證工具
☎目的:把已經訓練好的模型,拿來驗證圖片
☎方法:使用分類器/驗證工具

(1)Classification 分類器教學影片
VisLab 教學影片3 - CFV 分類器 驗證工具教學Classification Verify
官網:VisLab 教學影片3
VisLab分類器(操作篇)簡報
官網:VisLab使用說明書

(3)圖片分類的操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)驗證:振作步驟:
步驟一:進入分類器的驗證工具後,從資料中依序導入test資料夾與AI模型檔(放置於output資料夾中)。
示意圖
示意圖
示意圖

步驟二:點選開始分析。
示意圖
步驟三:分析完成,看成績。
示意圖
示意圖


6.範例4:Object Detection 物件偵測:標記工具
☎目的:把收集來的圖片素材,加上標記label(例如,撲克牌9,10,11,12,1)
☎方法:使用物件偵測/標記工具

(1)Object Detection 物件偵測教學影片
VisLab 教學影片4 - ODL 物件偵測 標記工具教學Object Detection Lable Tool
官網:VisLab 教學影片4
VisLab物件偵測(操作篇)簡報
官網:VisLab使用說明書

(2)下載圖片素材檔案:
下載圖片素材檔案
☎圖片要分成三個目錄:train,test,output(名稱自訂,可以其它名稱)
示意圖

(3)圖片物件偵測操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)標記:振作步驟:
步驟一:先建立 train、test 與output資料夾。
示意圖
步驟二:將照片分別放置 train 與test 資料夾中。
步驟三:開啟 VisLab,選取物件偵測工具
示意圖
步驟四:點選工具列下方第一個「開新設定檔」,取欲標記的資料夾 (train/test) (train/test) 。
示意圖
步驟五:分類標籤新增名稱 (nine (nine至ace) 並進行標記。
示意圖
示意圖
步驟六:標記完成,回首頁。
步驟七:再標記test目錄,再回首頁。

☎注意:先做train的標記
➜做完後,一定要先按Home首頁
➜才能自動產生一個標記xml檔案(LabelMap.pbtxt),才算完成
➜才能開始做下一個test目錄的標記


7.範例5:Object Detection 物件偵測:訓練工具
☎目的:把標記label(例如,撲克牌9,10,11,12,1)進行訓練
☎方法:使用物件偵測/訓練工具

(1)Object Detection 物件偵測教學影片
VisLab 教學影片5 - ODT 物件偵測 訓練工具教學Object Detection Trainer
官網:VisLab 教學影片4
VisLab物件偵測(操作篇)簡報
官網:VisLab使用說明書

(2)圖片物件偵測操作流程:
☎標記
☎訓練
☎驗證
示意圖

(3)訓練:振作步驟:
步驟一:進入物件偵測的訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 traintrain train、testtest 與output output output資料夾。
步驟二:點選開始訓練,製作AI模型檔。
示意圖
步驟三:訓練完成取得AI模型檔,回首頁。

(3)訓練參數說明:
☎招回率 (Recall) :又稱查全率,在資訊檢索系統中,找出相關料的筆數與文件庫中應有相關資料總比值。
☎精確率 (Precision):又稱查準率,在資訊檢索系統中,找出相關料的筆數與系統找出資料總比值。
☎F度量 (F-measure):是一種同時兼顧查準率(precision)與查全率(recall)
的度量方式,其公式為 2XPXR/(P+R 2XPXR/(P+R )

☎舉例: 狗共有 50 張圖片,而在系統回傳的 100 張圖片,只有 20 張是狗的圖片。
招回率: 20/50=0.4
精確率: 20/100=0.2
F度量: 2X0.4X0.2/(0.4+02)=0.27
示意圖


8.範例6:Object Detection 物件偵測:驗證工具
☎目的:驗證test標記label(撲克牌9,10,11,12,1)進行驗證
☎方法:使用物件偵測/驗證工具

(1)Object Detection 物件偵測教學影片
VisLab 教學影片6 - ODV 物件偵測 驗證工具教學Object Detection Verify
官網:VisLab 教學影片6
VisLab物件偵測(操作篇)簡報
官網:VisLab使用說明書

(2)圖片物件偵測操作流程:
☎標記
☎訓練
☎驗證
示意圖

(3)驗證:振作步驟:
步驟一:進入物件偵測 的驗證工具後,從資料中依序導入 test 資料夾與與 AI 模型檔(放置於output資料夾中 )。
示意圖
步驟二:點選開始分析。
步驟三:分析完成,看成績。
示意圖

(3)驗證參數說明:
示意圖
示意圖


9.範例7:Segmentation 分割:標記工具
☎目的:把收集來的圖片素材,加上標記label(例如,矩形,三角形,圓形)
☎方法:使用分割/標記工具

(1)Segmentation 分割教學影片
VisLab 教學影片7 - SEL 分割 標記工具教學Segmentation Lable Tool
官網:VisLab 教學影片7
官網:VisLab使用說明書

(2)下載圖片素材檔案:
下載圖片素材檔案
☎圖片要分成三個目錄:train,test,output(名稱自訂,可以其它名稱)
示意圖

(3)Segmentation 分割操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)標記:振作步驟:
步驟一:先建立 train、test 與output資料夾。
步驟二:將照片分別放置 train 與test 資料夾中。
步驟三:開啟 VisLab,選取Segmentation 分割工具
示意圖
步驟四:點選工具列下方第一個「開新設定檔」,取欲標記的資料夾 (train/test) (train/test) 。
示意圖
步驟五:分類標籤新增名稱 (矩形,三角形,圓形)。
步驟六:使用上方的『矩形工具,圓形工具,三角形工具』圈選範圍,並進行標記
步驟七:標記完成,回首頁。
步驟八:再標記test目錄,再回首頁。

☎注意:先做train的標記
➜做完後,一定要先按Home首頁
➜才能自動產生一個標記xml檔案(LabelMap.pbtxt),才算完成
➜才能開始做下一個test目錄的標記


10.範例8:Segmentation 分割:訓練工具
☎目的:把收集來的圖片素材,加上標記label(例如,矩形,三角形,圓形)
☎方法:使用分割/標記工具

(1)Segmentation 分割教學影片
VisLab 教學影片8 - SET 分割 訓練工具教學Segmentation Trainer
官網:VisLab 教學影片8
官網:VisLab使用說明書

(2)Segmentation 分割操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)分割:訓練步驟:
步驟一:進入物件偵測的訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 訓練工具後,從資料中依序將 traintrain train、testtest 與output output output資料夾。
步驟二:點選開始訓練,製作AI模型檔。
示意圖
步驟三:訓練完成取得AI模型檔,回首頁。




11.範例9:Segmentation 分割:驗證工具
☎目的:驗證test標記label(矩形,圓形,三角形)進行驗證
☎方法:使用分割/驗證工具

(1)Segmentation 分割教學影片
VisLab 教學影片9 - SEV 分割 驗證工具教學Segmentation Verify
官網:VisLab 教學影片9
官網:VisLab使用說明書

(2)Segmentation 分割操作流程:
☎標記
☎訓練
☎驗證
示意圖

(4)分割:驗證步驟:
步驟一:進入物件偵測 的驗證工具後,從資料中依序導入 test 資料夾與與 AI 模型檔(放置於output資料夾中 )。
示意圖
步驟二:點選開始分析。
步驟三:分析完成,看成績。
示意圖
示意圖

(3)驗證參數說明:
示意圖
示意圖



12.範例10:VisCam

1.VisCam簡介
(1)功能:
☎配備相機鏡頭,可以即時辨識
☎可以事先部署VisLab 的AI參數模型
VisCam功能
VisCam配備示意圖
為深度學習圖像辨識打造的檢測模組,可將VisLab輸出之檢測模型搭載到VisCam系統中,配合專屬的AI相機、光源進行產線即時智慧檢測。此外,VisCam也可同時作為資料蒐集器,截取、管理檢測圖像與資料庫,進而支援深度學習模型在VisLab中接續學習。

2.下載安裝VisCam
(1) ☎下載VisCam軟體
官網:下載VisCam軟體
注意:VisCam需要序號(要購買),VisLab是免費版。

2.若沒有webCam,可以用手機安裝iVCam,就可以用手機掃描物件,達成自動辨識
(1)iVCam的功能:
☎取代webCam,能夠把手機的鏡頭,同步轉送到電腦播放
☎注意:在校內使用iVCam,因為校內有封鎖,所以手機的上網必須登入校內wifi,才能使用
☎步驟1:電腦安裝iVCam,手機安裝iVCam
☎步驟2:手機的上網必須登入校內wifi
☎步驟3:查詢電腦的IP4位址

(2)安裝iVCam:
下載安裝iVCam
☎注意:安裝完iVCam,它會自動偵測需要安裝最新版本,還要再安裝一次iVCam。

(3)下載VisCam使用說明書:
下載VisCam使用說明書



13.VisLab 進階操作 &蒐集圖片方式

1.下載講義
下載講義

2.深度學習/資料查詢的工具1:kaggle
(1)功能:
☎在Kaggle上面還有一個Dataset專區。往往我們在做分析的時候,最缺的就是整理好的資料,如果要在自己用API或是爬蟲去抓資料,會耗費許多的時間跟精力,在Dataset專區我們可以看到許多已經被整理好的資料提供大家下載。
☎Kaggle是全世界公認最大的資料科學社群,在Kaggle上隨時都有各種資料分析的比賽正在進行,由於這些比賽都會提供高額的獎金,因此會吸引全世界優秀的資料科學家前來比賽,並有許多熱愛分享的科學家在比賽過後再討論區留下他們的當初思考問題的邏輯以及解題的脈絡,研讀上面的討論串對於提升自己各方面的思考能力有很大的幫助。
☎其他類似的網站像是KDD cup, 中國的天池、DataCastle、DataFountain。
☎在Kaggle上面的比賽有分不同的類別,對於剛入門的初學者來說,上面很多比賽並不是那麼的適合,比如說有些比賽光是資料集就30–40GB,對於一般人的電腦來說,這樣的資料量過大,可能光是試跑一次Model就要好幾天或是Memory Out、以及大部分的影像辨識比賽都需要專門的GPU硬體設備,如果只用CPU也會跑非常久。
(2)網站:
kaggle網站
網站使用教學

3.深度學習/資料查詢的工具2:papers with code
(1)功能:
☎最新機器學習論文哪裡找?免費平台 Papers with Code 可搜尋即時排名、抓code
☎隨著機器學習討論度越來越高,以此為主題的論文數量也越來越多了。要怎麼不花錢、不費時間,又能找到最新最優質的 AI 論文呢?別怕!論文搜尋神器 Papers with Code 可以解決你的困難
☎AI 所有領域最優資料搜尋神器」— Papers with Code
☎網站上有超過 2500 多個排行榜和 20,000 多個論文結果。此外,結果現在可以直接鏈接到 arXiv 中的表格,只需要輕輕一點 result,就能夠提取出論文結果來
(2)網站:
papers with code網站
papers with code網站使用教學

4.自己收集圖片:到google輸入:批量圖片下載
到google輸入:批量圖片下載

5.使用Chrome 擴充功能:Imageye 免費圖片下載器,批次下載網頁所有圖檔
Imageye使用教學
play store下載:Image downloader - Imageye




 

a