Tensorflow InvalidArgumentError:由Lambda图层对输入进行切片后形状不兼容

时间:2018-07-02 09:31:40

标签: python tensorflow lambda keras gpu

在我的卷积网络中,我最近根据this question的回答添加了一个Lambda层作为输入层,用于选择输入图像的特定通道

model.add(Lambda(lambda x: x[:,:,:2], input_shape=(w, h, 3)))

当我尝试添加MaxPooling2D层时,出现错误ValueError: Negative dimension size caused by subtracting 3 from 2 for 'max_pooling2d_14/MaxPool' (op: 'MaxPool') with input shapes: [?,250,2,64]

我以为在Theano和Tensorflow暗淡顺序之间犯了一些错误,所以我编辑了Lambda层:

model.add(Lambda(lambda x: x[:2,:,:], input_shape=(w, h, 3)))

这次,添加更多层没有问题,但是当我尝试使用fit_generator时,出现错误:InvalidArgumentError: Incompatible shapes: [64] vs. [2]

追溯的时间很长,我将它们上传到here

我正在Linux上使用4 GPU进行计算,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题出在我使用Lambda层对输入进行切片的方式上。

输入形状按此顺序具有4个属性:batch_size,宽度,高度,通道。

对于选择输入数据的多个数组,由于Tensorflow不支持numpy的高级索引方法,因此我们应该首先对输入张量进行切片,使用dim扩展添加颜色深度,然后再对其进行串联。