Python怎么提取圖像顏色?
回答:python;提取圖像顏色的方法如下::。
#-*-coding:CP936-*-
從ctypes導(dǎo)入*
#介紹winapi
gdi32
用戶32
#獲取句柄
hdc(無)
#獲取指定像素的顏色
c(hdc,100,50)
#打印從十進制轉(zhuǎn)換為十六進制的顏色。
打印十六進制(c).
僅供你參考。
如何使用Keras函數(shù)式API進行深度學(xué)習(xí)?
可以說,KerasPython庫使得創(chuàng)建深度學(xué)習(xí)模型變得快速而簡單。
sequenceAPI使您能夠為大多數(shù)問題逐層創(chuàng)建模型。當(dāng)然也是有限制的,就是不允許你創(chuàng)建共享層或者多輸入多輸出的模型。
Keras中的函數(shù)式API是創(chuàng)建模型的另一種,它具有更大的靈活性,包括創(chuàng)建更復(fù)雜的模型。
在本教程中,您將學(xué)習(xí)如何使用Keras中更靈活的函數(shù)式API來定義深度學(xué)習(xí)模型。
完成本教程后,您將了解:
順序API和函數(shù)API的區(qū)別。
如何使用函數(shù)式API定義簡單的多層感知器、卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)模型?
如何定義一個具有共享層和多個輸入輸出的更復(fù)雜的模型。
教程概述
本教程涵蓋六個部分,即:
順序模型
功能模型
3.標(biāo)準網(wǎng)絡(luò)模型
4.共享層模型
5.多輸入多輸出模型
6.最佳實踐
序列模型
Keras提供了一個序列模型API。
這是一種創(chuàng)建深度學(xué)習(xí)模型的方法,其中創(chuàng)建一個序列類的實例,并創(chuàng)建一個模型層并添加到其中。
例如,您可以將層定義為數(shù)組,并將其傳遞給序列:
從導(dǎo)入序列
從導(dǎo)入密集
模型順序([密集(2,input_dim1),密集(1)])
此外,還可以分段添加層:
模型順序()
(Dense(2,input_dim1))
(密集(1))
可以說,在大多數(shù)情況下,序列模型API非常適合開發(fā)深度學(xué)習(xí)模型,但也有一定的局限性。
例如,定義一個可能有多個不同的輸入源并可以生成多個輸出目標(biāo)或重用層的模型并不容易。
KerasfunctionalAPI提供了一種更靈活的來定義模型。
特別是,它使您能夠決定意味著具有多個輸入或輸出以及共享層的模型。不僅如此,它還使你能夠定義一個特定的非循環(huán)網(wǎng)絡(luò)圖。
通過創(chuàng)建層的實例并將它們直接成對連接,然后定義模型,將層指定為模型的輸入和輸出,來定義模型。
接下來,讓我們讓我們來看看KerasfunctionalAPI的三個獨特方面:
定義輸入
與順序模型不同,您必須創(chuàng)建和定義獨立的輸入圖層來指定輸入數(shù)據(jù)的形狀。
輸入層接受一個形狀參數(shù),即一個元組,它表示輸入數(shù)據(jù)的維度。。
如果輸入數(shù)據(jù)是一維的,比如多層感知器,那么這個形狀必須能夠清晰地為訓(xùn)練網(wǎng)絡(luò)劃分數(shù)據(jù)過程中使用的小批量的形狀留出空間。因此,此形狀數(shù)組始終由最后一個維度(2)定義,例如:
從導(dǎo)入輸入
可見輸入(形狀(2,)
關(guān)節(jié)層
模型中的層是成對連接的。
這是通過在定義每個新層時指定輸入源來實現(xiàn)的。這里使用括號符號,以便在創(chuàng)建層之后,指定來自當(dāng)前層輸入源的層。
讓讓我們用一個簡短的例子來說明這一點。我們可以如上所述創(chuàng)建輸入層,然后創(chuàng)建一個隱藏層作為密集層,只接受來自輸入層的輸入。
隱密(2)(可見)
注意能見度。創(chuàng)建密集圖層后,將輸入圖層的輸出與密集隱藏圖層連接作為輸入。
通過這種,各層可以一個接一個地連接起來,從而使功能API變得靈活。例如,您可以看到開始定義臨時層圖是多么容易。
創(chuàng)建模型
在創(chuàng)建所有模型層并將它們連接在一起之后,您必須定義模型。
像sequenceAPI一樣,模型是你可以總結(jié)、擬合、評估和預(yù)測的東西。
Keras提供了一個模型類,您可以使用它從創(chuàng)建的層創(chuàng)建一個模型。要求是您只能指定輸入和輸出層。例如:
從導(dǎo)入模型
模型模型(inputsvisible,outputshidden)
現(xiàn)在我們已經(jīng)知道了KerasfunctionalAPI的所有關(guān)鍵部分,讓讓我們定義一組不同的模型,并對它們進行一些練習(xí)。
每個示例都是可執(zhí)行的,顯示結(jié)構(gòu)并創(chuàng)建圖的圖表。這樣做的好處是,你可以清楚地知道你在定義什么。
希望以后你想用函數(shù)式API定義自己的模型時,這些例子能給你提供模板。
開始使用函數(shù)式API時,最好先了解一些標(biāo)準的神經(jīng)網(wǎng)絡(luò)模型是如何定義的。
在本節(jié)中,我們將定義一個簡單的多層感知器,卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)。
這些例子將為理解下面更詳細的例子打下基礎(chǔ)。
多層感知器
在本節(jié)中,我們定義了一個用于二進制分類的多層感知器模型。
該模型有10個輸入,3個隱層分別有10、20和10個神經(jīng)元,一個輸出層只有一個輸出。校正的線性激活函數(shù)用于每個隱藏層,sigmoid激活函數(shù)用于二進制分類的輸出層。
#多層感知機
從keras.utils導(dǎo)入繪圖_模型
可視輸入(形狀(10,)
hidden1Dense(10,activationrelu)(可見)
hidden2Dense(20,activationrelu)(hidden1)
hidden3Dense(10,activationrelu)(hidden2)
輸出密集(1,activationsigmoid)(隱藏3)
模型模型(輸入可見,輸出輸出)
#總結(jié)圖層
打印(())
#繪圖圖表
plot_model(模型,至文件多層感知器_)
運行示例以顯示網(wǎng)絡(luò)的結(jié)構(gòu):
模型圖的草圖也被創(chuàng)建并保存到一個文件中。
多層感知器網(wǎng)絡(luò)圖
卷積神經(jīng)網(wǎng)絡(luò)
在本節(jié)中,我們將定義一個用于圖像分類的卷積神經(jīng)網(wǎng)絡(luò)。
該模型接收規(guī)格為64×64的黑白圖像作為輸入,然后有一系列卷積層和池層作為特征提取器,接著是完全連通層來解釋特征,還有一個sigmoid激活函數(shù)用于兩類預(yù)測。
#卷積神經(jīng)網(wǎng)絡(luò)
從導(dǎo)入Conv2D
從導(dǎo)入MaxPooling2D
可視輸入(shape(64,64,1))
conv1Conv2D(32,kernel_size4,activationrelu)(可見)
pool1MaxPooling2D(pool_size(2,2))(conv1)
conv2Conv2D(16,kernel_size4,activationrelu)(池1)
pool2MaxPooling2D(pool_size(2,2))(conv2)
hidden1Dense(10,activationrelu)(pool2)
輸出密集(1,activationsigmoid)(hidden1)
plot_model(模型,to_卷積_neural_)
運行示例以總結(jié)模型層:
模型圖的草圖也被創(chuàng)建并保存到一個文件中。
卷積神經(jīng)網(wǎng)絡(luò)圖
循環(huán)神經(jīng)網(wǎng)絡(luò)
在本節(jié)中,我們將定義一個用于序列分類的長短記憶循環(huán)神經(jīng)網(wǎng)絡(luò)。
該模型期望將要素的100個時間步長作為輸入。該模型有一個用于從序列中提取特征的LSTM隱藏層,一個用于解釋LSTM輸出的全連接層,以及一個用于二元預(yù)測的輸出層。
#遞歸神經(jīng)網(wǎng)絡(luò)
從LSTM進口
可視輸入(shape(100,1))
隱藏1LSTM(10)(可見)
hidden2Dense(10,activationrelu)(hidden1)
輸出密集(1,activationsigmoid)(隱藏2)
plot_model(model,to_filerecurrent_neural_)
運行示例來總結(jié)模型層。
循環(huán)神經(jīng)網(wǎng)絡(luò)圖
多個層可以共享一個層的輸出。
例如,同一輸入可能有多個不同的特征提取層,或者使用多個層來解釋一個特征提取層的輸出。
讓讓我們看看這兩個例子。
共享輸入層
在本節(jié)中,我們定義了多個卷積層,這些卷積層具有不同大小的核來解釋圖像輸入。
該模型使用大小為64×64像素的黑白圖像。有兩個CNN特征提取子模型共享該輸入。第一個內(nèi)核大小是4,第二個內(nèi)核大小是8。這些特征提取子模型的輸出被壓縮成向量,連接到一個長向量,并且在最終輸出層中的二進制分類之前被傳遞到一個完全連接的層用于解釋。
#共享輸入層
從導(dǎo)入展平
從導(dǎo)入連接
#輸入層
#第一個特征提取r
flat1Flatten()(池1)
#第二特征提取器
conv2Conv2D(16,kernel_size8,activationrelu)(可見)
flat2Flatten()(池2)
#合并特征提取器
合并連接([平面1,平面2])
#解釋層
hidden1Dense(10,activationrelu)(合并)
#預(yù)測輸出
plot_model(model,to_fileshared_input_)
共享輸入的神經(jīng)網(wǎng)絡(luò)圖
共享特征提取層
在本節(jié)中,我們將使用兩個平行的子模型來解釋用于序列分類的LSTM特征提取器的輸出。
模型的輸入是一個特征的100個時間步。一個具有10個存儲單元的LSTM層來解釋該序列。第一種解釋模型是淺層單一全連通層,第二種是深層三層模型。兩個解釋性模型的輸出連接到一個長向量,并傳遞到輸出層進行二進制預(yù)測。
#共享特征提取層
#定義輸入
#特征提取
摘錄1LSTM(10)(可見)
#第一個解釋模型
interp1Dense(10,activationrelu)(extract1)
#第二種解釋模式
interp11Dense(10,activationrelu)(extract1)
interp12密集(20,activationrelu)(interp11)
interp13Dense(10,activationrelu)(interp12)
#合并解釋
合并連接([interp1,interp13])
#輸出
輸出密集(1,activationsigmoid)(合并)
plot_model(模型,到文件共享特征_)
共享特征提取層的神經(jīng)網(wǎng)絡(luò)圖
功能aPI還可以用于開發(fā)具有多種輸入的更復(fù)雜的模型,這些模型可能有不同的形式。它還可以用于開發(fā)產(chǎn)生多種輸出的模型。
我們將在本節(jié)中查看每個示例。
多輸入模型
我們將開發(fā)一個圖像分類模型,它以兩個版本的圖像作為輸入,每個版本的大小都不同。具體來說就是黑白64×64版本和彩色32×32版本。在每個模型上運行單獨的特征提取CNN模型,然后將兩個模型的結(jié)果連接起來進行解釋和最終預(yù)測。
注意,在創(chuàng)建Model()實例時,我們將兩個輸入層定義為數(shù)組。詳情如下:
模型模型(輸入[可視1,可視2],輸出輸出)
一個完整的例子如下:
#多個輸入
#第一個輸入模型
visible1輸入(shape(64,64,1))
conv11Conv2D(32,kernel_size4,activationrelu)(visible1)
pool11MaxPooling2D(pool_size(2,2))(conv11)
conv12Conv2D(16,kernel_size4,activationrelu)(池11)
pool12MaxPooling2D(pool_size(2,2))(conv12)
flat1Flatten()(池12)
#第二個輸入模型
visible2輸入(shape(32,32,3))
conv21Conv2D(32,kernel_size4,activationrelu)(visible2)
pool21MaxPooling2D(pool_size(2,2))(conv21)
conv22Conv2D(16,kernel_size4,activationrelu)(池21)
pool22MaxPooling2D(pool_size(2,2))(conv22)
flat2Flatten()(池22)
#合并輸入模型
#解釋模型
plot_model(model,to_filemultiple_)
模型圖的草圖被創(chuàng)建并保存到文件中。
多輸入的神經(jīng)網(wǎng)絡(luò)圖
多輸出模型
在本節(jié)中,我們將開發(fā)一個可以執(zhí)行兩種不同類型的系統(tǒng)。預(yù)測模型。給定一個100時間步長的特征輸入序列,模型將對該序列進行分類,并輸出一個具有相同長度的新序列。
LSTM層解釋輸入序列并返回每個時間步長的隱藏狀態(tài)。第一個輸出模型創(chuàng)建堆棧LSTM,解釋要素并進行二元預(yù)測。第二個輸出模型使用相同的輸出圖層對每個輸入時間步長進行實值預(yù)測。
#多個輸出
從導(dǎo)入時間分布
提取LSTM(10,return_sequencesTrue)(可見)
#分類輸出
第11課LSTM(10)(摘錄)
第12類密集(10,activationrelu)(第11類)
output1Dense(1,activationsigmoid)(class12)
#序列輸出
output2時間分布式(Dense(1,activationlinear))(提取)
模型模型(inputsvisible,outputs[output1,output2])
plot_model(model,to_filemultiple_)
多輸出神經(jīng)網(wǎng)絡(luò)圖
在這一節(jié)中,我將為您提供一些建議,以便在定義自己的模型時充分利用函數(shù)式API。
變量名一致:輸入層(可見)、輸出層(輸出)甚至隱藏層(hidden1、hidden2)使用同一個變量名。這將有助于正確連接它們。
審查層總結(jié):堅持總結(jié)歸納模型,審查層輸出,以確保模型按預(yù)期連接。
審查圖:不斷創(chuàng)建模型圖的圖,并審查它,以確保所有的東西都按照您的意愿放在一起。
命名層:當(dāng)查看模型圖的概要和草圖時,您可以為所使用的層指定名稱。例如:Dense(1,名為hidden1)。
單獨的子模型:考慮開發(fā)單獨的子模型,最后將它們組合在一起。