这是pytorch官方的一个例子

官方教程地址:http://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar10-tutorial-py

代码如下

 # coding=utf-8
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import torch
import torchvision
import torchvision.transforms as transforms
import torch.optim as optim # The output of torchvision datasets are PILImage images of range [0, 1].
# We transform them to Tensors of normalized range [-1, 1]
transform = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
]) # 训练集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(50000张图片作为训练数据)加载到内存中,若download为True时,会自动从网上下载数据并解压
trainset = torchvision.datasets.CIFAR10(root=r'E:\Face Recognition\cifar-10-python', train=True, download=False, transform=transform) # 将训练集的50000张图片划分成12500份,每份4张图,用于mini-batch输入。shffule=True在表示不同批次的数据遍历时,打乱顺序。num_workers=2表示使用两个子进程来加载数据
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True) # 测试集,将相对目录./data下的cifar-10-batches-py文件夹中的全部数据(10000张图片作为测试数据)加载到内存中,若download为True时,会自动从网上下载数据并解压
testset = torchvision.datasets.CIFAR10(root=r'E:\Face Recognition\cifar-10-python', train=False, download=False, transform=transform) # 将测试集的10000张图片划分成2500份,每份4张图,用于mini-batch输入。
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False)
classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck') class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5) # 定义conv1函数的是图像卷积函数:输入为图像(3个频道,即彩色图),输出为6张特征图, 卷积核为5x5正方形
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10) def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x net = Net() criterion = nn.CrossEntropyLoss() # 叉熵损失函数
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # 使用SGD(随机梯度下降)优化,学习率为0.001,动量为0.9 for epoch in range(10): # 遍历数据集两次 running_loss = 0.0
# enumerate(sequence, [start=0]),i序号,data是数据
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data # data的结构是:[4x3x32x32的张量,长度4的张量] # wrap them in Variable
inputs, labels = Variable(inputs), Variable(labels) # 把input数据从tensor转为variable # zero the parameter gradients
optimizer.zero_grad() # 将参数的grad值初始化为0 # forward + backward + optimize
outputs = net(inputs)
loss = criterion(outputs, labels) # 将output和labels使用叉熵计算损失
loss.backward() # 反向传播
optimizer.step() # 用SGD更新参数 # 每2000批数据打印一次平均loss值
running_loss += loss.data[0] # loss本身为Variable类型,所以要使用data获取其Tensor,因为其为标量,所以取0
if i % 2000 == 1999: # 每2000批打印一次
print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))
running_loss = 0.0 print('Finished Training') correct = 0
total = 0
for data in testloader:
images, labels = data
outputs = net(Variable(images))
# print outputs.data
_, predicted = torch.max(outputs.data, 1) # outputs.data是一个4x10张量,将每一行的最大的那一列的值和序号各自组成一个一维张量返回,第一个是值的张量,第二个是序号的张量。
total += labels.size(0)
correct += (predicted == labels).sum() # 两个一维张量逐行对比,相同的行记为1,不同的行记为0,再利用sum(),求总和,得到相同的个数。 print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

1.由于windows平台的pytorch存在很多问题,例如多线程无法正常工作,所以DataLoader中的num_worker得去掉

2.代码以cifar-10数据测试集为例,但是训练的效果并不是很理想,loss函数数据如下,两次重复训练后的准确率为56%,10次重复训练后的准确率为61%,(个人表示原图片像素太差,至少一半,我都分不清是啥,真是为难了神经网络了)

[1,  2000] loss: 2.219
[1, 4000] loss: 1.869
[1, 6000] loss: 1.669
[1, 8000] loss: 1.581
[1, 10000] loss: 1.537
[1, 12000] loss: 1.488
[2, 2000] loss: 1.406
[2, 4000] loss: 1.385
[2, 6000] loss: 1.343
[2, 8000] loss: 1.318
[2, 10000] loss: 1.348
[2, 12000] loss: 1.305
[3, 2000] loss: 1.234
[3, 4000] loss: 1.206
[3, 6000] loss: 1.219
[3, 8000] loss: 1.213
[3, 10000] loss: 1.205
[3, 12000] loss: 1.199
[4, 2000] loss: 1.115
[4, 4000] loss: 1.127
[4, 6000] loss: 1.123
[4, 8000] loss: 1.118
[4, 10000] loss: 1.143
[4, 12000] loss: 1.106
[5, 2000] loss: 1.023
[5, 4000] loss: 1.022
[5, 6000] loss: 1.073
[5, 8000] loss: 1.076
[5, 10000] loss: 1.060
[5, 12000] loss: 1.048
[6, 2000] loss: 0.965
[6, 4000] loss: 0.985
[6, 6000] loss: 0.988
[6, 8000] loss: 1.008
[6, 10000] loss: 1.017
[6, 12000] loss: 0.999
[7, 2000] loss: 0.902
[7, 4000] loss: 0.925
[7, 6000] loss: 0.974
[7, 8000] loss: 0.955
[7, 10000] loss: 0.968
[7, 12000] loss: 0.979
[8, 2000] loss: 0.866
[8, 4000] loss: 0.893
[8, 6000] loss: 0.909
[8, 8000] loss: 0.932
[8, 10000] loss: 0.934
[8, 12000] loss: 0.937
[9, 2000] loss: 0.837
[9, 4000] loss: 0.858
[9, 6000] loss: 0.865
[9, 8000] loss: 0.873
[9, 10000] loss: 0.906
[9, 12000] loss: 0.907
[10, 2000] loss: 0.809
[10, 4000] loss: 0.810
[10, 6000] loss: 0.832
[10, 8000] loss: 0.865
[10, 10000] loss: 0.878
[10, 12000] loss: 0.877

深度学习(pytorch)-1.基于简单神经网络的图片自动分类的更多相关文章

  1. 深度学习与CV教程(4) | 神经网络与反向传播

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  2. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

  3. 深度学习与CV教程(6) | 神经网络训练技巧 (上)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  4. 深度学习实战篇-基于RNN的中文分词探索

    深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...

  5. 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码

    入门神经网络深度学习,推荐学习<深度学习入门:基于Python的理论与实现>,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白.理解神经网络,很容易就 ...

  6. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  7. [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

    [深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...

  8. [深度学习] Pytorch学习(一)—— torch tensor

    [深度学习] Pytorch学习(一)-- torch tensor 学习笔记 . 记录 分享 . 学习的代码环境:python3.6 torch1.3 vscode+jupyter扩展 #%% im ...

  9. 深度学习笔记之基于R-CNN的物体检测

    不多说,直接上干货! 基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一.相关理论 本 ...

随机推荐

  1. SpringBoot使用日志

    1.日志框架 日志门面 日志实现 JCL.SLF4J.jboss-logging Log4j.JUL.Log4j2.Logback 日志门面:SLF4J 日志实现:Logback SpringBoot ...

  2. Matlab的BP神经网络工具箱及其在函数逼近中的应用

    1.神经网络工具箱概述 Matlab神经网络工具箱几乎包含了现有神经网络的最新成果,神经网络工具箱模型包括感知器.线性网络.BP网络.径向基函数网络.竞争型神经网络.自组织网络和学习向量量化网络.反馈 ...

  3. Weblogic WLS-WebServices组件反序列化漏洞复现

    漏洞分析: 当weblogic使用WLS-WebServices组件时,该组件会调用XMLDecoder解析XML数据,由此就产生了该漏洞 影响版本: weblogic<10.3.6版本 复现过 ...

  4. 跟我一步一步写出MongoDB Web 可视化工具(二)

    前言 上篇讲了一些基础,主要注重的是查,包括建立数据库链接.获取数据库.获取表.列出数据库.列出表.列出索引.获取数据等. 本篇依然是基础,注重增改删,废话不多说,咱们开始. 进阶 创建一个数据库和一 ...

  5. EDB日志配置-慢sql记录分析

    1.打开:/postgresql的安装目录/data/postgresql.conf 2.找到并更改以下属性,其他的是方便观察设置的,注意要将属性前面的注释符'#'去掉才能生效 ★★★log_dest ...

  6. VNPY 软件架构分析

    VNPY 架构设计文档 版本日志: 一. 引言 编写目的: 该软件概要设计说明书是“VNPY”开发中的重要文献资料,所完成的工作是将需求说明书中的数据流图转化成软件结构和数据结构,为后续进行详细设计说 ...

  7. 针对小程序for循环绑定数据,实现toggle切换效果(交流QQ群:604788754)

    如有更好的方法实现,可以留言或加群交流学习.谢谢(交流QQ群:604788754) WXML: <block wx:for="{{datanum}}" wx:for-inde ...

  8. PE格式文件的解析代码

    #include "Global.h" ; //标志,用于表示是否为pe32+文件 ; //标志,用于表示读入的模式,若为0代表是内存读入,不为0,代表是文件打开,此时mode是文 ...

  9. mongodb数据迁移到hbase

    mongodb数据迁移到hbase 导入包 # encoding: utf-8 ''' @author: zcc @license: (C) Copyright 2013-2017, Node Sup ...

  10. mybatis源码解析之Configuration加载(四)

    概述 上一篇文章,我们主要讲了datasource的相关内容,那么<environments>标签下的内容就看的差不多了,今天就来看一下在拿到transationManager和datas ...