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

本文介绍了如何使用torch.nn模块实现逻辑回归,并详细步骤包括数据预处理、构建DataLoader、创建LogisticNet模型、参数初始化、损失函数和优化方法,以及训练过程中的损失计算和准确率评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值