pytorch 手写数字识别1

news2024/11/26 10:39:21

目录

  1.       概述
  2.       加载图片
  3.       绘图部分
  4.       backward

前言:

       这里以一个手写数字识别的例子,简单了解一下pytorch 实现神经网络的过程.

本章重点讲一下加载数据过程

参考:

课时9 手写数字识别初体验-1_哔哩哔哩_bilibili

Pytorch中的backward函数 - 知乎


一  概述

    整体流程如下,分为四步

 


二   加载图片

     如下为加载minist 数据集过程

    

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 24 17:17:19 2022

@author: chengxf2
"""
import torchvision

from matplotlib  import pyplot as plt
import torch
import torchvision.transforms as transforms
import torchvision.datasets
from util import plot_curve,plot_image






'''
root : 需要下载地址的根目录位置
train: True  下载训练集trainin.pt  False 下载test.pt
transform: 一系列作用在PIL 图片上的转换操作,返回一个转换版本
dowenload: 是否下载到root 指定的位置
transforms.Compose(): 
      将多个预处理依次累加在一起, 每次执行transform都会依次执行其中包含的多个预处理程序
transforms.ToTensor():
        在做数据归一化之前必须要把PIL Image转成Tensor
transforms.Normalize([0.5], [0.5]):
   归一化,这里的两个0.5分别表示对张量进行归一化的 全局平均值和方差,
   因为图像是灰色的只有一个通道,所以分别指定一了一个值,如果有多个通道,
   需要有多个数字,如3个通道,就应该是Normalize([m1, m2, m3], [n1, n2, n3])
'''
def load_data(batch =512):
    transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0.1307], [0.3018])])
    train_dataset = torchvision.datasets.MNIST('mnist_data', train=True, transform=transform, download=True)
    test_dataset = torchvision.datasets.MNIST('mnist_data/', train=False, transform=transform, download=False)
    
    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size = batch, shuffle=True)
    test_loader = torch.utils.data.DataLoader(test_dataset)
    print("\n --end--",type(train_loader))
    return train_loader, test_loader

def show(data):
    
    #递归所有的元素
    for step, (x,y) in  enumerate(data):
        print("\n step ",step,y.shape) #512
        
    ###单独取一个###   
    x,y = next(iter(train_loader))
    print(x.shape, y.shape)
    print(x.min(), x.max(),type(x)) #Tensor
    plot_image(x,y,'image sample')
if __name__  =="__main__":
    train_loader , test_loader = load_data()
    show(train_loader)

三  绘图部分


​
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 21 17:16:16 2022

@author: chengxf2
"""
import torch

from  matplotlib  import pyplot as  plt

def plot_curve(data):
    
    #画训练过程的loss
    fig = plt.figure()
    N= len(data)
    
    plt.plot(range(N),data, color='green')
    plt.legend(['value'], loc='up right')
    plt.xlabel('step')
    plt.ylabel('value')

    plt.show()


def plot_image(img, label, name):
    #画图片    
    fig = plt.figure()

    for i in range(6):
        
        plt.subplot(2,3,i+1) #t(nrows ncols plot_number)
        plt.tight_layout() #会自动调整子图参数,使之填充整个图像区域
        plt.imshow(img[i][0]*0.3081+0.1307,interpolation ='none')   
        plt.title("{}:{}".format(name, label[i].item()))
        plt.xticks([])
        plt.yticks([])
    plt.show()
        

'''
生成one-hot
Tensor.scatter_(dim, index, src, reduce=None) → Tensor

Parameters
scatter_(dim, index, src): 将src中所有的值分散到self 中,填法是按照index中所指示的索引来填入。
dim (int) – the axis along which to index
            dim=0,按照index行索引的指示来进行散射
            dim=1 ,按照index列索引的指示来进行散射
index (LongTensor) – the indices of elements to scatter, can be either empty or of the same dimensionality as src. When empty, the operation returns self unchanged.
src (Tensor or float) – the source element(s) to scatter. 要填进去的元素
reduce (str, optional) – reduction operation to apply, can be either 'add' or 'multiply'. 用的相对较少。

'''
def one_hot(label, depth=10):
    
     N = label.size(0)
     
     print("\n n:",N)
     
     out = torch.zeros(N, depth)
     idx = torch.LongTensor(label).view(-1,1)
     out.scatter_(dim=1, index=idx, value=1)
     print("\n out ",out)
     return out
 
#label =[1,2,5]
#label = torch.LongTensor(label)
#one_hot(label)

​

四  Pytorch 中的backward 

     Numpy ,pytorch 可以自己实现反向传播算法,也可以使用pytorch给的API,通过动态图自动

求导

 这里面给出3个例子3.1  

3.1 简单的LR 模型

      

   \hat{y}=xw^T

  L=\frac{(\hat{y}-y)^2}{2}

  梯度:

   \frac{\partial L}{\partial w}=(\hat{y}-y)x

Created on Tue Nov 22 14:58:50 2022

@author: chengxf2
"""
import torch
from torch.autograd import Variable


'''
自动求梯度例子1
'''
def grad():
    
    x = torch.tensor([2.0,1.0],requires_grad=True) 
    w = torch.tensor([1.0,2.0],requires_grad=True) 
    
    y = torch.matmul(w, x.T)
    L = (y-1.0)**2/2.0
    
    print("\n L ",L)
    L.backward()
    print(w.grad)
    
grad()

  bias tensor(3., grad_fn=<SubBackward0>)
  tensor([6., 3.])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为了让线上代码可追溯, 我开发了这个vite插件

人生的第一个vite插件 前言 想在控制台输出一下前端代码的一些构建信息&#xff0c; 比如打包时间、打包的人, 代码分支、commit是那个&#xff0c;方便在控制台追溯。 背景 遇到的问题 1、场景一 前端多人协同开发的情况下&#xff0c;比方测试站&#xff0c; 你发的代码…

Java 反射系列 —— 学习笔记

Java 反射系列 1. 类成员 为了更好的描述&#xff0c;我们做个约定个通配符 XXXX&#xff0c; 如果是成员变量就代表 Field&#xff0c;如果是类方法就代表 Method&#xff0c;如果是构造器就代表 Constructor。 1.1 获取方法 那么怎么获取到这三类成员呢&#xff1f; 获…

逆势涨薪3k!新媒体运营毅然转行测试,我的入行秘籍是什么?

不尝试永远都不会成功&#xff0c;勇敢的尝试是成功的一半。 大学毕业做运营&#xff0c;业务难精进&#xff0c;薪资难提升 “你大学专业是商务英语&#xff0c;为什么毕业后会选择做新媒体运营呢&#xff1f;” 其实我当时没有想那么多的&#xff0c;商务英语的就业方向一个…

苹果电容笔值得买吗?2022最新电容笔推荐

如今&#xff0c;许多人都喜欢用IPAD来学习记录&#xff0c;或是安静地作画。很多ipad的用户&#xff0c;都很重视它的实用性&#xff0c;因为他们发现&#xff0c;如果有一款功能不错的电容笔来搭配ipad&#xff0c;那么ipad的实用性就会得到极大的提高。事实上&#xff0c;如…

开发 Chrome 扩展程序的利弊

作为一名软件开发人员,您总是希望从事能够提高您的技术技能并赚钱的项目。有什么比开发现金流 chrome 扩展程序更好的方法呢? 在本文中,我将从软件开发人员的角度概述开发 chrome 扩展程序的一些优点和缺点。 开发 Chrome 扩展程序的好处 Chrome 扩展程序是软件开发人员接…

基于遗传算法与神经网络的测井预测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【序列召回推荐】(task4)多兴趣召回MIND模型

note Hinton在2011年提出的capsule network&#xff0c;通过EM期望值最大化算法&#xff0c;用动态路由代替反向传播进行更新参数&#xff0c;学习不同capsule之间的连接权重&#xff0c;实现比CNN更优秀的空间关系建模效果&#xff08;CNN可能对同一个图像的旋转版本识别错误…

Java笔记(十四)

文献种类&#xff1a;专题技术总结文献 开发工具与关键技术&#xff1a; IntelliJ IDEA、Java 语言 作者&#xff1a; 方建恒 年级&#xff1a; 2020 撰写时间&#xff1a; 2022 年 11 月 28 日 Java笔记(十四) 今天我给大家继续分享一下我的Java笔记&#xff0c; 我们继续来…

终于读完了阿里云p9专家分享云原生Kubernetes全栈架构师实战文档

都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升 Java…

Linux便捷操作

1. Tab 这是你不能没有的 Linux 快捷键。它将节省你 Linux 命令行中的大量时间。 只需要输入一个命令&#xff0c;文件名&#xff0c;目录名甚至是命令选项的开头&#xff0c;并敲击 tab 键。它将自动完成你输入的内容&#xff0c;或为你显示全部可能的结果。 如果你只记一个…

中国住宅设施杂志中国住宅设施杂志社中国住宅设施编辑部2022年第9期目录

景观园林《中国住宅设施》投稿&#xff1a;cnqikantg126.com 市政园林景观工程施工项目管理的基本方法与措施 蒋伟;刘巍;张辉; 1-3 低成本风景园林设计与相关问题分析 魏小静; 4-6 城市文化公园景观设计探究——以临夏河州牡丹文化公园为例 姜丽; 7-9 建筑设计 …

一文读懂:低代码和无代码的演进历程、应用范围

低代码和无代码技术的演进发展 整个软件开发的演进路径大致可以分为四个阶段&#xff1a;第一代程序设计语言&#xff1b;第二代是汇编语言&#xff1b;第三代是现在常见的高级语言&#xff0c;比如 Python、Java 等&#xff1b;第四代就是低代码和无代码技术。低代码、无代码…

Pro_11丨跟踪+目标出场自适应切换

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 大家好&#xff0c;今天我们分享第11期策略——跟踪目标出场自适应切换策略。本期策略是2022年度倒数第2期策略&#xff0c;2023年度松鼠俱乐部内容会更加丰富&#xff0c;12月出预告敬请…

【Vagrant】使用 Vagrant 快速创建多台 centos7 虚拟机

问题场景&#xff1a; 最近在学习数据库的主从复制&#xff0c;因此需要安装两个虚拟机&#xff0c;一个放主数据库&#xff0c;一个放从数据库&#xff08;不会用 Docker ,咱就多搭几个虚拟机吧 &#xff09;&#xff0c;因此记录使用 Vagrant 快速搭建两个 CentOS 7 的教程&a…

Python海龟turtle基础知识大全与画图集合

Turtle图形库 Turtle 库是 Python 内置的图形化模块&#xff0c;属于标准库之一&#xff0c;位于 Python 安装目录的 lib 文件夹下&#xff0c;常用函数有以下几种&#xff1a; 一.Turtle绘图的基础知识 画布是turtle用于绘图区域&#xff0c;我们可以设置它的大小和初始位置。…

使用支持向量机的基于异常的入侵检测系统

使用支持向量机的基于异常的入侵检测系统使用支持向量机的基于异常的入侵检测系统学习目标&#xff1a;学习内容&#xff1a;1.⼀种智能⼊侵检测系统第⼀阶段第⼆阶段&#xff1a;分类总结2.使用支持向量机的基于异常的入侵检测系统1.预处理入侵数据集2.基于信息增益的特征排名…

c++ CJsonObject 读写json

CJsonObject简介 CJsonObject是Bwar基于cJSON全新开发一个C版的JSON库&#xff0c;CJsonObject的最大优势是简单、轻量、跨平台&#xff0c;开发效率极高&#xff0c;尤其对多层嵌套json的读取和生成、修改极为方便。CJsonObject比cJSON简单易用得多&#xff0c;且只要不是有意…

Linux —— 文件操作

目录 1.内核提供的文件系统调用 1.1open和close 1.2write和read 2.文件描述 2.1文件描述符 2.2文件描述符分配规则 3.重定向 3.1最“挫”的重定向 3.2使用系统调用 3.3重定向原理 3.4让我们的"shell"支持重定向操作 4.一切皆文件 1.内核提供的文件系统调用…

什么是杜邦分析?杜邦分析法的公式及示例

什么是杜邦分析? 杜邦分析也称为杜邦恒等式、杜邦方程、杜邦框架、杜邦模型或杜邦方法&#xff0c;是一个多步骤的财务方程式&#xff0c;可以深入了解企业的基本绩效。杜邦模型对影响公司股本回报率 (ROE) 的关键指标进行了全面分析。杜邦分析的另一个术语是杜邦模型。这些名…

做app的测试,你大概率会用到这个命令,尤其是做monkey测试

1.普通命令 1.1 devices命令 语法格式 &#xff1a;adb devices [-l] # 作用 &#xff1a;返回已连接设备的信息 # 示例 &#xff1a;adb devices : 返回设备的信息adb devices -l : 返回设备的详细信息1.2 help命令 语法格式 &#xff1a;adb --help # 作用 &#xff1…