Читать книгу 120 практических задач онлайн
model.add(layers.Embedding(input_dim=10000, output_dim=128, input_length=maxlen))
model.add(layers.LSTM(128, return_sequences=True))
model.add(layers.LSTM(128, return_sequences=False))
model.add(layers.Dense(1, activation='sigmoid'))
# Шаг 4: Компиляция и обучение модели
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=10, batch_size=32,
validation_data=(X_test, y_test))
# Шаг 5: Оценка модели
loss, accuracy = model.evaluate(X_test, y_test, verbose=2)
print(f'\nТочность на тестовых данных: {accuracy}')
# Визуализация процесса обучения
plt.plot(history.history['accuracy'], label='Точность на обучающем наборе')
plt.plot(history.history['val_accuracy'], label='Точность на валидационном наборе')
plt.xlabel('Эпоха')
plt.ylabel('Точность')
plt.legend(loc='lower right')
plt.show()
```
Пояснение
1. Импорт библиотек: Импортируются необходимые библиотеки TensorFlow, Keras, pandas, matplotlib и другие.
2. Подготовка данных: Загрузка данных из CSV файла, содержащего тексты и метки настроений. Тексты токенизируются с использованием `Tokenizer`, и последовательности приводятся к одинаковой длине с помощью `pad_sequences`.
3. Построение модели LSTM: Модель строится с использованием слоя `Embedding` для преобразования токенов в плотные векторы, двух слоев LSTM для обработки последовательностей и одного полносвязного слоя для выдачи прогноза.
– Слой Embedding:
```python
model.add(layers.Embedding(input_dim=10000, output_dim=128, input_length=maxlen))
```
Этот слой преобразует входные токены в плотные векторы размерности 128.
– Первый слой LSTM:
```python
model.add(layers.LSTM(128, return_sequences=True))
```
Первый слой LSTM возвращает полную последовательность выходов, которая передается следующему слою LSTM.
– Второй слой LSTM:
```python
model.add(layers.LSTM(128, return_sequences=False))
```
Второй слой LSTM возвращает только последний выходной элемент.
– Выходной слой:
```python
model.add(layers.Dense(1, activation='sigmoid'))