pytorch 手写数字识别1
创始人
2024-02-23 23:51:02

目录

  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 torchvisionfrom 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_loaderdef 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)) #Tensorplot_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 torchfrom  matplotlib  import pyplot as  pltdef plot_curve(data):#画训练过程的lossfig = 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) → TensorParameters
scatter_(dim, index, src): 将src中所有的值分散到self 中,填法是按照index中所指示的索引来填入。
dim (int) – the axis along which to indexdim=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.0print("\n L ",L)L.backward()print(w.grad)grad()

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

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...