Академический Документы
Профессиональный Документы
Культура Документы
Лабораторная работа №7
по дисциплине
«Теория информации, данные, знания»
Фамилия: Алексеев
Имя: Егор
Отчество: Алексеевич
Курс: 3
№ зачетной книжки: 2010108
Группа №: ИБ – 04з
Проверил:______________
Санкт-Петербург
2023
Лабораторная работа №7
по дисциплине «Теория информации, данные, знания»
«Решение задачи регрессии с помощью нейронной сети»
import matplotlib.pyplot as plt
import matplotlib
# Задаем тренировочные данные
x_train = torch.rand(400)
x_train = x_train * 20.0 - 10.0
print (max(x_train))
y_train = torch.sin(x_train)
# Добавляем шум к данным
noise = torch.randn(y_train.shape) / 5.
y_train = y_train + noise
# Переворачиваем данные
x_train.unsqueeze_(1)
y_train.unsqueeze_(1)
print(x_train.shape)
# Данные для валидации
x_validation = torch.linspace(-10, 10, 400)
y_validation = torch.sin(x_validation.data)Ы
x_validation.unsqueeze_(1)
y_validation.unsqueeze_(1)
# Задаем нейронную сеть
class SineNet(torch.nn.Module):
def __init__(self, n_hidden_neurons):
super(SineNet, self).__init__()
self.fc1 = torch.nn.Linear(1, n_hidden_neurons)
self.act1 = torch.nn.Sigmoid()
self.fc2 = torch.nn.Linear(n_hidden_neurons, 1)
def forward(self, x):
x = self.fc1(x)
x = self.act1(x)
x = self.fc2(x)
return x
sine_net = SineNet(50)
# Расчет по нейронке и отрисовка сети
matplotlib.rcParams['figure.figsize'] = (13.0, 5.0)
def predict(net, x, y,num):
y_pred = net.forward(x)
plt.clf()
plt.plot(x.numpy(), y.numpy(), 'o', label='Ground truth')
plt.plot(x.numpy(), y_pred.data.numpy(), 'o', c='r', label='Prediction
')
plt.legend(loc='upper left')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.ylim(-1.1, 1.1)
plt.text(7.1, -0.9, num, fontsize=20)
num = num.replace(':', '-')
print(num)
plt.savefig(fname=f"{num}.png")
# plt.show()
#predict(sine_net, x_validation, y_validation,"Test")
# Оптимизатор
optimizer = torch.optim.Adam(sine_net.parameters(), lr=0.01)
# Лосс функция SGD
def loss(pred, target):
squares = (pred - target) ** 2
return squares.mean()
torch.cuda.is_available()
torch.device('cuda:0')
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(device)
# Расчет Картинки
sine_net.fc1.reset_parameters()
sine_net.fc2.reset_parameters()
for epoch_index in range(2000):
optimizer.zero_grad()
y_pred = sine_net.forward(x_train)
loss_val = loss(y_pred, y_train)
loss_val.backward()
optimizer.step()
predict(sine_net, x_validation, y_validation,f"epoch:{epoch_index}")