Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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代码(CNN->;LSTM)_Python_Keras_Lstm_Lasagne - Fatal编程技术网

Python 将千层面转换为Keras代码(CNN->;LSTM)

Python 将千层面转换为Keras代码(CNN->;LSTM),python,keras,lstm,lasagne,Python,Keras,Lstm,Lasagne,我想转换此千层面代码: et = {} net['input'] = lasagne.layers.InputLayer((100, 1, 24, 113)) net['conv1/5x1'] = lasagne.layers.Conv2DLayer(net['input'], 64, (5, 1)) net['shuff'] = lasagne.layers.DimshuffleLayer(net['conv1/5x1'], (0, 2, 1, 3)) net['lstm1'] = lasag

我想转换此千层面代码:

et = {}
net['input'] = lasagne.layers.InputLayer((100, 1, 24, 113))
net['conv1/5x1'] = lasagne.layers.Conv2DLayer(net['input'], 64, (5, 1))
net['shuff'] = lasagne.layers.DimshuffleLayer(net['conv1/5x1'], (0, 2, 1, 3))
net['lstm1'] = lasagne.layers.LSTMLayer(net['shuff'], 128)
在Keras代码中。现在我想到了这个:

multi_input = Input(shape=(1, 24, 113), name='multi_input')
y = Conv2D(64, (5, 1), activation='relu', data_format='channels_first')(multi_input)
y = LSTM(128)(y)
但我得到了错误:
输入0与层lstm_1不兼容:预期ndim=3,发现ndim=4

解决方案 解释 我将千层面和干酪的文件放在这里,以便您可以进行交叉参考:

递归层可以类似于前馈层使用,除了 输入形状应为
(批大小、序列长度、输入数量)

输入形状

具有形状的三维张量
(批量大小、时间步长、输入尺寸)


基本上API是相同的,但千层面可能会为您重新塑造(我需要稍后检查源代码)。这就是为什么会出现此错误:

Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
,因为
Conv2D
之后的张量形状是
(?,64,20,113)
ndim=4

因此,解决方案是将其重塑为
(?,207232)

编辑 与千层面一起确认,它为您提供了窍门:

num_inputs = np.prod(input_shape[2:])
因此,作为LSTM输入的正确张量形状是
(?,20,64*113)
=
(?,207232)


Permute
在Keras中是多余的,因为您无论如何都必须重塑。我之所以把它放在这里,是为了将千层面“完整地翻译”成Keras,它做的和
DimshuffleLaye
在千层面中做的一样


然而,由于我在《编辑》中提到的原因,
DimshuffleLaye
在千层面中是必需的,千层面LSTM创建的新维度是“最后两个”维度的乘法。

即批次大小,我不是千层面的专家,但我认为使用与否无关。非常感谢,这就是我一直在寻找的解决方案和答案。
num_inputs = np.prod(input_shape[2:])