Рекуррентные нейронные сети

  • Автор записи:
  • Рубрика записи:Notebooks

Структура скрипта

  • Рассмотрение архитектуры простой рекуррентной нейронной сети (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]
          )

Доступ к тренировочному скрипту