N
N
NSO2021-10-30 11:26:56
Python
NSO, 2021-10-30 11:26:56

How to correctly apply layers for a chatbot in Encoder LSTM and 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]

Mistake
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)

IF the sequence of layers is different

######################
# Первый входной слой, кодер, выходной слой
######################
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]

Mistake
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.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question