pytorch系列(1):简单回归算法实现

import torch
import matplotlib.pyplot as plt

#torch.unsqueeze()度扩充,将1*100的tensor变为100*1的维度,作为完整数据集一次性喂给网络   还有squeeze正好相反
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#训练集-1到1共100个数据
y=x.pow(2)+0.2*torch.rand(x.size())#标签值

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

#搭建神经网路
import torch.nn.functional as fun

#声明一个NN类,继承自torch.nn.Module
class Net(torch.nn.Module):
    #初始化函数__init__
    def __init__(self,n_feature,n_hidden,n_output):  #参数为输入神经元,中间神经元,输出神经元
        super(Net,self).__init__()#继承__init__功能
        #定义隐藏层和输出层结构
        self.hidden=torch.nn.Linear(n_feature,n_hidden)#隐藏层
        self.predict=torch.nn.Linear(n_hidden,n_output)#输出层
    #定义前向传播函数
    def forward(self,x):#参数为输入层神经元
        x=fun.relu(self.hidden(x))#先计算再relu激活,隐藏层传播
        x=self.predict(x)#输出层
        return x


#实例化Net类
net=Net(n_feature=1,n_hidden=10,n_output=1)
print(net)#打印网络结构



#训练网络

#声明优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)#传入net所有的参数,学习率
loss_fun=torch.nn.MSELoss()#均方根误差为指标

#迭代训练
for i in range(100):
    prediction=net(x)#给网络喂数据集
    
    loss=loss_fun(prediction,y)#计算预测值和真实值之间的误差
    
    #bp优化过程
    optimizer.zero_grad()#清空上一步的残余更新参数值
    loss.backward()#误差反向传播,计算参数更新值
    optimizer.step()#将参数的更新值施加到net的parameters上面
    
    

#动态可视化过程
plt.ion()#打开交互模式
plt.show()
#迭代训练
for i in range(100):
    prediction=net(x)#给网络喂数据集
    
    loss=loss_fun(prediction,y)#计算预测值和真实值之间的误差
    
    #bp优化过程
    optimizer.zero_grad()#清空上一步的残余更新参数值
    loss.backward()#误差反向传播,计算参数更新值
    optimizer.step()#将参数的更新值施加到net的parameters上面
    
    if i%5==0:
        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.numpy(), bbox=dict(facecolor='red', alpha=0.5))#显示loss值
        
        plt.pause(0.1)#暂停时间
plt.ioff()#关闭交互模式
plt.show()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值