您好,登录后才能下订单哦!
本文小编为大家详细介绍“Pytorch如何实现逻辑回归分类”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch如何实现逻辑回归分类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
步骤:
1.获得数据
2.建立逻辑回归模型
3.定义损失函数
4.计算损失函数
5.求解梯度
6.梯度更新
7.预测测试集
import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from torch.autograd import Variable import torchvision.datasets as dataset import torchvision.transforms as transforms from torch.utils.data import DataLoader input_size = 784 # 输入到逻辑回归模型中的输入大小 num_classes = 10 # 分类的类别个数 num_epochs = 10 # 迭代次数 batch_size = 50 # 批量训练个数 learning_rate = 0.01 # 学习率 # 下载训练数据和测试数据 train_dataset = dataset.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = dataset.MNIST(root='./data',train=False, transform=transforms.ToTensor) # 使用DataLoader形成批处理文件 train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # 创建逻辑回归类模型 (sigmoid(wx+b)) class LogisticRegression(nn.Module): def __init__(self,input_size,num_classes): super(LogisticRegression,self).__init__() self.linear = nn.Linear(input_size,num_classes) self.sigmoid = nn.Sigmoid() def forward(self, x): out = self.linear(x) out = self.sigmoid(out) return out # 设定模型参数 model = LogisticRegression(input_size, num_classes) # 定义损失函数,分类任务,使用交叉熵 criterion = nn.CrossEntropyLoss() # 优化算法,随机梯度下降,lr为学习率,获得模型需要更新的参数值 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # 使用训练数据训练模型 for epoch in range(num_epochs): # 批量数据进行模型训练 for i, (images, labels) in enumerate(train_loader): # 需要将数据转换为张量Variable images = Variable(images.view(-1, 28*28)) labels = Variable(labels) # 梯度更新前需要进行梯度清零 optimizer.zero_grad() # 获得模型的训练数据结果 outputs = model(images) # 计算损失函数用于计算梯度 loss = criterion(outputs, labels) # 计算梯度 loss.backward() # 进行梯度更新 optimizer.step() # 每隔一段时间输出一个训练结果 if (i+1) % 100 == 0: print('Epoch:[%d %d], Step:[%d/%d], Loss: %.4f' % (epoch+1,num_epochs,i+1,len(train_dataset)//batch_size,loss.item())) # 训练好的模型预测测试数据集 correct = 0 total = 0 for images, labels in test_loader: images = Variable(images.view(-1, 28*28)) # 形式为(batch_size,28*28) outputs = model(images) _,predicts = torch.max(outputs.data,1) # _输出的是最大概率的值,predicts输出的是最大概率值所在位置,max()函数中的1表示维度,意思是计算某一行的最大值 total += labels.size(0) correct += (predicts==labels).sum() print('Accuracy of the model on the 10000 test images: %d %%' % (100 * correct / total))
1.在代码中下载训练数据和测试数据的时候,两段代码是有区别的:
train_dataset = dataset.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = dataset.MNIST(root='./data',train=False, transform=transforms.ToTensor)
第一段代码中多了一个download=True,这个的作用是,如果为True,则从Internet下载数据集并将其存放在根目录中。如果数据已经下载,则不会再次下载。
在第二段代码中没有加download=True,加了的话在使用测试数据进行预测的时候会报错。
代码中transform=transforms.ToTensor()的作用是将PIL图像转换为Tensor,同时已经进行归一化处理。
2.代码中设置损失函数:
criterion = nn.CrossEntropyLoss() loss = criterion(outputs, labels)
一开始的时候直接使用:
loss = nn.CrossEntropyLoss() loss = loss(outputs, labels)
这样也会报错,因此需要将loss改为criterion。
读到这里,这篇“Pytorch如何实现逻辑回归分类”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。