Pytorch中怎么实现softmax回归
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关Pytorch中怎么实现softmax回归,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如果采用自定义方式搭建
千家信息网最后更新 2026年10月31日Pytorch中怎么实现softmax回归
本篇文章给大家分享的是有关Pytorch中怎么实现softmax回归,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
如果采用自定义方式搭建网络方式:
import torchimport torchvisionimport torchvision.transforms as transformsimport matplotlib.pyplot as pltimport timeimport sysimport numpy as npimport requests#设置训练集和测试集,下载在本地mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor())mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=False, download=True, transform=transforms.ToTensor())batch_size = 256if sys.platform.startswith('win'): num_workers = 0 # 0表示不用额外的进程来加速读取数据else: num_workers = 4train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=num_workers)test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False, num_workers=num_workers)num_inputs=784#图片为1*28*28,单通道,所以输入为28*28=784num_outputs=10#最终的类别为10个类别,所以输出是10;w=torch.tensor(np.random.normal(0,0.01,(num_inputs,num_outputs)),dtype=torch.float)b=torch.zeros(num_outputs,dtype=torch.float)#使得w,b可以反向传播w.requires_grad_(requires_grad=True)b.requires_grad_(requires_grad=True)def cross_entropy(y_hat, y): return - torch.log(y_hat.gather(1, y.view(-1, 1)))def accuracy(y_hat,y): return (y_hat.argmax(dim=1)==y).float().mean().item()'''这里注意下正确率计算的写法;对于y_hat,返回的是batch_size*10的一个矩阵,argemax(dim=1)为选择一个维度上的最大数的索引;所以y_hat.argmax(dim=1)返回一个batch_size*1的向量;针对于返回的向量和y进行诸位比较,平均化取值,即可得到该批次的正确率'''def sgd(params, lr, batch_size): # 本函数已保存在d2lzh_pytorch包中方便以后使用 for param in params: param.data -= lr * param.grad / batch_size # 注意这里更改param时用的param.datadef evalute_accuracy(data_iter,net): acc_sum,n=0.0,0 for X,y in data_iter: acc_sum+=(net(X).argmax(dim=1)==y).float().sum().item() n+=y.shape[0] return acc_sum/nnum_epochs,lr=30,0.1def softmax(X): X_exp = X.exp() partition = X_exp.sum(dim=1, keepdim=True) return X_exp / partition # 这里应用了广播机制def net(X): return softmax(torch.mm(X.view((-1, num_inputs)), w) + b)def train(net,train_iter,test_iter,loss,num_epochs,batch_size,params=None,lr=None,optimizer=None): for epoch in range(num_epochs): train_l_sum,train_acc_sum,n=0.0,0.0,0 for X,y in train_iter: y_hat=net(X) l=loss(y_hat,y).sum() if optimizer is not None: optimizer.zero_grad() elif params is not None and params[0].grad is not None: for param in params: param.grad.data.zero_() l.backward() if optimizer is None: sgd(params, lr, batch_size) else: optimizer.step() # "softmax回归的简洁实现"一节将用到 train_l_sum+=l.item() train_acc_sum+=(y_hat.argmax(dim=1)==y).sum().item() n+=y.shape[0] test_acc=evalute_accuracy(test_iter,net); print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f' % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))if __name__ == '__main__': print(mnist_train) X, y = [], [] ''' for i in range(10): X.append(mnist_train[i][0]) y.append(mnist_train[i][1]) show_fashion_mnist(X, get_fashion_mnist_labels(y)) ''' train(net, train_iter, test_iter, cross_entropy, num_epochs, batch_size, [w, b], lr)如果采用典型的层数搭建函数,能有更加简洁的实现版本:
import torchimport torchvisionimport torchvision.transforms as transformsfrom torch import nnfrom collections import OrderedDictimport matplotlib.pyplot as pltimport timeimport sysimport numpy as npimport requests#设置训练集和测试集,下载在本地from torch.nn import initmnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor())mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=False, download=True, transform=transforms.ToTensor())batch_size = 256train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True)test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False)num_inputs=784#图片为1*28*28,单通道,所以输入为28*28=784num_outputs=10#最终的类别为10个类别,所以输出是10;class LinearNet(nn.Module): def __init__(self,num_inputs,num_outputs): super(LinearNet,self).__init__() self.linear=nn.Linear(num_inputs,num_outputs) def forward(self,x): y=self.linear(x.view(x.shape[0],-1)) return ydef evalute_accuracy(data_iter,net): acc_sum,n=0.0,0 for X,y in data_iter: acc_sum+=(net(X).argmax(dim=1)==y).float().sum().item() n+=y.shape[0] return acc_sum/nclass FlattenLayer(nn.Module): def __init__(self): super(FlattenLayer, self).__init__() def forward(self,x): return x.view(x.shape[0],-1) #把1*28*28转化为1*784net=LinearNet(num_inputs,num_outputs)#使用orderdict来进行网络结构搭建#第一层flatten层把1*28*28转化为1*784#第二层为实际工作层net=nn.Sequential( OrderedDict( [ ('flatten',FlattenLayer()), ('linear',nn.Linear(num_inputs,num_outputs)) ] ))init.normal_(net.linear.weight, mean=0, std=0.01)init.constant_(net.linear.bias, val=0)loss=nn.CrossEntropyLoss()optimizer=torch.optim.SGD(net.parameters(),lr=0.1)num_epochs=10def train(net,train_iter,test_iter,loss,num_epochs,batch_size,params=None,lr=None,optimizer=None): for epoch in range(num_epochs): train_l_sum,train_acc_sum,n=0.0,0.0,0 for X,y in train_iter: y_hat=net(X) l=loss(y_hat,y).sum() if optimizer is not None: optimizer.zero_grad() elif params is not None and params[0].grad is not None: for param in params: param.grad.data.zero_() l.backward() optimizer.step() # "softmax回归的简洁实现"一节将用到 train_l_sum+=l.item() train_acc_sum+=(y_hat.argmax(dim=1)==y).sum().item() n+=y.shape[0] test_acc=evalute_accuracy(test_iter,net); print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f' % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))if __name__ == '__main__': print(mnist_train) X, y = [], [] ''' for i in range(10): X.append(mnist_train[i][0]) y.append(mnist_train[i][1]) show_fashion_mnist(X, get_fashion_mnist_labels(y)) ''' train(net, train_iter, test_iter, loss, num_epochs, batch_size,None,None,optimizer)以上就是Pytorch中怎么实现softmax回归,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
类别
简洁
函数
向量
图片
方式
更多
正确率
知识
篇文章
网络
单通道
工作
测试
训练
输入
输出
实用
网络结构
不用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小米移动互联网科技园
苏州找大状互联网科技有限公司
高科技互联网
互联网科技的发展
互联网金融 科技金融
未来的互联网科技
壹账通互联网科技
火传媒上海互联网科技
成都狮子座互联网科技
深圳互联网科技怎么样
华中科技有哪些互联网大佬
开启互联网科技时代小说
湖南一路畅行互联网科技
呼和浩特新华互联网科技学院
互联网科技研发水平
四川慕妮娅互联网科技有限公司
领航科技大厦互联网公司
唯美互联网科技
互联网科技的前景
华人运通互联网科技公司
互联网公司 科技公司
北京互联网科技
亿策互联网科技
成都仁贤领冠互联网科技有限公司
佩信高科技互联网
恒生科技互联网指数分析
华脉科技工业互联网产品
美国五大互联网科技公司市值多少
华人运通互联网科技公司
利用互联网等科技手段