在Keras调用model.fit以获取不同形状的输入?

时间:2018-04-21 16:04:59

标签: python numpy tensorflow keras

我用Python和Keras创建了一个CNN,它将各种长度的2D输入压缩成单个输出。所有图像的高度均为80像素,但长度不同,例如shape(80,lenght_of_image_i,2),其中2是颜色通道的数量。

我有5000个图像,numpy中训练数据数组X的形状是(5000,1),数组有dtype对象。这是因为在单个numpy数组中不可能存储具有不同形状的内容。列表中的每个对象都有形状(80,lenght_of_image_i,2)。

有了这个说,当我调用顺序模型的model.fit(X,y)函数时,我得到以下错误:

    ValueError: Error when checking input: expected conv2d_1_input to have 4 
    dimensions, but got array with shape (5000, 1)

将numpy数组转换为numpy数组的Python列表也不起作用:

    AttributeError: 'list' object has no attribute 'ndim'

我的数据零填充或转换以使我的所有图像都不是一个选项。

我的问题现在是:当我的数据没有固定的形状时,如何调用model.fit(X,y)函数?

提前谢谢!

编辑:请注意,我的网络架构没有问题(因为我没有使用密集层)。我的问题是我不能调用fit函数,因为numpy数组的形状有问题。 我的模型是该网络的复制品:http://machine-listening.eecs.qmul.ac.uk/wp-content/uploads/sites/26/2017/01/sparrow.pdf

1 个答案:

答案 0 :(得分:0)

你需要传递“numpy arrays”以适合“float”类型。这是唯一的可能性。

因此,您可能需要对具有相同长度的批量图像进行分组,或者单独训练每个样本:

for image, output in zip(images,outputs):
    model.train_on_batch(image.reshape((1,80,-1,2), outputs.reshape((1,)+outputs.shape, ....)