动手学深度学习(七)——非线性回归网络

pytorch学习(七)——非线性回归网络

说明:这篇博客主要是pytorch实现非线性回归模型,可以非常清晰地看清在pytorch之中进行模型训练的步骤和方式,相关代码
代码包参考:https://download.csdn.net/download/jerry_liufeng/13096226

一、导入相关模块

import numpy as np
import matplotlib.pyplot as plt
from torch import optim
from torch.autograd import Variable
import torch
from torch import nn

二、生成数据

x_data = np.linspace(-2,2,200)[:,np.newaxis] # 后面部分表示在列的位置上加上一个维度
noise = np.random.normal(0,0.2,x_data.shape)
y_data = np.square(x_data)+noise

plt.scatter(x_data,y_data)
plt.show()

原始数据

将numpy格式的数据变为tensor中的变量

# 将numpy数据变为tensor数据
x_data = torch.FloatTensor(x_data)
y_data = torch.FloatTensor(y_data)

# 将数据变为tensor中的变量
inputs = Variable(x_data) 
target = Variable(y_data)

三、构建网络模型

class NonLinearRegression(nn.Module):
    def __init__(self):
        # 定义网络结构
        super(NonLinearRegression,self).__init__() # 初始化父类
        self.fc1 = nn.Linear(1,10) # 输入层,全连接层
        self.tanh = nn.Tanh()      # 激活函数
        self.fc2 = nn.Linear(10,1) # 一个隐藏层
        
    def forward(self,x):
        #定义网络计算
        x = self.fc1(x) # 全连接层
        x = self.tanh(x) # 激活选择
        x = self.fc2(x) # 隐藏层计算输出最终结果
        return x

四、定义模型

# 定义模型
model = NonLinearRegression()

# 定义代价函数-均方根代价函数
mse_loss = nn.MSELoss()

# 定义优化器—随机梯度下降法
optimizer = optim.SGD(model.parameters(),lr=0.1)

五、查看模型参数(并非必要)

# 查看模型参数
for name,parameter in model.named_parameters():
    print('name:{},param:{}'.format(name,parameter))

模型参数

六、模型训练

# 模型训练
for i in range(1001):
    out = model(inputs)
    #计算loss
    loss =mse_loss(out,target)
    # 梯度清零
    optimizer.zero_grad()
    # 计算梯度
    loss.backward()
    # 修改权值
    optimizer.step()
    if i%200==0:
        print(i,loss.item())

七、绘图查看

# 绘图
y_pred = model(inputs)
plt.scatter(x_data,y_data)
plt.plot(x_data,y_pred.data.numpy(),'r-',lw=3) # 注意y_pred为tensor的变量类型,需要取出数据然后变为numpy类型
plt.show()

绘图可视化

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值