Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Лінійна Регресія | Секція
PyTorch: Основи для ML-Інженера

bookЛінійна Регресія

Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:

  • 'Number of Appliances': кількість приладів у домогосподарстві (вхідна ознака, X);
  • 'Electricity Bill': відповідна сума рахунку за електроенергію (цільовий вихід, Y).

1. Завантаження та огляд набору даних

Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas та переглянемо перші кілька рядків:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Підготовка даних для PyTorch

Далі необхідно виділити стовпці вхідних даних X та цільових значень Y, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори, щоб забезпечити сумісність з операціями PyTorch:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Визначення лінійної моделі

Модуль nn.Linear у PyTorch визначає повнозв'язний шар, що виконує y = xWT + b. Це базовий елемент нейронних мереж, який може комбінуватися з іншими шарами для створення складніших архітектур.

Основні параметри:

  • in_features: кількість вхідних ознак (незалежних змінних);
  • out_features: кількість вихідних ознак (прогнозованих значень).

Для простої лінійної регресії, як у нашому випадку, передбачається одне вихідне значення на основі одного вхідного. Тобто:

  • in_features=1: одна вхідна змінна;
  • out_features=1: одне прогнозоване значення.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Визначення функції втрат і оптимізатора

Ми будемо використовувати середньоквадратичну помилку (MSE) як функцію втрат і стохастичний градієнтний спуск (SGD) як оптимізатор із швидкістю навчання 0.005.

Втрати MSE можна визначити за допомогою класу nn.MSELoss, а SGD — за допомогою відповідного класу з модуля torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Навчання моделі

Навчання включає виконання прямого проходу та зворотного проходу протягом заданої кількості епох.

  • Прямий прохід: цей крок обчислює передбачення моделі на основі вхідних даних і обчислює втрати, порівнюючи передбачення з фактичними цільовими значеннями;
  • Зворотний прохід: цей крок обчислює градієнти за допомогою зворотного поширення помилки (на основі втрат) і оновлює ваги та зсуви моделі за допомогою алгоритму оптимізації, яким у нашому випадку є SGD.

Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight та .bias:

weights = model.weight.item()
biases = model.bias.item()
Note
Примітка

optimizer.zero_grad() є важливим, оскільки скидає градієнти всіх параметрів перед зворотним поширенням помилки. Без цього кроку градієнти накопичувалися б з попередніх кроків, що призводило б до некоректного оновлення ваг моделі. Це гарантує, що кожен зворотний прохід починається з чистого стану.

question mark

Яке основне призначення використання модуля nn.Linear у PyTorch для лінійної регресії?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 13

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

bookЛінійна Регресія

Свайпніть щоб показати меню

Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:

  • 'Number of Appliances': кількість приладів у домогосподарстві (вхідна ознака, X);
  • 'Electricity Bill': відповідна сума рахунку за електроенергію (цільовий вихід, Y).

1. Завантаження та огляд набору даних

Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas та переглянемо перші кілька рядків:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Підготовка даних для PyTorch

Далі необхідно виділити стовпці вхідних даних X та цільових значень Y, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори, щоб забезпечити сумісність з операціями PyTorch:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Визначення лінійної моделі

Модуль nn.Linear у PyTorch визначає повнозв'язний шар, що виконує y = xWT + b. Це базовий елемент нейронних мереж, який може комбінуватися з іншими шарами для створення складніших архітектур.

Основні параметри:

  • in_features: кількість вхідних ознак (незалежних змінних);
  • out_features: кількість вихідних ознак (прогнозованих значень).

Для простої лінійної регресії, як у нашому випадку, передбачається одне вихідне значення на основі одного вхідного. Тобто:

  • in_features=1: одна вхідна змінна;
  • out_features=1: одне прогнозоване значення.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Визначення функції втрат і оптимізатора

Ми будемо використовувати середньоквадратичну помилку (MSE) як функцію втрат і стохастичний градієнтний спуск (SGD) як оптимізатор із швидкістю навчання 0.005.

Втрати MSE можна визначити за допомогою класу nn.MSELoss, а SGD — за допомогою відповідного класу з модуля torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Навчання моделі

Навчання включає виконання прямого проходу та зворотного проходу протягом заданої кількості епох.

  • Прямий прохід: цей крок обчислює передбачення моделі на основі вхідних даних і обчислює втрати, порівнюючи передбачення з фактичними цільовими значеннями;
  • Зворотний прохід: цей крок обчислює градієнти за допомогою зворотного поширення помилки (на основі втрат) і оновлює ваги та зсуви моделі за допомогою алгоритму оптимізації, яким у нашому випадку є SGD.

Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight та .bias:

weights = model.weight.item()
biases = model.bias.item()
Note
Примітка

optimizer.zero_grad() є важливим, оскільки скидає градієнти всіх параметрів перед зворотним поширенням помилки. Без цього кроку градієнти накопичувалися б з попередніх кроків, що призводило б до некоректного оновлення ваг моделі. Це гарантує, що кожен зворотний прохід починається з чистого стану.

question mark

Яке основне призначення використання модуля nn.Linear у PyTorch для лінійної регресії?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 13
some-alt