目錄介紹
為什麼要使用別人的cnn?
實現vgg16
應用於yale資料集
下一步?
如果您看過《
少數派報告》
電影,您可能還記得湯姆
·克魯斯(
tom cruise
)走進一家
gap2020
年。我們不需要視網膜掃瞄器,因為我們擁有
人工智慧(ai
)和機器學習(ml
)! 在本系列中,我們將向您展示如何使用深度學習進行面部識別,然後基於被識別的面部,使用神經網路
語音合成
(tts
我們假設您熟悉
ai/ml
的基本概念,並且可以找到使用
python
的方法。
到目前為止,我們已經完成了設計、實現和訓練自己的
cnn以進行人臉識別所需的一切。在本文中,我們將**另一種方法——使用預先訓練的
vgg(牛津大學的
visual geometry group
)模型。這些
cnn已針對大型資料集進行了設計和訓練,並取得了出色的效果。
為什麼我們要重用別人為資料集設計和訓練的
cnn,這顯然不同於我們的資料集?好吧,主要原因是有人花了大量的
cpu/gpu
時間在龐大的資料集上訓練這些模型。我們可以充分利用這項訓練。在另一種模型中重用乙個已經訓練好的
cnn的想法被稱為
「遷移學習」。
vgg16
,vgg19
,resnet50
,inceptionv3
和xception
是一些著名的
vgg模型。它們具有不同的體系結構,並且都可以在
keras
中使用。這些模型均在包含約
120萬幅影象的
imagenet
資料集上進行了訓練。
在本文中,我們將改編
vgg16模型。
vgg16
架構圖顯示此
cnn的輸入定義為(
224、
224、
3)。因此,如果要使此
cnn適應我們的問題,我們有兩種選擇。我們可以剪裁和調整我們的影象到
224 x 224
,或者,我們可以將
vgg16
的輸入層更改為彩色影象(
rgb)的
(our_img_width
,our_img_height,3
)或灰度影象的(
our_img_width
,our_img_height,1
)。 請注意,
vgg16
的輸出層包含
1,000
個類。由於我們的問題沒有太多可能的類,因此我們必須更改輸出層的形狀。
我們將使用
vgg16
作為基本模型,並從中得出新的
cnn – vggnet
。這個新的
cnn將具有
vgg16
的層和權重,並在輸入層(以使其適應我們的影象寬度、高度和配色方案)以及輸出層(以使其適應我們的分類數量)進行一些修改。
為了實現我們的自定義
vggnet
模型,讓我們建立乙個從
mlmodel
繼承的類,就像在
所做的一樣。在名為
vggmodel
的類中,除了
init_model()
以外的所有方法都將具有與我們的
convolutionalmodel
類相同的實現。**如下所示:
def init_model(self):
base_model = vgg16(weights=constant.imagenet, include_top=false,
input_tensor=input(shape=(constant.img_width,
constant.img_height, 3)), pooling='max', classes=15)
base_model.summary()
for layer in base_model.layers:
layer.trainable = false
x = base_model.get_layer('block5_pool').output
# stacking a new ****** convolutional network on top of it
x = convolution2d(64, 3)(x)
x = maxpooling2d(pool_size=(2, 2))(x)
x = flatten()(x)
x = dense(constant.number_fully_connected, activation=constant.relu_activation_function)(x)
x = dense(self.n_classes, activation=constant.softmax_activation_function)(x)
self.vgg = model(inputs=base_model.input, outputs=x)
self.vgg.summary()
請注意,我們在
cnn的末尾新增了以下幾層:
flatten
,dense
,maxpooling
和dense
。我們附加到
vgg末端的
「mini-cnn」
的目的是連線其
block5_pool
,並使其以正確的類數適合我們的問題。
另外,我們將新增的圖層的
layer.trainable
屬性設定為
false
。這樣,我們就可以通過額外的訓練來保持原始模型的權重,我們必須進行這些訓練才能適應新的圖層。您可以通過呼叫
self.vgg.summary()
以獲得修改後的模型的完整描述。
我們在類的建構函式中使用以下
loss
和optimizer
函式:
def __init__(self, dataset=none):
super().__init__(dataset)
opt = keras.optimizers.adam(learning_rate=0.001)
self.vgg.compile(loss=keras.losses.binary_crossentropy,
optimizer=opt,
metrics=[constant.metric_accuracy])
現在,將
vggnet
模型應用於
yale face
資料集。哇:我們僅在三個時代就達到了
93%以上的準確率!
cnn在經過
50個紀元後,為我們提供了約
85%的準確性。因此,使用預訓練模型已大大改善了演算法的收斂性。
tts
課程報名 基於模型訓練平台快速打造 AI 能力
我們常說的 ai 通用能力往往不針對具體的行業應用,而是主要解決日常或者泛化的問題,很多技術企業給出的方案是通用式的,比如通用文字識別,無論識別身份證 駕駛證 行駛證等,任何一張訓練後的模型都會盡可能去識別文字內容。正常 ai 模型開發過程包括資料標註,模型訓練,模型部署幾個流程,但是不同應用 不同...
華為雲技術分享 網路場景AI模型訓練效率實踐
摘要 問題 kpi異常檢測專案需要對裝置內多模組 多型別資料,並根據波形以及異常表現進行分析,這樣的資料量往往較大,對記憶體和效能要求較高。同時,在設計優化演算法時,需要快速得到訓練及測試結果並根據結果來調整演算法,因此進一步要求計算記憶體和效能達到較高的水平。當前,本地安全pc效能難以滿足除錯要求...
模型訓練和模型擬合的幾點理解
模型訓練和模型擬合的幾點理解,歡迎大牛指點 對於我們日常工作,拿到乙個挖掘專案,一般都是先走一遍標準化的資料流程,效果好大家歡喜,效果不好各種調參。這裡有幾點想說 1 在開始挖掘專案之前,是否有評估挖掘專案的可行性?2 挖掘專案可行,現有的資料是否可以支撐專案的開展?3 如何判斷現有資料可支撐需求呢...