Ваша концепция проектирования функциональных моделей Keras с внедренными слоями, к сожалению, неверна.
- Когда вы используете слой внедрения, он ожидает двухмерные данные.
Input shape
2D tensor with shape: (batch_size, sequence_length).
Output shape
3D tensor with shape: (batch_size, sequence_length, output_dim).
Ссылка: https://keras.io/layers/embeddings/
Требуется последовательность идентификаторов или токенов для словаря. Это должен быть целочисленный массив.
Допустим, у нашего словаря есть len 36, мы передаем ему список целочисленных массивов в диапазоне (0, 36)
[1, 34, 32, 23 ] действителен [0,2, 0,5] недействителен
Обычно мы используем Embedding для представления векторов в уменьшенном пространстве, поэтому output_dim ниже, чем input_dim, но в зависимости от дизайна может быть и обратное.
You необходимо указать input_length для входных данных.
Если вы используете return_sequences = True
, временное измерение будет передано следующему измерению, в вашем случае это нежелательно.
У вас есть метки в форме (0, 1, 0, 1, 0, 0, ...), а не в форме с горячим кодированием, поэтому не используйте softmax, а сигмоид с 1 единица в последнем плотном.
Это несколько исправленная сеть.
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
import numpy as np
train_data = np.random.randint(0,3, (100, 4000))
y_labels = np.random.randint(0,2, (100,))
input_ = Input(shape=(4000)) # shape from train_data
embedded = Embedding(36, 256, input_length = 4000)(input_)
lstm = LSTM(256, return_sequences=False)(embedded) # --> ERROR
dense = Dense(1, activation='softmax')(lstm)
model = Model(input_, dense)
model.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) [(None, 4000)] 0
_________________________________________________________________
embedding_5 (Embedding) (None, 4000, 256) 9216
_________________________________________________________________
lstm_5 (LSTM) (None, 256) 525312
_________________________________________________________________
dense (Dense) (None, 1) 257
=================================================================
Total params: 534,785
Trainable params: 534,785
Non-trainable params: 0