我用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
答案 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, ....)