为Keras培训创建可读图像数据集

时间:2017-04-05 19:21:54

标签: dataset deep-learning keras

我试图在keras的帮助下创建我自己的图像识别程序,但我遇到了一个问题。我正在尝试使用图片文件夹,并为 1 == 2 === 3 ==== 4 ===== 5 ====== 6 ====== 7 ===== 8 ====== 9 ====== 10 ==== 11 ===== 12 ====== 13 ====== 14 ===== 15 ====== 16 ====== 17 === 18 ==== 19 ===== 20 ====== 21 ====== 22 ===== 23 ====== 24 ====== 25 ==== 26 ===== 27 ====== 28 ====== 29 ===== 30 ====== 31 ====== 创建一个数据集。我知道model.fit(),但试图了解生成器对图像的作用。这就是为什么我正在努力从图像中创建数字的数组/数据集。

我使用的模型是VGG16,所以这是该模型的结束和开始:

fit_generator()

编译器:

model = Sequential()
model.add(ZeroPadding2D((1, 1), input_shape=(256, 256, 3)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
...
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))

拟合:

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss='categorical_crossentropy')

数组生成器:

model.fit(test_x, 1, batch_size=32, nb_epoch=10, verbose=1, callbacks=None, validation_split=0.1)

错误:

path_temp = %PATH%

list = os.listdir(path_temp)
array_list = []

for file in list:

    img = imread(path_temp + '\\' + file, flatten=True)
    img = np.arange(1 * 3 * 256 * 256).reshape((-1, 256, 256, 3))

    img = img.astype('float32')
    array_list.append(img)

test_x = np.stack(array_list)
test_x /= 255.0

这就是我所拥有的,但是从这里有一些方法可以为ValueError: Error when checking model input: expected zeropadding2d_input_1 to have 4 dimensions, but got array with shape (990, 1, 256, 256, 3) 创建一个可读的数据集/数组吗?

1 个答案:

答案 0 :(得分:1)

我会更改for循环中提供的代码:

for file in list:

    img = imread(path_temp + '\\' + file, flatten=True)
    img = np.arange(1 * 3 * 256 * 256).reshape((256, 256, 3))
    # img = np.array(img).reshape((256, 256, 3)) <- consider this

    img = img.astype('float32')
    array_list.append(img)

第一个问题来自于您将图像堆叠在一起的事实 - 因此无需在reshape中添加示例维度。第二件事 - 您正在从文件中阅读img,然后通过使用np.array函数创建一个全新的np.arange来删除它。这是打算与否?如果不是 - 请检查我提供的代码段。