如何将图像列表传递到keras train函数中

2024-06-16 10:00:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pgn图像列表。从每个图像中,我提取了一个特定的对象,并只将该对象存储到一个单独的图像中。我读原始图像 到xTrainnumpy数组中,并将对象提取到yTrainnumpy数组中:

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模型中进行训练?


Tags: 对象lambda图像mapinputmodelreturndef
1条回答
网友
1楼 · 发布于 2024-06-16 10:00:42

输入的图像形状是(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'))

相关问题 更多 >