LinearRegression

LinearRegression 线性回归

概念:只有一个简单的线性模型的神经网络
构建步骤:

  1. 构建数据集
  2. 设计模型
  3. 前向传播
  4. 构建损失函数和优化器
  5. 反向传播
  6. 训练模型

Python魔法函数简介

__call__: 调用方法,使对象可以像函数一样被调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Play:
def __init__(self):
print('init构造方法被调用了!')
pass

def __call__(self,*args,**kwargs):
print('call方法被调用了!')
print('Hello:' + str(args[0]))
print('Hello:' + str(kwargs))
self.forward()

def forward(self):
print('forward函数被调用了')

play = Play()
play(1,2,3,x=1,y=2)

线性回归模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: UTF-8 -*-
import torch
import torch.nn as nn
import matplotlib.pyplot as plt

# 数据集 3行1列矩阵
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

# Model
class LinearModel(nn.Module):
# 构造函数
def __init__(self):
# 调用父类构造器
super(LinearModel,self).__init__()
self.linear = nn.Linear(1,1)

# 前馈函数
def forward(self,x):
return self.linear(x)

# Model实例化
model = LinearModel()

# 损失函数
loss_function = nn.MSELoss(size_average=False)
# 优化器
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

l1 = []
ep = []

# Trainning
# 前馈函数
# 计算损失
# 梯度清零
# 反向传播计算梯度
# 更新权重
for epoch in range(1000):
y_hat = model(x_data)
loss = loss_function(y_hat,y_data)
l1.append(loss.item())
ep.append(epoch)
print(epoch,loss.item())

optimizer.zero_grad()
loss.backward()
optimizer.step()

x_test = torch.Tensor([4])
print(model(x_test).data.item())

plt.plot(ep,l1)
plt.ylabel('Loss')
plt.xlabel('epoch')
plt.show()
Donate comment here