ValueError: Shapes (None, 188, 1) и (None, None, None, None) должны иметь одинаковый ранг - PullRequest
0 голосов
/ 21 февраля 2020

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

X_train = X_train.reshape(1772, 300, 188, 1)
X_test = X_test.reshape(586, 300, 188, 1)

y_train = np.array(y_train)
y_test = np.array(y_test)
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)


model = Sequential()
model.add(TimeDistributed(Conv2D(64, kernel_size=(12, 12), activation='relu', input_shape=(1772, 300, 188, 1))))
model.add(TimeDistributed(Conv2D(128, (6, 6), activation='relu')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(4, 4))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(64))
model.add(Dense(4, activation='softmax'))

1 Ответ

0 голосов
/ 21 февраля 2020

Проблема заключается в том, что, добавляя упаковку TimeDistributed, необходимо добавить измерение Timetep.

Здесь у вас есть вход с 4 dim (batch_size, height, width, channels), но ваш слой:

model.add(TimeDistributed(Conv2D(64, kernel_size=(12, 12), activation='relu', input_shape=(1772, 300, 188, 1))))

ожидает 5 dim (batch_size, timestep, height, width, channels).

Так что вам нужно добавить другой тусклый для ваших входов!

...