@NSO

Как правильно применить в Encoder LSTM и Conv1d слои для чат-бота?

######################
# Первый входной слой, кодер, выходной слой
######################
encoderInputs = Input(shape=(None , )) # размеры на входе сетки (здесь будет encoderForInput)
# Эти данные проходят через слой Embedding (длина словаря, размерность) 
encoderEmbedding = Embedding(vocabularySize, 200 , mask_zero=True) (encoderInputs)
# Затем выход с Embedding пойдёт в LSTM слой, на выходе у которого будет два вектора состояния - state_h , state_c
# Вектора состояния - state_h , state_c зададутся в LSTM слое декодера в блоке ниже
encoderOutputs, state_h , state_c = LSTM(200, return_state=True)(encoderEmbedding)
encoderOutputs, state_h , state_c = Conv1D(200, 5, strides = 1, padding = "causal", activation = "relu")(encoderOutputs, state_h , state_c)
encoderOutputs, state_h , state_c = Dense(1, activation='relu')(encoderOutputs, state_h , state_c)
encoderStates = [state_h, state_c]

Ошибка
ValueError Traceback (most recent call last)
in ()
8 # Вектора состояния - state_h , state_c зададутся в LSTM слое декодера в блоке ниже
9 encoderOutputs, state_h , state_c = LSTM(200, return_state=True)(encoderEmbedding)
---> 10 encoderOutputs, state_h , state_c = Conv1D(200, 5, strides = 1, padding = "causal", activation = "relu")(encoderOutputs, state_h , state_c)
11 encoderOutputs, state_h , state_c = LSTM(200, return_state=True)(encoderOutputs, state_h , state_c)
12 encoderOutputs, state_h , state_c = Dense(1, activation='relu')(encoderOutputs, state_h , state_c)

5 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
232 ', found ndim=' + str(ndim) +
233 '. Full shape received: ' +
--> 234 str(tuple(shape)))
235 # Check dtype.
236 if spec.dtype is not None:

ValueError: Input 0 of layer conv1d_16 is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 200)

ЕСЛИ последовательность слоев другая

######################
# Первый входной слой, кодер, выходной слой
######################
encoderInputs = Input(shape=(None , )) # размеры на входе сетки (здесь будет encoderForInput)
# Эти данные проходят через слой Embedding (длина словаря, размерность) 
encoderEmbedding = Embedding(vocabularySize, 200 , mask_zero=True) (encoderInputs)
# Затем выход с Embedding пойдёт в LSTM слой, на выходе у которого будет два вектора состояния - state_h , state_c
# Вектора состояния - state_h , state_c зададутся в LSTM слое декодера в блоке ниже
encoderOutputs, state_h , state_c = Conv1D(200, 5, strides = 1, padding = "causal", activation = "relu")(encoderEmbedding)
encoderOutputs, state_h , state_c = LSTM(200, return_state=True)(encoderOutputs, state_h , state_c)
encoderOutputs, state_h , state_c = Dense(1, activation='relu')(encoderOutputs, state_h , state_c)
encoderStates = [state_h, state_c]

Ошибка
TypeError Traceback (most recent call last)
in ()
7 # Затем выход с Embedding пойдёт в LSTM слой, на выходе у которого будет два вектора состояния - state_h , state_c
8 # Вектора состояния - state_h , state_c зададутся в LSTM слое декодера в блоке ниже
----> 9 encoderOutputs, state_h , state_c = Conv1D(200, 5, strides = 1, padding = "causal", activation = "relu")(encoderEmbedding)
10 encoderOutputs, state_h , state_c = LSTM(200, return_state=True)(encoderOutputs, state_h , state_c)
11 encoderOutputs, state_h , state_c = Dense(1, activation='relu')(encoderOutputs, state_h , state_c)

/usr/local/lib/python3.7/dist-packages/keras/engine/keras_tensor.py in __iter__(self)
341 if shape[0] is None:
342 raise TypeError(
--> 343 'Cannot iterate over a Tensor with unknown first dimension.')
344 return _KerasTensorIterator(self, shape[0])
345

TypeError: Cannot iterate over a Tensor with unknown first dimension.
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы