Как питать сеть LSTM (2000,7,7,512) тензорной формы в Керасе? - PullRequest
0 голосов
/ 24 января 2019

форма входных данных (X) (2000, 7, 7, 512)

сеть

visible = Input(shape=(7,7,512))
Lstm = LSTM(units=22, return_sequences=True)(visible)
Dense_1 = Dense(4096)(Lstm)
Dense_2 = Dense(512 ,activation='sigmoid')(Dense_1)
Dense_3 = Dense(5, activation='sigmoid')(Dense_2)
model = Model(input = visible, output=Dense_3)

И ошибка: ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4

Что должно быть для input_shapelstm и другие слои?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Входной слой LSTM должен быть 3D с размерами:

  • образцов,
  • временных шагов и,
  • функции

Попробуйте это так:

from keras.models import Model
from keras.layers import Input
from keras.layers import LSTM
from keras.layers import Dense
import numpy as np

# define model
X = np.random.rand(2000, 7, 7, 512)
X = X.reshape(2000, 49, 512)

visible = Input(shape=(49,512))
Lstm = LSTM(units=22, return_sequences=True)(visible)
Dense_1 = Dense(4096)(Lstm)
Dense_2 = Dense(512 ,activation='sigmoid')(Dense_1)
Dense_3 = Dense(5, activation='sigmoid')(Dense_2)
model = Model(input = visible, output=Dense_3)

Входной слой LSTM определяется аргументом формы в первом скрытом слое.

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

Предполагается, что количество выборок равно 1 или более, здесь я думаю, что 2000 - это число выборок.

0 голосов
/ 24 января 2019

Из документации Keras's RNN :

Ваш вход должен быть трехмерным тензором с формой (batch_size, timesteps, input_dim).

Ваш ввод - это четырехмерный тензор.Какой бы размер в вашем входе не представлял число временных шагов, он должен быть первым размером входного значения.

Ваша выходная форма с return_sequences будет трехмерным тензором с формой (batch_size, timesteps, units).

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