Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将keras.backend.conv2d从keras 1.x迁移到2.x_Python_Python 3.x_Keras_Theano_Keras 2 - Fatal编程技术网

Python 将keras.backend.conv2d从keras 1.x迁移到2.x

Python 将keras.backend.conv2d从keras 1.x迁移到2.x,python,python-3.x,keras,theano,keras-2,Python,Python 3.x,Keras,Theano,Keras 2,我正在将一个项目从Keras1.x迁移到2.x 在代码中,在1.x中运行良好的操作现在在2.x中崩溃 convs = K.conv2d(a, b, padding='valid', data_format='channels_first') 输入张量形状a和b都是(1024,4,1,1),输出张量形状是(1024,1024,1,1)在1.x中 对于2.x,我得到以下错误: ValueError: CorrMM: impossible output shape bottom shape: 1

我正在将一个项目从Keras1.x迁移到2.x

在代码中,在1.x中运行良好的操作现在在2.x中崩溃

convs = K.conv2d(a, b, padding='valid', data_format='channels_first')
输入张量形状
a
b
都是
(1024,4,1,1)
,输出张量形状是
(1024,1024,1,1)
在1.x中

对于2.x,我得到以下错误:

ValueError: CorrMM: impossible output shape
  bottom shape: 1024 x 4 x 1 x 1
  weights shape: 1 x 1 x 1024 x 4
  top shape: 1024 x 1 x -1022 x -2

Apply node that caused the error: CorrMM{valid, (1, 1), (1, 1), 1 False}(Print{message='a', attrs=('__str__',), global_fn=<function DEBUG_printTensorShape at 0x00000272EF1FAD08>}.0, Subtensor{::, ::, ::int64, ::int64}.0)
Toposort index: 30
Inputs types: [TensorType(float32, (False, False, True, True)), TensorType(float32, (True, True, False, False))]
Inputs shapes: [(1024, 4, 1, 1), (1, 1, 1024, 4)]
ValueError:CorrMM:不可能的输出形状
底部形状:1024x4x1x1
重量形状:1 x 1 x 1024 x 4
顶部形状:1024x1x-1022x-2
导致错误的应用节点:CorrMM{valid,(1,1),(1,1),1 False}(Print{message='a',attrs=('''uuu str'',),global_fn=}.0,子传感器{:,:,:,:,::int64,::int64}.0)
拓扑排序索引:30
输入类型:[TensorType(float32,(False,False,True,True)),TensorType(float32,(True,True,False,False))]
输入形状:[(1024,4,1,1),(1,1,1024,4)]

我正在使用Ano后端,并在
K.set\u image\u data\u格式和
conv2d
中首先设置
channels\u

conv2D
方法中,
a
是实际图像,
b
是内核


a
的预期形状为(带有“通道\u优先”):

因此,您的输入有:

  • 1024幅图像
  • 4频道
  • 图1 x 1

但是,尽管使用了
'channels\u last'
,但
b
的预期形状是:

(side1,side2, inputChannels,outputChannels)
这似乎有点误导,因为在过滤器中,它仍然是最后一个通道。(在我的keras上测试,版本2.0.4)

因此,如果您的输出是
(10241024,1,1)
,我假设
b
应该有1024个输出过滤器,因此它的形状应该是:

(1,1,4,1024)
您可能应该使用某种方法来排列尺寸,而不仅仅是重塑形状。Numpy有
swapaxes
和keras有
K.permute\u维度

K.permute\u维度(x,(3,2,1,0))
完成了任务。谢谢
(1,1,4,1024)