zoukankan      html  css  js  c++  java
  • Pytorch01_通用结构

    通用结构

    首先:导入相关库

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import torch
    from torch import nn
    from torch.autograd import Variable
     
    plt.rcParams['font.sans-serif'] = ['SimHei'] 
    plt.rcParams['axes.unicode_minus'] = False

    step1:建立数据集,Train and Test

    step2:建立模型

    class BP(nn.Module):
        def __init__(self, input_size=576, output_size=288):
            super(BP, self).__init__()
            self.bp = nn.Sequential(
                nn.Linear(input_size, 288),
                nn.Linear(288, 144),
                nn.Linear(144, 72),
                nn.Linear(72, output_size),
            )
    
        def forward(self, x):
            result = self.bp(x)
            return result

    另外一种写法

    def create_net():
        net = nn.Sequential()
        net.add_module("linear1",nn.Linear(15,20))
        net.add_module("relu1",nn.ReLU())
        net.add_module("linear2",nn.Linear(20,15))
        net.add_module("relu2",nn.ReLU())
        net.add_module("linear3",nn.Linear(15,1))
        net.add_module("sigmoid",nn.Sigmoid())
        return net
    
    net = create_net()
    print(net)

    效果都一样

    Sequential(
    (linear1): Linear(in_features=15, out_features=20, bias=True)
    (relu1): ReLU()
    (linear2): Linear(in_features=20, out_features=15, bias=True)
    (relu2): ReLU()
    (linear3): Linear(in_features=15, out_features=1, bias=True)
    (sigmoid): Sigmoid()
    )

    step3:设置误差计算方法(均方差)及模型优化方法

    model = BP()
    criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-2) # 1e-2

    step4:训练

    for e in range(3000):
        var_x = Variable(Train_x)
        var_y = Variable(Train_y)
        # 前向传播
        var_x = torch.tensor(var_x, dtype=torch.float32)
        var_y = torch.tensor(var_y, dtype=torch.float32)
        out = model(var_x)
        loss = criterion(out, var_y)
        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
        if (e + 1) % 10 == 0:  # 每 10 次输出结果
            print('Epoch: {}, Loss: {:.5f}'.format(e + 1, loss.item()))

    step5:使用测试集进行预测

    model = model.eval()  # 转换成测试模式
    Test_x = Variable(Test_x)
    Test_x = torch.tensor(Test_x, dtype=torch.float32)
    pred_test = model(Test_x)  # 测试集的预测结果
    # 改变输出的格式
    pred_test = pred_test.view(-1).data.numpy()

    常用损失函数总结

    nn.CrossEntropyLoss()  # 交叉熵,用于分类问题
    nn.MSELoss()  # 均方误差,拟合 回归问题

    常用优化器总结

    torch.optim.SGD   # 带动量SGD优化算法
    torch.optim.ASGD  # 表示随机平均梯度下降
    torch.optim.Adagrad  # 是自适应的为各个参数分配不同的学习率
    torch.optim.Adadelta  # Adadelta是Adagrad的改进。Adadelta分母中采用距离当前时间点比较近的累计项,这可以避免在训练后期,学习率过小。
    torch.optim.RMSprop   # 也是对Adagrad的一种改进。RMSprop采用均方根作为分母,可缓解Adagrad学习率下降较快的问题
    torch.optim.Adam(AMSGrad)  # Adam是一种自适应学习率的优化方法,Adam利用梯度的一阶矩估计和二阶矩估计动态的调整学习率
    我喜欢一致,可是世界并不一致
  • 相关阅读:
    vmware下玩ubuntu总结
    .Net Json 字典序列化
    Flex Air TitleWindow 拖动范围控制
    TimesTen 问题荟萃
    TimesTen 时间戳(timestamp)用法
    批量数据插入 (.Net, ODBC)
    腾讯 360浏览器 调用js问题
    [转]Android项目源码混淆问题解决方法
    Intent调用大全
    View实现涂鸦、撤销以及重做功能【转】
  • 原文地址:https://www.cnblogs.com/Haozi-D17/p/14866244.html
Copyright © 2011-2022 走看看