本次分类问题使用的数据集是MNIST,每个图像的大小为\(28*28\)。

编写代码的步骤如下

  1. 载入数据集,分别为训练集和测试集
  2. 让数据集可以迭代
  3. 定义模型,定义损失函数,训练模型
代码
import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision.datasets as dsets
from torch.autograd import Variable '''下载训练集和测试集'''
train_dataset = dsets.MNIST(root='./datasets',
train=True,
transform=transforms.ToTensor(),
download=True) test_dataset = dsets.MNIST(root='./datasets',
train=False,
transform=transforms.ToTensor()) '''让数据集可以迭代'''
batch_size = 100
n_iters = 3000
num_epochs = n_iters / (len(train_dataset) / batch_size)
num_epochs = int(num_epochs) train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=batch_size,
shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
batch_size=batch_size,
shuffle=False) '''定义模型'''
class LogisticRegressionModel(nn.Module):
def __init__(self, input_dim, output_dim):
super(LogisticRegressionModel, self).__init__()
self.linear = nn.Linear(input_dim, output_dim) def forward(self, x):
out = self.linear(x)
return out '''实例化模型'''
input_dim = 28*28
output_dim = 10 model = LogisticRegressionModel(input_dim, output_dim) '''定义损失计算方式'''
criterion = nn.CrossEntropyLoss() learning_rate = 0.001 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) '''训练次数'''
iter = 0
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader): images = Variable(images.view(-1, 28*28))
labels = Variable(labels) #梯度置零
optimizer.zero_grad() #计算输出
outputs = model(images) #计算损失,内部会自动softmax然后进行Crossentropy
loss = criterion(outputs, labels) #反向传播
loss.backward() #更新参数
optimizer.step() iter += 1 if iter % 500 == 0:
#计算准确度
correct = 0
total = 0
for images, labels in test_loader:
images = Variable(images.view(-1, 28*28)) #获得输出,输出的大小为(batch_size,10)
outputs = model(images) #获得预测值,输出的大小为(batch_size,1)
_, predicted = torch.max(outputs.data, 1) #labels的size是(100,)
total += labels.size(0) #返回的是预测值和标签值相等的个数
correct += (predicted == labels).sum() accuracy = 100 * correct / total # Print Loss
print('Iteration: {}. Loss: {}. Accuracy: {}'.format(iter, loss.data[0], accuracy))
输出如下

用Pytorch训练MNIST分类模型的更多相关文章

  1. 一套兼容win和Linux的PyTorch训练MNIST的算法代码(CNN)

    第一次,调了很久.它本来已经很OK了,同时适用CPU和GPU,且可正常运行的. 为了用于性能测试,主要改了三点: 一,每一批次显示处理时间. 二,本地加载测试数据. 三,兼容LINUX和WIN 本地加 ...

  2. TensorFlow(十八):从零开始训练图片分类模型

    (一):进入GitHub下载模型-->下载地址 因为我们需要slim模块,所以将包中的slim文件夹复制出来使用. (1):在slim中新建images文件夹存放图片集 (2):新建model文 ...

  3. Windows下mnist数据集caffemodel分类模型训练及测试

    1. MNIST数据集介绍 MNIST是一个手写数字数据库,样本收集的是美国中学生手写样本,比较符合实际情况,大体上样本是这样的: MNIST数据库有以下特性: 包含了60000个训练样本集和1000 ...

  4. TensorFlow(十七):训练自己的图片分类模型

    (一)下载inception-v3--见TensorFlow(十四) (二)准备训练用的图片集,因为我没有图片集,所以写了个自动抓取百度图片的脚本-见抓取百度图片 (三)创建retrain.py文件, ...

  5. 使用PyTorch建立你的第一个文本分类模型

    概述 学习如何使用PyTorch执行文本分类 理解解决文本分类时所涉及的要点 学习使用包填充(Pack Padding)特性 介绍 我总是使用最先进的架构来在一些比赛提交模型结果.得益于PyTorch ...

  6. 奉献pytorch 搭建 CNN 卷积神经网络训练图像识别的模型,配合numpy 和matplotlib 一起使用调用 cuda GPU进行加速训练

    1.Torch构建简单的模型 # coding:utf-8 import torch class Net(torch.nn.Module): def __init__(self,img_rgb=3,i ...

  7. 搭建简单模型训练MNIST数据集

    # -*- coding = utf-8 -*- # @Time : 2021/3/16 # @Author : pistachio # @File : test1.py # @Software : ...

  8. 《动手学深度学习》系列笔记—— 1.2 Softmax回归与分类模型

    目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...

  9. softmax和分类模型

    softmax和分类模型 内容包含: softmax回归的基本概念 如何获取Fashion-MNIST数据集和读取数据 softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集 ...

随机推荐

  1. Android为TV端助力 关于4.0之后不能直接获取SD卡外部存储路径的问题

    Environment.getExternalStorageDirectory()是Android 2.x时代的产物,那时Android主流设备只有很小的内置存储器,然后都会外置一张sd卡,那时这个方 ...

  2. Linux中Apache服务器的简单配置

    配置Apache服务器: 1.安装Apache,可以参考Linux 中yum的配置来安装: yum install http* -y 2.修改SELinux: setenforce 0 查看: 3.防 ...

  3. iOS中图片拉伸,类似Android中的点9图片

    UIImage* img=[UIImage imageNamed:@"name.png"];//原图 UIEdgeInsets edge=UIEdgeInsetsMake(, , ...

  4. python--多继承

    多继承 子类可以拥有多个父类,继承所有父类的属性和方法 class 子类名(父类名1,父类名2): 多个父类直接不要有重名的方法和属性,子类对象调用,没法确认.

  5. windows下查看端口被占用及处理

    一.通过命令行查找端口被谁占用 1.window+R组合键,调出命令窗口 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口 3.查看被占用端口对应的PID,输入 ...

  6. Angular的项目结构

    前面我们已经在我们想要的位置顺利的创建了Angular项目,现在我们就来看一下项目的结构吧. 下面使我们项目的整体结构,包括node的模板.src资源文件以及配置文件等. 下面是根目录文件夹内的文件用 ...

  7. 解决ajax get post方式提交中文参数乱码问题

    最近在工作中遇到,使用ajax get方式提交中文参数的时候出现乱码,通过上网搜索,总结出比较简单的两种解决方案: 第一种,由于tomcat默认的字符集是ISO-8859-1,修改Tomcat中的se ...

  8. HBase工具:如何查看HBase的HFile

    root@root:~/Desktop/sourceCodes/hbase-2.1.1/bin# ./hbase Usage: hbase [<options>] <command& ...

  9. 安装Gradle(Windows & Linux)

    Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具.在github上,gradle项目很多,有的是gradel跟maven构建一块儿使用 ...

  10. leetcode 5 查找最长的回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...