zoukankan      html  css  js  c++  java
  • python pytorch numpy DNN 线性回归模型

    1、直接奉献代码,后期有入门更新,之前一直在学的是TensorFlow,

    import torch
    from torch.autograd import Variable
    import torch.nn.functional as F
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    x_data = np.arange(-2*np.pi,2*np.pi,0.1).reshape(-1,1)
    y_data = np.sin(x_data).reshape(-1,1)
    
    x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1)  # 将1维的数据转换为2维数据
    # y = x.pow(2) + 0.2 * torch.rand(x.size())
    y = torch.cos(x)
    # 将tensor置入Variable中 
    x, y = Variable(torch.from_numpy(x_data)).float(), Variable(torch.from_numpy(y_data)).float()
    print(x.shape,y.shape)
    
    # plt.scatter(x.data.numpy(), y.data.numpy())
    # plt.show()
    
    # 定义一个构建神经网络的类 
    class Net(torch.nn.Module):  # 继承torch.nn.Module类
        def __init__(self):
            super(Net, self).__init__()  # 获得Net类的超类(父类)的构造方法
            # 定义神经网络的每层结构形式
            # 各个层的信息都是Net类对象的属性
            self.hidden = torch.nn.Linear(1, 10)  # 隐藏层线性输出
            self.centre_1 = torch.nn.Linear(10,20)
            self.predict = torch.nn.Linear(20, 1)  # 输出层线性输出
    
        # 将各层的神经元搭建成完整的神经网络的前向通路
        def forward(self, x):
            x = F.tanh(self.hidden(x))  # 对隐藏层的输出进行relu激活
            x_1 = F.tanh(self.centre_1(x))
            x =F.tanh(self.predict(x_1))
            return x
    
        # 定义神经网络
    
    
    net = Net()
    print(net)  # 打印输出net的结构
    
    # 定义优化器和损失函数 
    optimizer = torch.optim.SGD(net.parameters(), lr=0.5)  # 传入网络参数和学习率
    loss_function = torch.nn.MSELoss()  # 最小均方误差
    acc = lambda y1,y2: np.sqrt(np.sum(y1**2+y2**2)/len(y1))
    
    # 神经网络训练过程 
    plt.ion()  # 动态学习过程展示 
    plt.show()
    
    for t in range(100):
        prediction = net(x)  # 把数据x喂给net,输出预测值
        loss = loss_function(prediction, y)  # 计算两者的误差,要注意两个参数的顺序
        optimizer.zero_grad()  # 清空上一步的更新参数值
        loss.backward()  # 误差反相传播,计算新的更新参数值
        optimizer.step()  # 将计算得到的更新值赋给net.parameters()
    
        # 可视化训练过程
        if (t + 1) % 2 == 0:
            plt.cla()
            plt.scatter(x.data.numpy(), y.data.numpy())
            plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
            aucc = acc(prediction.data.numpy(),y.data.numpy())
            print("loss={} aucc={}".format(loss.data.numpy(),aucc))
            plt.text(-4.5, 1,
                     'echo=%sL=%.4f acc=%s' % (t+1,loss.data.numpy(),aucc),
                     fontdict={'size': 15, 'color': 'red'})
            plt.pause(0.1)
    print("训练结束")
    plt.ioff()
    plt.show()
    

      

  • 相关阅读:
    你知道Synchronized底层实现原理嘛
    一篇搞定Java集合类原理
    lsp都要会的内存模型
    Sql Server 查询优化
    使用Windows的mstsc远程桌面连接到Ubuntu图形界面(AWS上安装的Ubuntu系统)
    AWS EC2实例Ubuntu系统设置root用户密码并使用root/ubuntu用户登录
    安装mysql.zip文件教程(包含常见问题修复)
    DevExpress GridControl小结
    C#开发必会
    C# 错误集锦
  • 原文地址:https://www.cnblogs.com/wuzaipei/p/11366765.html
Copyright © 2011-2022 走看看