用深度学习训练自己的数据集

方法一:

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,致谢!

猜你喜欢

转载自blog.csdn.net/Jaguar_95/article/details/82970942