丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

本文作者: AI研習(xí)社-譯站 2019-01-21 09:59
導(dǎo)語(yǔ):如果沒(méi)有遷移學(xué)習(xí),實(shí)現(xiàn)機(jī)器學(xué)習(xí)對(duì)于初學(xué)者來(lái)說(shuō)是一件非常艱難的事情。
初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :

Keras Transfer Learning For Beginners

作者 | Aditya Ananthram

翻譯 | 鄧普斯?杰弗、斯蒂芬?二狗子

校對(duì) | 鄧普斯?杰弗       校對(duì) | 鄧普斯?杰弗     整理 | 菠蘿妹

原文鏈接:

https://towardsdatascience.com/keras-transfer-learning-for-beginners-6c9b8b7143e

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

本博客由3部分組成:

  1. 什么是遷移學(xué)習(xí)?

  2. 為什么遷移學(xué)習(xí)如此有效?

  3. 使用遷移學(xué)習(xí)實(shí)現(xiàn)一個(gè)圖像識(shí)別器。

直接訪(fǎng)問(wèn)Github上的代碼。

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

“夜晚的星系”由布萊恩高夫在 Unsplash 發(fā)布  


  什么是遷移學(xué)習(xí)?

如果沒(méi)有遷移學(xué)習(xí),實(shí)現(xiàn)機(jī)器學(xué)習(xí)對(duì)于初學(xué)者來(lái)說(shuō)是一件非常艱難的事情。在機(jī)器學(xué)習(xí)底層上,涉及計(jì)算從輸入側(cè)映射到輸出之間的函數(shù)。函數(shù)本身只是一些加法和乘法的計(jì)算,當(dāng)通過(guò)非線(xiàn)性激活函數(shù)和一些堆疊的神經(jīng)網(wǎng)絡(luò)層,可以構(gòu)建這樣的具有學(xué)習(xí)能力的函數(shù),只要有足夠的數(shù)據(jù)可供學(xué)習(xí),并且有巨大的計(jì)算能力,就可以依葫蘆畫(huà)瓢地學(xué)習(xí)。

歡迎來(lái)到深度學(xué)習(xí)。

卷入神經(jīng)網(wǎng)絡(luò)在訓(xùn)練足夠的數(shù)據(jù)時(shí)可以學(xué)習(xí)極其復(fù)雜的映射函數(shù)。我們還不能理解卷積網(wǎng)絡(luò)是如何學(xué)習(xí)這種復(fù)雜的映射關(guān)系。

在基本層面上,CNN(卷積神經(jīng)網(wǎng)絡(luò))的權(quán)重由過(guò)濾器組成。把一個(gè)過(guò)濾器想象成一個(gè)由某些數(shù)字組成的(n*n)矩陣?,F(xiàn)在,這個(gè)過(guò)濾器對(duì)輸入的圖像進(jìn)行卷積(滑動(dòng)和乘法)。假設(shè)輸入圖像的大小為(10,10),過(guò)濾器的大小為(3,3),首先將過(guò)濾器與輸入圖像左上角的9個(gè)像素相乘,此相乘產(chǎn)生另一個(gè)(3,3)矩陣。該矩陣的9個(gè)像素值相加,該值成為CNN第2層左上角的單個(gè)像素值。

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

卷積網(wǎng)絡(luò)的表示

CNN的訓(xùn)練基本上包括在每個(gè)過(guò)濾器上找到正確的值,這樣當(dāng)輸入圖像通過(guò)多層時(shí),激活最后一層的某些神經(jīng)元,從而預(yù)測(cè)正確的類(lèi)別。

盡管對(duì)于小型項(xiàng)目來(lái)說(shuō),從頭開(kāi)始訓(xùn)練CNN是可能的,但大多數(shù)應(yīng)用程序都需要對(duì)非常大的CNN進(jìn)行訓(xùn)練,正如您所猜測(cè)的,這需要非常大量的數(shù)據(jù)處理和計(jì)算能力。而這兩個(gè)都不是那么容易被實(shí)現(xiàn)的。

這就是遷移學(xué)習(xí)的作用所在。在遷移學(xué)習(xí)中,我們?nèi)∫粋€(gè)已經(jīng)訓(xùn)練過(guò)的模型的預(yù)先訓(xùn)練的權(quán)重(一個(gè)已經(jīng)在1000個(gè)類(lèi)別的數(shù)百萬(wàn)張圖片上訓(xùn)練過(guò)的權(quán)重,在幾天的高功率GPU上訓(xùn)練過(guò)的權(quán)重),并使用這些已經(jīng)學(xué)習(xí)過(guò)的特征來(lái)預(yù)測(cè)新的類(lèi)別。

遷移學(xué)習(xí)的優(yōu)勢(shì)在于:

1:不需要一個(gè)非常大的訓(xùn)練數(shù)據(jù)集。

2:不需要太多的計(jì)算能力,因?yàn)槲覀兪褂玫氖穷A(yù)先訓(xùn)練好的權(quán)重,只需要學(xué)習(xí)最后幾層的權(quán)重。

有幾個(gè)模型已經(jīng)在圖像網(wǎng)絡(luò)數(shù)據(jù)集上進(jìn)行了訓(xùn)練,并且已經(jīng)開(kāi)放源代碼。

例如,vgg-16、vgg-19、inception-v3等。有關(guān)這些型號(hào)的更多詳細(xì)信息,請(qǐng)閱讀此處的官方keras文檔。


  為什么遷移學(xué)習(xí)如此有效?

為了了解為什么遷移學(xué)習(xí)如此有效,我們必須首先看看卷積神經(jīng)網(wǎng)絡(luò)的不同層真正學(xué)習(xí)的是什么。

當(dāng)我們?cè)谝唤M圖像上訓(xùn)練一個(gè)深卷積神經(jīng)網(wǎng)絡(luò)時(shí),在訓(xùn)練過(guò)程中,通過(guò)在每一層圖像上應(yīng)用多個(gè)過(guò)濾器,圖像通過(guò)網(wǎng)絡(luò)。過(guò)濾矩陣的值與每層圖像的激活值相乘。最后一層的激活用于確定圖像屬于哪個(gè)類(lèi)。

當(dāng)我們訓(xùn)練一個(gè)深層網(wǎng)絡(luò)時(shí),我們的目標(biāo)是在每個(gè)濾波器矩陣上找到最佳值,這樣當(dāng)圖像通過(guò)網(wǎng)絡(luò)傳播時(shí),輸出激活可以用來(lái)精確地找到圖像所屬的類(lèi)。尋找這些濾波器矩陣值的過(guò)程是梯度下降。

當(dāng)我們?cè)贗mageNet數(shù)據(jù)集上訓(xùn)練一個(gè)conv網(wǎng)絡(luò),然后看看conv網(wǎng)絡(luò)的每一層上的過(guò)濾器學(xué)會(huì)了識(shí)別什么,或者每個(gè)過(guò)濾器被激活了什么,我們就能看到一些真正有趣的東西。

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

conv網(wǎng)絡(luò)前幾層的過(guò)濾器學(xué)習(xí)識(shí)別顏色和某些水平和垂直線(xiàn)。

接下來(lái)的幾層慢慢地學(xué)習(xí)如何使用在前幾層中學(xué)習(xí)到的線(xiàn)條和顏色來(lái)識(shí)別細(xì)小的形狀。

然后,下一層學(xué)習(xí)識(shí)別紋理,然后部分對(duì)象,如腿、眼睛、鼻子等。

最后,最后一層中的過(guò)濾器被諸如狗、汽車(chē)等整個(gè)物體激活。

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

現(xiàn)在讓我們開(kāi)始遷移學(xué)習(xí)。它之所以如此有效,是因?yàn)槲覀兪褂昧艘粋€(gè)對(duì)ImageNet數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練的網(wǎng)絡(luò),并且該網(wǎng)絡(luò)已經(jīng)學(xué)會(huì)識(shí)別初始層中不同對(duì)象的微小形狀和小部分。通過(guò)使用預(yù)訓(xùn)練網(wǎng)絡(luò)來(lái)進(jìn)行遷移學(xué)習(xí),我們只需在預(yù)訓(xùn)練網(wǎng)絡(luò)的末尾添加一些密集的層,然后學(xué)習(xí)這些已經(jīng)學(xué)習(xí)的特性的組合有助于識(shí)別新數(shù)據(jù)集中的對(duì)象。

因此,我們只訓(xùn)練了幾個(gè)密集層。此外,我們使用這些已經(jīng)學(xué)習(xí)過(guò)的瑣碎特性的組合來(lái)識(shí)別新對(duì)象。所有這些都有助于使訓(xùn)練過(guò)程非常快速,與從頭開(kāi)始訓(xùn)練conv net相比,所需的訓(xùn)練數(shù)據(jù)非常少。


  現(xiàn)在讓我們使用Keras中的遷移學(xué)習(xí)建立一個(gè)實(shí)際的圖像識(shí)別模型。

我們將在這里使用的模型是MobileNet。

MobileNet是一種模型,它可以提供相當(dāng)好的圖像網(wǎng)絡(luò)分類(lèi)精度并占用非常少的空間。(根據(jù)keras文檔,17 MB)。

需要的依賴(lài)關(guān)系:

  • Keras(帶有tensorflow后端)

  • NumPy

  • Matplotlib

  • pandas

數(shù)據(jù)要求:

  • 訓(xùn)練數(shù)據(jù)必須以特定格式存儲(chǔ),以便饋送到網(wǎng)絡(luò)中進(jìn)行訓(xùn)練。我們將使用Keras中提供的ImageDataGenerator來(lái)訓(xùn)練我們的可用數(shù)據(jù)模型。這樣,就代碼而言,該過(guò)程變得更加簡(jiǎn)單。

  • 必須有一個(gè)主數(shù)據(jù)文件夾,在該數(shù)據(jù)文件夾中,每個(gè)包含相應(yīng)圖像的數(shù)據(jù)類(lèi)必須有一個(gè)文件夾。文件夾的名稱(chēng)必須是其各自類(lèi)的名稱(chēng)。

模型的構(gòu)建是一個(gè)三步過(guò)程:

  1. 導(dǎo)入預(yù)先訓(xùn)練的模型并添加密集層。

  2. 將數(shù)據(jù)加載到ImageDataGenerators中。

  3. 訓(xùn)練和評(píng)估模型。

首先,載入相關(guān)包

import pandas as pd
import numpy as np
import os
import keras
import matplotlib.pyplot as plt
from keras.layers import Dense,GlobalAveragePooling2D
from keras.applications import MobileNet
from keras.preprocessing import image
from keras.applications.mobilenet import preprocess_input
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Model
from keras.optimizers import Adam

然后,導(dǎo)入預(yù)訓(xùn)練好的MobileNet模型。Mobilenet(在Imagenet數(shù)據(jù)集上針對(duì)1000個(gè)類(lèi)進(jìn)行了訓(xùn)練)的最后一層由1000個(gè)神經(jīng)元組成(每類(lèi)一個(gè))。 我們需要在網(wǎng)絡(luò)的最后一層有盡可能多的神經(jīng)元,一遍我們得到和我們想要識(shí)別的圖片類(lèi)別的數(shù)量一樣。 因此,我們刪掉這個(gè)了1000個(gè)神經(jīng)元的網(wǎng)絡(luò)層,并在網(wǎng)絡(luò)最后添加了我們自己的定義的全連接層。

這過(guò)程可以通過(guò)導(dǎo)入模型時(shí)設(shè)置(IncludeTop=False)來(lái)實(shí)現(xiàn)。 

假設(shè)你想訓(xùn)練一個(gè)犬種分類(lèi)器來(lái)識(shí)別120種不同的犬種,我們最后一層只需要120個(gè)神經(jīng)元。使用以下代碼完成。  

這是這個(gè)過(guò)程的第一步。導(dǎo)入和構(gòu)建所需的模型。 

要檢查模型的體系結(jié)構(gòu),我們只需要使用下面給出的這行代碼。

for i,layer in enumerate(model.layers):
 print(i,layer.name)

現(xiàn)在我們有了模型,我們將使用預(yù)先訓(xùn)練的權(quán)重,我們的模型已經(jīng)在(Imagenet數(shù)據(jù)集)上訓(xùn)練過(guò)了,我們必須將所有的權(quán)重設(shè)置為不可訓(xùn)練。我們將只訓(xùn)練我們之前制作的最后一層致密層。下面給出了這樣做的代碼。 

for layer in model.layers:
   layer.trainable=False
# or if we want to set the first 20 layers of the network to be non-trainable
for layer in model.layers[:20]:
   layer.trainable=False
for layer in model.layers[20:]:
   layer.trainable=True

現(xiàn)在我們進(jìn)入流程的第2步,將訓(xùn)練數(shù)據(jù)加載到ImageDataGenerator中。

ImageDataGenerators內(nèi)置在keras中,幫助我們訓(xùn)練我們的模型。我們只需要指定訓(xùn)練數(shù)據(jù)的路徑,它就會(huì)自動(dòng)分批發(fā)送訓(xùn)練數(shù)據(jù)。它使代碼更加簡(jiǎn)單。為此,我們需要使用博客前面提到的特定格式的培訓(xùn)數(shù)據(jù)。

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input) #included in our dependencies

train_generator=train_datagen.flow_from_directory('path-to-the-main-data-folder',
                                                target_size=(224,224),
                                                color_mode='rgb',
                                                batch_size=32,
                                                class_mode='categorical',
                                                shuffle=True)

接下來(lái)我們進(jìn)入步驟3,在數(shù)據(jù)集上訓(xùn)練模型。 

為此,我們首先編譯我們創(chuàng)建的模型,然后用generator訓(xùn)練我們的模型。這可以使用下面的代碼來(lái)完成。

model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])
# Adam optimizer
# loss function will be categorical cross entropy
# evaluation metric will be accuracy

step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
                  steps_per_epoch=step_size_train,
                  epochs=10)

有了這個(gè),我們將訓(xùn)練一個(gè)模型。然后,通過(guò)使用這個(gè)訓(xùn)練過(guò)的模型預(yù)測(cè)新圖片,類(lèi)似代碼model.predict(new_image)。

獲取Github上的代碼。

一如既往,快樂(lè)學(xué)習(xí)。


想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?

長(zhǎng)按鏈接點(diǎn)擊打開(kāi)或點(diǎn)擊【初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)】:

https://ai.yanxishe.com/page/TextTranslation/1184


AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

使用樹(shù)莓派和Python實(shí)現(xiàn)目標(biāo)檢測(cè)

杰出數(shù)據(jù)科學(xué)家的關(guān)鍵技能是什么?

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

如果你想學(xué)數(shù)據(jù)科學(xué),這 7 類(lèi)資源千萬(wàn)不能錯(cuò)過(guò)

等你來(lái)譯:

深度學(xué)習(xí)目標(biāo)檢測(cè)算法綜述

一文教你如何用PyTorch構(gòu)建 Faster RCNN

高級(jí)DQNs:利用深度強(qiáng)化學(xué)習(xí)玩吃豆人游戲

用于深度強(qiáng)化學(xué)習(xí)的結(jié)構(gòu)化控制網(wǎng)絡(luò) (ICML 論文講解)


雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。

初學(xué)者怎樣使用Keras進(jìn)行遷移學(xué)習(xí)

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識(shí),讓語(yǔ)言不再成為學(xué)習(xí)知識(shí)的門(mén)檻。(原雷鋒字幕組)
當(dāng)月熱門(mén)文章
最新文章
請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
姓名
電話(huà)
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶(hù)安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)