訓練數據必須以特定格式存儲,以便饋送到網絡中進行訓練。我們將使用Keras中提供的ImageDataGenerator來訓練我們的可用數據模型。這樣,就代碼而言,該過程變得更加簡單。
必須有一個主數據文件夾,在該數據文件夾中,每個包含相應圖像的數據類必須有一個文件夾。文件夾的名稱必須是其各自類的名稱。
模型的構建是一個三步過程:
導入預先訓練的模型並添加密集層。
將數據加載到ImageDataGenerators中。
訓練和評估模型。
首先,載入相關包
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
然後,導入預訓練好的MobileNet模型。Mobilenet(在Imagenet數據集上針對1000個類進行了訓練)的最後一層由1000個神經元組成(每類一個)。 我們需要在網絡的最後一層有儘可能多的神經元,一遍我們得到和我們想要識別的圖片類別的數量一樣。 因此,我們刪掉這個了1000個神經元的網絡層,並在網絡最後添加了我們自己的定義的全連接層。
這過程可以通過導入模型時設置(IncludeTop=False)來實現。
假設你想訓練一個犬種分類器來識別120種不同的犬種,我們最後一層只需要120個神經元。使用以下代碼完成。
這是這個過程的第一步。導入和構建所需的模型。
要檢查模型的體系結構,我們只需要使用下面給出的這行代碼。
for i,layer in enumerate(model.layers):
print(i,layer.name)
現在我們有了模型,我們將使用預先訓練的權重,我們的模型已經在(Imagenet數據集)上訓練過了,我們必須將所有的權重設置為不可訓練。我們將只訓練我們之前製作的最後一層緻密層。下面給出了這樣做的代碼。
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
現在我們進入流程的第2步,將訓練數據加載到ImageDataGenerator中。
ImageDataGenerators內置在keras中,幫助我們訓練我們的模型。我們只需要指定訓練數據的路徑,它就會自動分批發送訓練數據。它使代碼更加簡單。為此,我們需要使用博客前面提到的特定格式的培訓數據。
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)
接下來我們進入步驟3,在數據集上訓練模型。
為此,我們首先編譯我們創建的模型,然後用generator訓練我們的模型。這可以使用下面的代碼來完成。
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)
有了這個,我們將訓練一個模型。然後,通過使用這個訓練過的模型預測新圖片,類似代碼model.predict(new_image)。
獲取Github上的代碼。
一如既往,快樂學習。
想要繼續查看該篇文章相關連結和參考文獻?
長按連結點擊打開或點擊【初學者怎樣使用Keras進行遷移學習】:
https://ai.yanxishe.com/page/TextTranslation/1184
AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網雷鋒網雷鋒網
使用樹莓派和Python實現目標檢測傑出數據科學家的關鍵技能是什麼?初學者怎樣使用Keras進行遷移學習如果你想學數據科學,這 7 類資源千萬不能錯過
等你來譯:
深度學習目標檢測算法綜述一文教你如何用PyTorch構建 Faster RCNN高級DQNs:利用深度強化學習玩吃豆人遊戲用於深度強化學習的結構化控制網絡 (ICML 論文講解)"