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