• 利用torch.nn实现logistic回归在人工构造的数据集上进行训练和测试


    利用torch.nn实现logistic回归在人工构造的数据集上进行训练和测试:

    1)(2)(3)同手动实现

    4)构建内置迭代器

    1. #构建迭代器  
    2. lr = 0.03  
    3. batch_size = 10  
    4. 将训练数据的特征和标签组合  
    5. dataset = Data.TensorDataset(x, y)  
    6.   
    7.  dataset 放入 DataLoader  
    8. data_iter = Data.DataLoader(  
    9.     dataset=dataset, # torch TensorDataset format  
    10.     batch_size=batch_size, # mini batch size  
    11.     shuffle=True, 是否打乱数据 (训练集一般需要进行打乱)  
    12.     num_workers=0, 多线程来读数据,注意在Windows下需要设置为0  

    5)构建Logistic模型

    1. #构建Logistic模型  
    2. class LogisticNet(torch.nn.Module):  
    3.     def __init__(self, n_feature):  
    4.         super(LogisticNet, self).__init__()  
    5.         self.linear = torch.nn.Linear(n_feature, 1)  
    6.         self.sigmoid = torch.nn.Sigmoid()  
    7. # forward 定义前向传播  
    8.     def forward(self, x):  
    9.         x = self.linear(x)  
    10.         x = self.sigmoid(x)  
    11.         return x  
    12. net = LogisticNet(2)  

    6)参数初始化和定义损失函数及优化方法

    1. #参数初始化  
    2. init.normal_(net.linear.weight, mean=0, std=1.0)  
    3. init.constant_(net.linear.bias, val=0)  也可以直接修改biasdata:net[0].bias.data.fill_(0)  
    4. #损失函数和优化方法  
    5. loss = torch.nn.BCELoss()  
    6. optimizer = optim.SGD(net.parameters(), lr=0.03) #梯度下降的学习率指定为0.03  

    7)开始训练并输出每轮最后一批次训练集的平均损失

    1. #开始训练并计算每轮损失  
    2. num_epochs = 20  
    3. for epoch in range(1, num_epochs + 1):  
    4.     for X, Y in data_iter:  
    5.         output = net(X)  
    6.         l = loss(output, Y.view(-1, 1))  
    7.         optimizer.zero_grad() 梯度清零,等价于net.zero_grad()  
    8.         l.backward()  
    9.         optimizer.step()  
    10.     print('epoch %d, loss: %f' % (epoch, l.item()))#仅最后一批训练集的损失的均值  
    11. 训练集上的正确率  
    12.     allTrain = 0  
    13.     rightTrain = 0  
    14.     for train_x, train_y in data_iter:  
    15.         allTrain += len(train_y)  
    16.         train_out = net(train_x)  
    17.         mask = train_out.ge(0.5).float()  
    18.         correct = (mask.view(-1, 1) == train_y.view(-1, 1)).sum()  
    19.         rightTrain += correct.float().sum()  
    20.     print('train accuracy: %f' % (rightTrain/allTrain))
  • 相关阅读:
    Linux 串口应用编程
    python-0004-django站点
    借助 ZooKeeper 生成唯一 UUID
    如何在生产环境中安装jdk+监控关键字错误日志脚本
    一本通1075;药房管理
    CSS样式
    人工神经网络技术及应用,人工神经网络的优势
    泽众TestOne自动化测试平台,挡板测试(Mock测试)上线了!!
    【博客552】git auto-merge原理以及auto-merge的不同模式
    iOS——【自动引用计数】ARC规则及实现
  • 原文地址:https://blog.csdn.net/ccyyll1/article/details/126020626