方法一:
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,致謝!