Conv2D + LSTM网络出现错误

时间:2019-06-08 12:18:31

标签: keras conv-neural-network lstm

我有一个名为charMatrixList的矩阵列表,长度为40744。我将此列表转换为numpy数组,并且形状更改为(40744,32,30)。该numpy数组作为输入传递到神经网络。

当作为输入传递到LSTM层时,我得到的错误与Conv2D层输出的形状有关。

from keras.models import Sequential 
from keras.layers import Embedding,LSTM,Flatten,Conv2D,Reshape
import numpy as np


def phase22(charMatrixList ):
    model = Sequential()
    model.add(Conv2D(32, (3, 3), strides=(1,1) , padding="same",               activation="relu",input_shape=(40744,32,30)))
    model.add(LSTM(16, return_sequences=True))
    model.add(LSTM(16, return_sequences=True))
    model.add(Flatten())
    model.compile('rmsprop', 'mse')
    input_array = charMatrixList
    model.compile('rmsprop', 'mse')
    output_array = model.predict(input_array)
    return output_array

p2out = phase22(charMatrixList)

我遇到以下错误:

Traceback (most recent call last):

  File "<ipython-input-56-f615f91b6704>", line 1, in <module>
    p2out = phase22(np.array(charMatrixList) )

  File "<ipython-input-55-9a4fd292a04f>", line 4, in phase22
    model.add(LSTM(16, return_sequences=True))

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\keras\engine\sequential.py", line 185, in add
    output_tensor = layer(self.outputs[0])

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\keras\layers\recurrent.py", line 500, in __call__
    return super(RNN, self).__call__(inputs, **kwargs)

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\keras\engine\base_layer.py", line 414, in __call__
    self.assert_input_compatibility(inputs)

  File "C:\Users\Kishore\Anaconda3\lib\site-packages\keras\engine\base_layer.py", line 311, in assert_input_compatibility
    str(K.ndim(x)))

ValueError: Input 0 is incompatible with layer lstm_11: expected ndim=3, found ndim=4

1 个答案:

答案 0 :(得分:0)

在定义输入大小时,Keras忽略第一个维度,因为这只是训练示例的数量m。 Keras可以处理任何m,因此它只关心实际的输入尺寸。这就是为什么Kears将(40744,32,30)视为4个维度。

我对您输入的内容感到困惑,培训示例数40744个吗?如果是,则输入大小=(32,30)。

如果您输入的内容有3个维度,请在您的输入内容中包含一些培训示例,即charMatrixList =(m,40744,32,30)

相关问题