我正在使用Keras训练CNN,但是图像中有30x30补丁。我想用完整的图像测试网络,但是我收到以下错误:
ValueError:GpuElemwise。输入维度不匹配。输入2(指数 从0开始具有shape [1] == 30,但该轴上的输出大小为 100.应用导致错误的节点:GpuElemwise {Composite {((i0 + i1) - i2)}} [(0,0)](GpuDimShuffle {0,2,3,1} .0,GpuReshape {4}。 0, GpuFromHost.0)Toposort索引:79输入类型: [CudaNdarrayType(float32,4D),CudaNdarrayType(float32,(True,True, True,False)),CudaNdarrayType(float32,4D)]输入形状:[(10,100, 100,3),(1,1,1,3),(10,30,30,3)]输入步幅:[(30000,100, 1,10000),(0,0,0,1),(2700,90,3,1)]输入值:['not not 显示',CudaNdarray([[[[[0.01060364 0.00988821 0.00741314]]]]),'not not 显示']输出客户: [[GpuCAReduce {pre = sqr,red = add} {0,1,1,1}(GpuElemwise {Composite {((i0 + i1) - i2)}} [(0,0)]。0)]]
这是我的model.predict:
predict_image = model.predict(np.array([test_images[1]]), batch_size=1)[0]
似乎问题是输入大小不能是30x30以外的任何东西,但我网络第一层的第一个输入形状是none,none,3。
model.add(Convolution2D(n1, f1, f1, border_mode='same', input_shape=(None, None, 3), activation='relu'))
是否根本无法测试与我训练过的图像尺寸不同的图像?
答案 0 :(得分:0)
正如fchollet自己描述的那样here,你应该能够如此定义输入:
input_shape=(1, None, None)
但是,如果您有使用Flatten操作的图层,则会失败。
这表明您应该能够使用完全卷积的NN来实现目标。