Сеть Conv2D + LSTM дает ошибки - PullRequest
0 голосов
/ 08 июня 2019

У меня есть список матриц с именем charMatrixList, длиной 40744. Я преобразую этот список в массив numpy, и форма меняется на (40744,32,30). Этот массив NumPy передается как вход в нейронную сеть.

Ошибки, которые я получаю, связаны с формой вывода слоя Conv2D, когда передаются как входные данные в слой LSTM.

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 голосов
/ 08 июня 2019

Keras игнорирует первое измерение при определении размера ввода, потому что это только количество обучающих примеров, м.Keras может работать с любым m, поэтому он заботится только о реальных входных размерах.Вот почему Кирс рассматривает (40744,32,30) как 4 измерения.

Меня смущают измерения вашего ввода, 40744 - это количество обучающих примеров?Если это так, то введите input_size = (32, 30).

Если ваш вход имеет 3 измерения, включите в него количество обучающих примеров, т.е.charMatrixList = (м, 40744,32,30)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...