pytorch实战笔记1:简单模型-线性回归
线性回归
1.1 常用库
nn:
import torch.nn as nn
np:
import numpy as np
1.2 代码
import torch
import torch.nn as nn
# 模型结构
class LinearRegressionModel(nn.Module):
def __init__(self, input_dim, out_dim):
super(LinearRegressionModel, self).__init__()
# 需要用到哪些层,就改成哪些
self.linear = nn.Linear(input_dim, output_dim)
def forward(self, x):
out = self.linear(x)
return out
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim, output_dim)
# 指定好参数和损失函数
epochs = 1000 # 回合数
learning_rate = 0.01 # 学习率
optimizer = torch.optim.SGD(model.parameters(), lr = learning_rate) # 优化器
criterion = nn.MSELoss() # 损失函数
# 训练模型
for epoch in range(epochs):
epoch += 1
# 注意转换成tensor
inputs = torch.from_numpy(x_train) # 将训练图像转换为tensor
labels = torch.from_numpy(y_train) # 将图像标签转换为tensor
# 每一次迭代的梯度要清零
optimizer.zero_grad()
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 反向传播
loss.backward()
# 更新权重参数
optimizer.step()
if epoch % 50 == 0:
print('epoch {}, loss {}'.format(epoch, loss.item()))
# 模型的保存
torch.save(model.state_dict(), 'model.pkl')
# 模型的读取
model.load_state_dict(torch.load('model.pkl'))
1.3 参数设置
- optimizer:
基本:SGD - 损失函数
分类:交叉熵
回归:MSE
1.4 使用GPU进行训练
# 只需要把数据和模型传入到cuda里面就行了
import torch
import torch.nn as nn
import numpy as np
class LinearRegressionModel(nn.Module):
def __init__(self, input_dim, output_dim):
super(LinearRegressionModel, self).__init__()
self.linear = nn.Linear(input_dim, output_dim)
def forward(self, x):
out = self.linear(x)
return out
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim, output_dim)
# device:使用CPU还是GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
criterion = nn.MSELoss()
learnig_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(), lr = learning_rate)
epochs = 1000
for epoch in range(epochs):
epoch += 1
inputs = torch.from_numpy(x_train).to(device)
labels = torch.from_numpy(y_train).to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
if epoch % 50 == 0:
print('epoch {}, loss {}'.format(epoch, loss.item()))
1.5 tensor常见形式
- 0:scalar 数值
- 1:vector 向量
- 2:matrix 矩阵
- 3 n-dimensional tensor n维张量
1.6 hub模块
- github: https://github.com/pytorch/hub
- 模型:https://pytorch.org/hub/research-models