如何将图像列表传递给keras训练函数

时间:2018-12-08 18:31:58

标签: python image numpy tensorflow keras

我有一个pgn图片列表。从每个图像中,我提取了一个特定的对象,然后仅将该对象存储到单独的图像中。我看了原始图像 放入xTrain numpy数组中,然后将对象提取到yTrain numpy数组中:

def getFilesList(directory):
    files = os.listdir(directory)
    return map(lambda file: directory + file, files)

def readImagesIntoNumpy(directory):
    filesList = getFilesList(directory)
    images = map(lambda file: plt.imread(file), filesList)
    return np.array(images)

xTrain = readImagesIntoNumpy("./original/")
yTrain = readImagesIntoNumpy("./objects/")

我希望模型训练如何从新图像中提取那些对象:

model = Sequential()
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
model.compile(loss='categorical_crossentropy',
          optimizer='sgd',
          metrics=['accuracy'])

model.fit(xTrain, yTrain, epochs = 5, batch_size = 32)

问题是最后一个model.fit调用会引发错误:

ValueError: Error when checking input: expected dense_17_input
            to have 2 dimensions, but got array with shape (20, 256, 256, 4)

如何将一组图像传递到keras模型中进行训练?

1 个答案:

答案 0 :(得分:0)

您输入的图像形状为(256、256、4),并且输入的密集层形状为2作为矢量 将数据从(256、256、1)整形为(256 * 256 * 1,1)

在第一层添加该层

model.add(Reshape(target_shape = (256*256*256,1), input_shape = (256, 256, 1)))
model.add(Dense(units=64, activation='relu'))