7.5 KiB
7.5 KiB
In [3]:
import torch
X = torch.tensor([[0.0],[10.0], [20.0], [30.0], [40.0]])
Y = torch.tensor([[32.0], [50.0], [68.0], [86.0], [104.0]])In [4]:
W = torch.randn((1, 1), requires_grad=True)
B = torch.randn((1, 1), requires_grad=True)In [13]:
learning_rate = 0.001
for epoch in range(20000):
Y_pred = X.matmul(W) + B
loss = ((Y_pred - Y)**2).mean()
loss.backward()
with torch.no_grad():
W -= learning_rate * W.grad
B -= learning_rate * B.grad
W.grad.zero_()
B.grad.zero_()
if epoch % 400 == 0:
print(f"Epoch {epoch}: Loss = {loss.item():.4f}")Epoch 0: Loss = 42.0600 Epoch 400: Loss = 24.6847 Epoch 800: Loss = 14.4873 Epoch 1200: Loss = 8.5024 Epoch 1600: Loss = 4.9900 Epoch 2000: Loss = 2.9286 Epoch 2400: Loss = 1.7188 Epoch 2800: Loss = 1.0087 Epoch 3200: Loss = 0.5920 Epoch 3600: Loss = 0.3474 Epoch 4000: Loss = 0.2039 Epoch 4400: Loss = 0.1197 Epoch 4800: Loss = 0.0702 Epoch 5200: Loss = 0.0412 Epoch 5600: Loss = 0.0242 Epoch 6000: Loss = 0.0142 Epoch 6400: Loss = 0.0083 Epoch 6800: Loss = 0.0049 Epoch 7200: Loss = 0.0029 Epoch 7600: Loss = 0.0017 Epoch 8000: Loss = 0.0010 Epoch 8400: Loss = 0.0006 Epoch 8800: Loss = 0.0003 Epoch 9200: Loss = 0.0002 Epoch 9600: Loss = 0.0001 Epoch 10000: Loss = 0.0001 Epoch 10400: Loss = 0.0000 Epoch 10800: Loss = 0.0000 Epoch 11200: Loss = 0.0000 Epoch 11600: Loss = 0.0000 Epoch 12000: Loss = 0.0000 Epoch 12400: Loss = 0.0000 Epoch 12800: Loss = 0.0000 Epoch 13200: Loss = 0.0000 Epoch 13600: Loss = 0.0000 Epoch 14000: Loss = 0.0000 Epoch 14400: Loss = 0.0000 Epoch 14800: Loss = 0.0000 Epoch 15200: Loss = 0.0000 Epoch 15600: Loss = 0.0000 Epoch 16000: Loss = 0.0000 Epoch 16400: Loss = 0.0000 Epoch 16800: Loss = 0.0000 Epoch 17200: Loss = 0.0000 Epoch 17600: Loss = 0.0000 Epoch 18000: Loss = 0.0000 Epoch 18400: Loss = 0.0000 Epoch 18800: Loss = 0.0000 Epoch 19200: Loss = 0.0000 Epoch 19600: Loss = 0.0000
In [15]:
with torch.no_grad():
X_test = torch.tensor([[100.0]])
Y_test_pred = X_test.matmul(W) + B
print("\n--- Результаты обучения ---")
print(f"Предсказание для 100°C: {Y_test_pred.item():.2f}°F (Ожидалось: 212.00)")
print(f"Итоговый вес W: {W.item():.4f} (Ожидалось: 1.8)")
print(f"Итоговое смещение B: {B.item():.4f} (Ожидалось: 32.0)")--- Результаты обучения --- Предсказание для 100°C: 211.99°F (Ожидалось: 212.00) Итоговый вес W: 1.7999 (Ожидалось: 1.8) Итоговое смещение B: 32.0029 (Ожидалось: 32.0)
In [16]:
import torch
import torch.nn as nn
import torch.optim as optim
X = torch.tensor([[0.0],[10.0], [20.0], [30.0], [40.0]])
Y = torch.tensor([[32.0], [50.0], [68.0], [86.0], [104.0]])In [17]:
model = nn.Linear(in_features=1, out_features=1)In [19]:
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)In [20]:
for epoch in range(2000):
Y_pred = model(X)
loss = criterion(Y_pred, Y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 400 == 0:
print(f"Epoch {epoch}: loss = {loss.item()}")Epoch 0: loss = 6039.51318359375 Epoch 400: loss = 199.59164428710938 Epoch 800: loss = 117.13835144042969 Epoch 1200: loss = 68.74734497070312 Epoch 1600: loss = 40.34719467163086
In [23]:
with torch.no_grad():
X_test = torch.tensor([[100.0]])
Y_test_pred = model(X_test)
print("\n--- Результаты обучения ---")
print(f"Предсказание для 100°C: {Y_test_pred.item():.2f}°F")
# Доступ к обученным весам внутри слоя
print(f"Итоговый вес W: {model.weight.item():.4f}")
print(f"Итоговое смещение B: {model.bias.item():.4f}")--- Результаты обучения --- Предсказание для 100°C: 231.68°F Итоговый вес W: 2.0811 Итоговое смещение B: 23.5716
In [ ]: