目录
LEARNING PYTORCH WITH EXAMPLES
5.PyTorch实现线性回归
① 准备数据集
② 设计模型
③ 构造损失函数和优化器
④ 编写训练周期
作业:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
============================================
时间:2021.8.14
作者:手可摘星辰不去高声语
文件名:05-pytorch实现线性回归.py
功能:
1、Ctrl + Enter 在下方新建行但不移动光标;
2、Shift + Enter 在下方新建行并移到新行行首;
3、Shift + Enter 任意位置换行
4、Ctrl + D 向下复制当前行
5、Ctrl + Y 删除当前行
6、Ctrl + Shift + V 打开剪切板
7、Ctrl + / 注释(取消注释)选择的行;
8、Ctrl + E 可打开最近访问过的文件
9、Double Shift + / 万能搜索
============================================
'''
from abc import ABC
import torch
import matplotlib.pyplot as plt
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])
# print(x_data.shape)
class LinearModel(torch.nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1, 1)
def forward(self, x):
y_pred = self.linear(x)
return y_pred
epoch_list = []
loss_list = []
model = LinearModel()
criterion = torch.nn.MSELoss(size_average=False)
optimzer = torch.optim.Rprop(model.parameters(), lr=0.01)
# 这个Rprop算法的效果和SGD的效果都特别好,但是其他的有些算法算着算着就发散了
for epoch in range(5000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
print("Epoch:{}\tMSE:{}".format(epoch, loss))
optimzer.zero_grad()
loss.backward()
optimzer.step()
epoch_list.append(epoch)
loss_list.append(loss.data.item())
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
y_pred = model(x_test)
print('y_pred = ', y_pred.data.item())
plt.plot(epoch_list, loss_list)
plt.xlabel("Epoch")
plt.ylabel("MSE")
plt.grid()
plt.show()
关于pytorch中的张量和维度的概念
From:对pytorch中张量的形状和维度的理解https://blog.csdn.net/weixin_44729115/article/details/104727913
这个图就是非常非常的形象了!!!