Pytorch学习(四)---- Regression 回归

莫烦python视频学习笔记 视频链接https://www.bilibili.com/video/BV1Vx411j7kT?from=search&seid=3065687802317837578

import torch
from torch.autograd import Variable
import torch.nn.functional as F
import matplotlib.pyplot as plt
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
# import os 这里是为了防止报错加的

# 设置数据
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = x.pow(2) + 0.2*torch.rand(x.size())

x, y = Variable(x), Variable(y)

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

输出:Pytorch学习(四)---- Regression 回归_第1张图片

学习搭建一个简单的神经网络

class Net(torch.nn.Module):
# 搭建基本信息
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)   # 隐藏层
        self.predict = torch.nn.Linear(n_hidden, n_output)    # 预测层
# 神经网络前向传递的过程(流程)
    def forward(self, x):
        x = F.relu(self.hidden(x))      # 用激励函数激活
        x = self.predict(x)      # 预测值的取值范围很大,激励函数会将预测值截断,故而不用激励函数
        return x

net = Net(1, 10, 1)
print(net)

# 使所绘制的图形变成实时打印的状态
plt.ion()       # something about plotting
plt.show()

# 优化神经网络参数
optimizer = torch.optim.SGD(net.parameters(), lr=0.5)     # 传入参数,lr是学习效率
loss_func = torch.nn.MSELoss()      # 均方误差

# 训练
for t in range(100):
    prediction = net(x)
    loss = loss_func(prediction, y)    # 预测值与真实值对比

    # 优化
    optimizer.zero_grad()     # 将梯度降为零
    loss.backward()
    optimizer.step()       # 以学习效率0.5优化梯度
    # 可视化
    if t % 5 == 0:
        # plot and show learning process
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy())
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
        plt.text(0.5, 0, 'Loss=%.4f' % loss.data, fontdict={
     'size': 20, 'color': 'red'})
        plt.pause(0.1)
        # loss.data[0]在新版本里要写成loss.data

plt.ioff()
plt.show()

输出图像:
因为变化过程中打印图像较多,此处只展示几张图片,并且别每次的训练结果都不一样。

Pytorch学习(四)---- Regression 回归_第2张图片 Pytorch学习(四)---- Regression 回归_第3张图片
Pytorch学习(四)---- Regression 回归_第4张图片Pytorch学习(四)---- Regression 回归_第5张图片
可以看出误差逐渐降低,拟合效果变好。

你可能感兴趣的:(Pytorch学习(四)---- Regression 回归)