Структура скрипта
- Рассмотрение архитектуры простой рекуррентной нейронной сети (RNN)
- Анализ различных вариантов построения RNN
- Рассмотрение архитектуры нейронной сети с долгой краткосрочной памяти (LSTM)
- Поиск оптимальных гиперпараметров моделей RNN, LSTM
- Рассмотрение однонаправленной и двунаправленной LSTM с отключение переобученных нейронов
Требуемые библиотеки
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow as tf
import keras
from keras import layers
from sklearn.metrics import mean_squared_error, mean_absolute_error
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import ModelCheckpoint
from sklearn.metrics import classification_report
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.utils import plot_model
from tensorflow.keras.layers import Bidirectional, LSTM
from tensorflow.keras.layers import Dropout
1. Пример кода для построения простой рекурретной нейронной сети
model = keras.Sequential()
model.add(layers.SimpleRNN(128, input_shape=(train_x.shape[1], 1), return_sequences=False))
model.add(layers.Dense(1, activation='sigmoid'))
optimizer = Adam(learning_rate=0.001)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
model_save_path = 'best_model.h7'
checkpoint_callback = ModelCheckpoint(model_save_path,
monitor='val_accuracy',
save_best_only=True,
verbose=1)
model.fit(train_x, train_y, epochs=10, batch_size=32, validation_split=0.2, verbose = 1,
callbacks=[checkpoint_callback]
)
2. Пример кода для построения LSTM
model_LSTM = keras.Sequential()
model_LSTM.add(layers.LSTM(128, input_shape=(train_x.shape[1], 1), return_sequences=False))
model_LSTM.add(layers.Dense(1, activation='sigmoid'))
optimizer = Adam(learning_rate=0.1)
model_LSTM.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
model_save_path = 'best_model.h7'
checkpoint_callback = ModelCheckpoint(model_save_path,
monitor='val_accuracy',
save_best_only=True,
verbose=1)
model_LSTM.fit(train_x, train_y, epochs=10, batch_size=32, validation_split=0.2, verbose = 1,
callbacks=[checkpoint_callback]
)
2. Пример кода для построения двунаправленной сети LSTM с отключением переобученных нейронов
model_BiLSTM_drop = keras.Sequential()
model_BiLSTM_drop.add(LSTM(128, input_shape=(train_x.shape[1], 1), return_sequences=True))
model_BiLSTM_drop.add(Dropout(0.2))
model_BiLSTM_drop.add(Bidirectional(LSTM(128, return_sequences=False)))
model_BiLSTM_drop.add(layers.Dense(1, activation='sigmoid'))
optimizer = Adam(learning_rate=0.1)
model_BiLSTM_drop.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
model_save_path = 'best_model.h7'
checkpoint_callback = ModelCheckpoint(model_save_path,
monitor='val_accuracy',
save_best_only=True,
verbose=1)
model_BiLSTM_drop.fit(train_x, train_y, epochs=10, batch_size=32, verbose = 1, validation_split=0.2,
callbacks=[checkpoint_callback]
)