Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
72
Добавлен:
29.10.2021
Размер:
260.27 Кб
Скачать

УДК 519.68:007.5

Лабораторная работа 3. Сети LSTM

Цели работы: изучение возможностей LSTM сетей для решения задач классификации и регрессии. Работа с готовыми реализациями LSTM в Matlab и Python.

Ключевые слова: сети долгой кратковременной памяти, комбинирование различных нейросетевых моделей.

§1. Обзор библиотечных модулей Matlab и Python

1.1.Применение LSTM в Matlab для задач классификации. Пример конфигурации для задачи классификации приводится ниже.

numFeatures = 12; % число признаков (число входов сети). numHiddenUnits = 20; % число скрытых блоков LSTM numClasses = 9; % число итоговых классов

layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits, ...

’OutputMode’,’last’) % выдавать значение в конце последовательности fullyConnectedLayer(numClasses) % слой Румельхарта

softmaxLayer classificationLayer];

В этом примере мы включили входной слой для обработки произвольных векторных последовательностей (sequenceInputLayer), а также LSTM слой, который будет выдавать значение следующему слою по окончанию ввода последовательности от слоя sequenceInputLayer. В конце мы подключаем полносвязный слой Румельхарта для осуществления классификации и слой softmaxLayer для позиционного кодирования классов.

Перед запуском обучения мы можем осуществить вспомогательные настройки (например предусмотреть разбиение всей выборки на мини блоки).

maxEpochs = 100; % число эпох для обучения miniBatchSize = 25;% мини блоки обучающей выборки

options = trainingOptions(’adam’, ...

’MaxEpochs’,maxEpochs, ...

’MiniBatchSize’,miniBatchSize, ...

’GradientThreshold’,1, ... % нормировать градиент ошибки

’SequenceLength’,’longest’, ... % длины последовательностей

’Shuffle’,’never’, ... % перемешивать или нет данные из выборки

’Plots’,’training-progress’);

net = trainNetwork(XTrain,YTrain,layers,options);

2

1.2. Применение LSTM в Matlab для задач регрессии. Пример конфигурации сети для решения задачи регрессии приводится ниже.

numFeatures = 12; % число признаков (число входов сети). numHiddenUnits = 80; % число скрытых блоков LSTM numResponses = 1; % число входов для слоя регрессии layers = [ ...

sequenceInputLayer(numFeatures)

lstmLayer(numHiddenUnits, ...

’OutputMode’,’sequence’) % выдавать значения постоянно fullyConnectedLayer(numResponses) % слой Румельхарта regressionLayer %

];

В этом примере мы включили входной слой для обработки произвольных векторных последовательностей (sequenceInputLayer), а также LSTM слой, который будет выдавать значение следующему слою непрервыно при вводе входной последовательности от слоя sequenceInputLayer. В конце мы подключаем полносвязный слой Румельхарта для осуществления классификации и слой regressionLayer для оценки среднеквадратической ошибки в предсказании эталонных последовательностей.

Настройка и запуск обучения будет проводится полностью аналогично 1.1.

1.3. Применение LSTM в Python для задач классификации. Пример конфигурации для задачи классификации приводится ниже.

numFeatures = 12 # число признаков (число входов сети). numHiddenUnits = 20 # число скрытых блоков LSTM numClasses = 9 # число итоговых классов

model = Sequential() # ввод последовательностей model.add(LSTM(numHiddenUnits, return_sequences=false)) model.add(Dense(numClasses, activation=’sigmoid’)) model.add(Activation(’softmax’))

Мы используем входной слой для обработки произвольных векторных последовательностей (Sequential), а также LSTM слой в режиме выдачи последнего значения для обрабатываемых последовательностей. В конце мы подключаем полносвязный слой Румельхарта (Dense) для осуществления классификации и слой softmax для позиционного кодирования классов.

maxEpochs = 100; % число эпох для обучения miniBatchSize = 25;% мини блоки обучающей выборки

model.compile(loss=’mean_squared_error’, optimizer=’adam’) history = model.fit(train_X, train_y,

epochs=maxEpochs, batch_size=miniBatchSize, validation_data=(test_X, test_y), verbose=2, shuffle=False)

Замечание: Важным отличием от реализации в Matlab является использование отдельного набора данных для валидации обучения.

ЛАБОРАТОРНАЯ РАБОТА 3. СЕТИ LSTM

3

1.4. Применение LSTM в Python для задач регрессии. Пример конфигурации для задачи регрессии приводится ниже.

numFeatures = 12; % число признаков (число входов сети). numHiddenUnits = 80; % число скрытых блоков LSTM numResponses = 1; % число входов для слоя регрессии

model = Sequential() # ввод последовательностей model.add(LSTM(numHiddenUnits, return_sequences=true)) model.add(Dense(numResponses))

maxEpochs = 100; % число эпох для обучения miniBatchSize = 25;% мини блоки обучающей выборки

model.compile(loss=’mean_squared_error’, optimizer=’adam’) history = model.fit(train_X, train_y,

epochs=maxEpochs, batch_size=miniBatchSize, validation_data=(test_X, test_y), verbose=2, shuffle=False)

§ 2. Практические задания

Задание № 1: Классификация частей речи.

1.Реализовать LSTM модель для классификации 10 частей речи: существительное; прилагательное; числительное; местоимение; глагол; наречие; предлог; союз; частица; междометие.

2.Подготовить обучающую выборку из эталонных слов, а также расширенную выборку для валидации результатов.

3.Упорядочить обучающую выборку по длине слов и найти оптимальное разбиение на мини блоки (приводящее к минимальному расширению нулями в пределах мини выборки).

4.Обучить сеть и проверить качество предсказаний.

5.Как можно улучшить результаты? Попробуйте использовать dropout метод и регуляризацию.

Задание № 2: Предсказание времени отказа для ракетных двигателей.

1.Скачать данные с сайта НАСА https://ti.arc.nasa.gov/c/6/

2.Использовать данные из колонок 3 – 26 в качестве данных для входов.

3.Данные из второй колонки (время работы блока) использовать в качестве эталонных данных для регрессии.

4.Удалить из выборки константные данные (не менявшиеся на протяжении измерений).

5.Провести обучение модели на одном блоке данных, а затем проверить её предсказания на расширенном множестве данных.

Задание № 3: Генератор стихов.

1.Разработать LSTM модель, получающую на входе набор ключевых слов (2-3), а на выходе выдающей шаблонную последовательность, включащую эти слова. В качестве шаблона выбрать четверостишья.

2.Провести обучение и проверить работу модели.

4

Список литературы

[1]Schmidhuber, J.; Gers, F.; Eck, D., “Learning nonregular languages: A comparison of simple recurrent networks and LSTM”, Neural Computation, 9:14 (2002), 2039–2041.

[2]Sepp Hochreiter; Jurgen Schmidhuber, “Long short-term memory”, Neural Computation, 8:9 (1997), 1735–1780.

Соседние файлы в папке Задания