Решение задач регрессии с помощью нейронной сети
Автор: Radik • Апрель 11, 2022 • Лабораторная работа • 985 Слов (4 Страниц) • 752 Просмотры
ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ.ПРОФ М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ
Лабораторная работа № 7
По дисциплине: «Теория информации, данные, знания»
Решение задач регрессии с помощью нейронной сети
Вариант 6
[pic 1]
г. Санкт-Петербург
2021 год
Оглавление
Задание 2
Выполнение. 3
Исследование нейросети. 3
Задание 1. 7
Задание 2. 7
Задание 3. 8
Задание 4. 9
Задание
Задание 7. Исследовать свойства нейросети.
Задание на лабораторную работу
- Исследовать нейронную сеть при заданных начальных параметрах (см. таблицу). Найти минимальное значение n_hidden_neurons, при котором сеть дает удовлетворительные результаты.
- Найти наилучшее значение шага градиентного спуска lr в интервале от номинального значения.[pic 2]
- Изменить нейронную сеть для предсказания функции y = 2x * sin(2−x)
- Для этой задачи (п. 3) получите метрику MAE = [pic 3]
Таблица. Начальные значения гиперпараметров нейронной сети
Вариант | Метод оптимизации | Число нейронов в скрытом слое n_hidden_neurons | Шаг градиентного спуска lr |
0 | SGD | 20 | 0.01 |
Работа была выполнена в Google Colaboratory.
Исследуем нейронную сеть.
a)Train dataset (обучение нейронной сети на тренировочных данных)
## Импортируем torch и matplotlib, чтобы рисовать графики.
import torch
import matplotlib.pyplot as plt
##
##
import matplotlib
matplotlib.rcParams['figure.figsize'] = (13.0, 5.0)
## начнём тренировку (тренировочных данных)
## Возьмём точки из равномерного распределения от нуля до единицы, 100 штук
x_train = torch.rand(100)
## Kаждую точку домножим на 20, отнимем от неё 10, чтобы график примерно был по центру – это будут наши значения "x".
x_train = x_train * 20.0 - 10.0
## "y" – это будут синусы от данных точек.
y_train = torch.sin(x_train)
## Посмотрим что получилось.
plt.plot(x_train.numpy(), y_train.numpy(), 'o')
plt.title('$y = sin(x)$');
[pic 4]
## Добавим в обучающую выборку немного шума.
noise = torch.randn(y_train.shape) / 5.
plt.plot(x_train.numpy(), noise.numpy(), 'o')
plt.axis([-10, 10, -1, 1])
plt.title('Gaussian noise');
y_train = y_train + noise
plt.plot(x_train.numpy(), y_train.numpy(), 'o')
plt.title('noisy sin(x)')
plt.xlabel('x_train')
plt.ylabel('y_train');
## Нужно трансформировать строки в столбцы для поддержки нескольких значений х
## x_train и y_train изменились, и теперь это столбцы
x_train.unsqueeze_(1)
y_train.unsqueeze_(1);
## Посмотрим что получилось.
[pic 5]
b) Validation dataset (обучаем нейронную сеть на тех данных, которые она еще не видела).
## Начался validation dataset. Валидируется на тех данных которые она не видела.
x_validation = torch.linspace(-10, 10, 100)
## Так как мы знаем, что это функция синуса, то её и берем, но в этот раз без шумаy_validation = torch.sin(x_validation.data)
##
plt.plot(x_validation.numpy(), y_validation.numpy(), 'o')
plt.title('sin(x)')
plt.xlabel('x_validation')
plt.ylabel('y_validation');
...