Лаб. 3 НС
.docxМОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ
Институт системной и программной инженерии и информационных технологий (Институт СПИНТех)
Лабораторная работа № 3
Создание однонаправленной нейронной сети с помощью нейронно-стевого инструментария Python.
Выполнил:
Фамилия И.О. гр. ???-??
Проверил преподаватель:
проф., д.ф.-м. н. Рычагов М.Н.
Москва, 2026
Задание №1
Код:
import torch import torch.nn as nn import torch.optim as optim from model import SimpleNet from data import generate_data from draw import evaluate_model noise_levels = [0.01, 0.05, 0.1, 0.2] results = {} loss = 0 for nl in noise_levels: print(f"\nШум = {nl}") model = SimpleNet() criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.01) inputs, targets = generate_data(M=500, noise_level=nl) for epoch in range(1000): optimizer.zero_grad() loss = criterion(model(inputs), targets) loss.backward() optimizer.step() results[nl] = loss.item() print(f"Финальная ошибка: {loss.item():.6f}") filename = f"model_noise_{nl}.pth" torch.save(model.state_dict(), filename) test_inputs, test_targets = generate_data(100) evaluate_model(model, test_inputs, test_targets, title_prefix=f"Шум {nl}:") print("\nИтог:") for nl, loss in results.items(): print(f"Шум {nl}: ошибка {loss:.6f}")
Вывод:
Шум = 0.01
Финальная ошибка: 0.005523
Шум = 0.05
Финальная ошибка: 0.006677
Шум = 0.1
Финальная ошибка: 0.008732
Шум = 0.2
Финальная ошибка: 0.012819
Итог:
Шум 0.01: ошибка 0.005523
Шум 0.05: ошибка 0.006677
Шум 0.1: ошибка 0.008732
Шум 0.2: ошибка 0.012819
Рисунок 1. Результаты тестирования нейронной сети при уровне шума 0,01
Рисунок 2. Результаты тестирования нейронной сети при уровне шума 0,05
Рисунок 3. Результаты тестирования нейронной сети при уровне шума 0,1
Рисунок 4. Результаты тестирования нейронной сети при уровне шума 0,2
Комментарий:
В ходе эксперимента было установлено, что с увеличением уровня шума во входных данных возрастает ошибка обучения нейронной сети.
При малых значениях шума (0.01) сеть демонстрирует высокую точность, так как исходная функциональная зависимость практически не искажена.
При увеличении шума до 0.2 входные данные искажаются значительнее, что затрудняет восстановление параметров функции, вследствие чего ошибка возрастает.
Таким образом, наличие шума ухудшает качество обучения и точность работы нейронной сети.
Следует отметить, что коэффициент корреляции R не всегда напрямую отражает точность модели.
Несмотря на рост ошибки при увеличении шума, значение R может оставаться высоким, так как сохраняется общая линейная зависимость между предсказанными и эталонными значениями.
Задание №2
Код:
import torch import torch.nn as nn import torch.optim as optim from model import SimpleNet from data import generate_data from draw import evaluate_model model = SimpleNet() criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.01) P_rand = torch.rand(100, 21) T_rand = torch.rand(100, 3) loss = 0 for epoch in range(1000): optimizer.zero_grad() loss = criterion(model(P_rand), T_rand) loss.backward() optimizer.step() if epoch % 200 == 0: print(f"Epoch {epoch}, Loss: {loss.item():.6f}") print(f"\nФинальная ошибка: {loss.item():.6f}") torch.save(model.state_dict(), "model_random.pth") test_inputs, test_targets = generate_data(100) evaluate_model(model, test_inputs, test_targets, title_prefix="Случайные данные:")
Вывод:
Epoch 0, Loss: 0.631158
Epoch 200, Loss: 0.063013
Epoch 400, Loss: 0.058794
Epoch 600, Loss: 0.054968
Epoch 800, Loss: 0.042538
Финальная ошибка: 0.029567
Рисунок 5. Результаты тестирования нейронной сети на случайных данных
Комментарий: При обучении нейронной сети на случайных данных наблюдается снижение ошибки в процессе обучения, однако итоговое значение остаётся значительно выше, чем в предыдущем эксперименте. Это связано с тем, что между входными и выходными данными отсутствует функциональная зависимость. Нейронная сеть в данном случае не способна выявить закономерность и фактически пытается аппроксимировать случайный шум, что приводит к ограниченному снижению ошибки. Таким образом, эффективность обучения нейронной сети напрямую зависит от наличия закономерности в данных.
