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