11 KiB
11 KiB
In [22]:
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 [23]:
W = torch.randn((1, 1), requires_grad=True)
B = torch.randn((1, 1), requires_grad=True)In [24]:
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 = 10481.2871 Epoch 400: Loss = 207.9038 Epoch 800: Loss = 122.0165 Epoch 1200: Loss = 71.6102 Epoch 1600: Loss = 42.0273 Epoch 2000: Loss = 24.6654 Epoch 2400: Loss = 14.4759 Epoch 2800: Loss = 8.4958 Epoch 3200: Loss = 4.9861 Epoch 3600: Loss = 2.9263 Epoch 4000: Loss = 1.7174 Epoch 4400: Loss = 1.0079 Epoch 4800: Loss = 0.5916 Epoch 5200: Loss = 0.3472 Epoch 5600: Loss = 0.2038 Epoch 6000: Loss = 0.1196 Epoch 6400: Loss = 0.0702 Epoch 6800: Loss = 0.0412 Epoch 7200: Loss = 0.0242 Epoch 7600: Loss = 0.0142 Epoch 8000: Loss = 0.0083 Epoch 8400: Loss = 0.0049 Epoch 8800: Loss = 0.0029 Epoch 9200: Loss = 0.0017 Epoch 9600: Loss = 0.0010 Epoch 10000: Loss = 0.0006 Epoch 10400: Loss = 0.0003 Epoch 10800: Loss = 0.0002 Epoch 11200: Loss = 0.0001 Epoch 11600: Loss = 0.0001 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 [25]:
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: 212.00°F (Ожидалось: 212.00) Итоговый вес W: 1.8000 (Ожидалось: 1.8) Итоговое смещение B: 31.9986 (Ожидалось: 32.0)
In [26]:
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 [27]:
model = nn.Linear(in_features=1, out_features=1)In [28]:
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)In [29]:
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 = 5640.71875 Epoch 400: loss = 197.63983154296875 Epoch 800: loss = 115.99267578125 Epoch 1200: loss = 68.0748291015625 Epoch 1600: loss = 39.95244598388672
In [30]:
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.59°F Итоговый вес W: 2.0797 Итоговое смещение B: 23.6129
In [31]:
import torch
import torch.nn as nn
import torch.optim as optim
# 1. Define the MLP model
class SimpleMLP(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleMLP, self).__init__()
# First linear layer: input to hidden layer
self.fc1 = nn.Linear(input_size, hidden_size)
# Second linear layer: hidden layer to output layer
self.fc2 = nn.Linear(hidden_size, output_size)
def forward(self, x):
# Apply ReLU activation function
x = torch.relu(self.fc1(x))
# Output layer (no activation for regression or logits)
x = self.fc2(x)
return x
# 2. Setup parameters
input_size = 784 # Example: Flattened MNIST image (28*28)
hidden_size = 128
output_size = 10 # Example: Number of classes for classification
# Initialize the model
model = SimpleMLP(input_size, hidden_size, output_size)
print("--- MLP Model Architecture ---")
print(model)
# 3. Create dummy data for demonstration (In a real scenario, you would load a dataset like MNIST)
# Batch size and input features
batch_size = 64
dummy_input = torch.randn(batch_size, input_size)
# Dummy labels
dummy_target = torch.randint(0, output_size, (batch_size,))
# 4. Setup Loss Function and Optimizer
criterion = nn.CrossEntropyLoss() # Suitable for multi-class classification
optimizer = optim.Adam(model.parameters(), lr=0.001)
print("\n--- Starting Training Simulation ---")
# 5. Training Loop (Simulation)
num_epochs = 5
for epoch in range(num_epochs):
# Forward pass
outputs = model(dummy_input)
# Calculate loss
loss = criterion(outputs, dummy_target)
# Backward pass and optimization
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
print("\nMLP Example successfully defined and simulated training steps.")--- MLP Model Architecture --- SimpleMLP( (fc1): Linear(in_features=784, out_features=128, bias=True) (fc2): Linear(in_features=128, out_features=10, bias=True) ) --- Starting Training Simulation --- Epoch [1/5], Loss: 2.3642 Epoch [2/5], Loss: 2.0382 Epoch [3/5], Loss: 1.7581 Epoch [4/5], Loss: 1.5167 Epoch [5/5], Loss: 1.3047 MLP Example successfully defined and simulated training steps.
In [32]:
import torch
from torch import nn
from matplotlib import pyplot as pltIn [ ]:
X_test = torch.tensor(In [ ]:
class Model(nn.Module):
def __init__(self):
super().__init__()
In [ ]:
In [ ]: