
Нейронные сети (ВМ) / Задания / laba3
.pdfУДК 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.