用深度學習訓練自己的數據集

方法一:

keras.datasets中的常見數據集,比如mnist:

(X_train, y_train), (X_test, y_test) = mnist.load_data()

方法二:

對於自己的數據集而言:

首先,我們需要將數據分類保存在不同的文件夾中

./datasets
  ./class1
    0.png
    1.png
    2.png
    ...
   /class2
     0.png
     1.png
     2.png
      ...
   /class3
   ...

而後,編寫一個函數將圖片轉爲numpy類型

def read_image(imageName):
    im = Image.open(imageName).convert('L')
    data = np.array(im)
    return data

兩個列表,存放圖片和標註信息

images = []
labels = []
# 讀取在datasets裏面有幾個文件夾 
test = os.listdir('./datasets') 
# 把文件夾裏面的圖片和其對應的文件夾的名字也就是對應的字 
for testPath in test: 
    for fn in os.listdir(os.path.join('datasets', testPath)): 
        if fn.endswith('.PNG'): 
            fd = os.path.join('./datasets', testPath, fn) 
            images.append(read_image(fd)) 
            labels.append(testPath) 


接着我們把剛剛得到的images和labels也變成numpy類型。當然,labels首先要變成int類型

X = np.array(images)
y = np.array(list(map(int, labels)))

最後,拆分成訓練集和測試集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=30)

但是這樣做有一個缺點:

我們必須一次性把所有數據讀入內存。當我們的數據量特別大的時候,這肯定是行不通的。就算數據量不大,這樣也會浪費很多時間在IO上面。我們的希望的是,在訓練的時候拿數據,一份一份地訓練。

方法三:

datagen = ImageDataGenerator(...) 

train_generator = datagen.flow_from_directory( './datasets', target_size=(30, 30), color_mode='grayscale', batch_size=64) 

model.fit_generator(train_generator, steps_per_epoch=500, epochs=50) 

本文部分參考:

https://www.jianshu.com/p/0fbe5b5d0ab8,致謝!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章