机器学习 - 02 Regression 回归

拟合曲线

  • 创建一条曲线,利用神经网络进行拟合
  • 数据的创建
  • torch.nn.Module 的基本使用
  • 如何训练,如何进行反向传递
  • 有哪些optimization 优化器
  • 有哪些激励函数
  • 有哪些loss function 偏差函数
  • loss function 如何进行使用的
1
2
3
4
5
from __future__ import print_function
import torch
import numpy as np
from torch.autograd import Variable
import matplotlib.pyplot as plt
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
# generator fake data
x = torch.unsqueeze(torch.linspace(-1, 1, 100), 1) # 为什么增加纬度 ?
# y = x ** 2 + torch.rand(x.size())
y = x ** 2 + 0.2 * torch.rand(x.size())
# y = x.pow(2) + 0.2 * torch.rand(x.size())


# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()

class Net(torch.nn.Module):

def __init__(self, in_future, out_future, pre_out):
super().__init__()
self.hidden = torch.nn.Linear(in_future, out_future)
self.predict = torch.nn.Linear(out_future, pre_out)

def forward(self, x):
x = torch.relu(self.hidden(x))
x = self.predict(x)
return x

net = Net(1, 10, 1)

loss_func = torch.nn.MSELoss()

optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

plt.ion()

for t in range(100):
predict = net(x)

loss = loss_func(predict, y)

optimizer.zero_grad()

loss.backward()

optimizer.step()


if t % 5 == 0:
# plot and show learning process
plt.cla()
plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), pre.data.numpy(), 'r-', lw=5)
plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)


plt.ioff()
plt.show()

几大模块

neural network神经网络模块

  • torch.nn.Module 继承,神经网络module
  • torch.nn.Linear 线性神经层数
  • torch.nn.MSELoss 计算prediction 和 real 的差值,进行反向传递

optimizer 优化模块

  • torch.optim.SGD(net.parameters(), lr=0.1)