zoukankan      html  css  js  c++  java
  • pytorch入门与实践-2.2

    Tensor

    1--本质上可以理解为具有不同维度的数组

    2--支持的基本运算

    |---创建Tensor:  x=t.tensor(x,y) x,y 表示数组的大小 , x=t.rand(x,y), x=t.ones(x,y)

    |---获取Tensor的大小 x.size() 

    |---加法运算

    |----普通加法(返回新的变量) 

      x=t.tensor(a,b),y=t.tensor(a,b),

      x+y

      t.add(x,y)

      x.add(y)

      r=t.tensor(a,b), t.add(x,y,out=r)

    |----改变运算对象的加法

      y.add_(x)   y的内容被改变了

    3--与numpy的关系

      本质上就是共享一个内存的对象的,可以快速转化

    |----tensor->numpy

      x=t.tensor(a,b),y=x.numpy()

    |----numpy->tensor

      x=np.ones(a,b),y=t.from_numpy(x)

    4--与cuda的tensor的关系可以通过  x.cuda()转化 

    Variable 

    1--在当实验过程中没有发现和Tensor的区别?

    2--Variable与Tensor的关系

    |----  Variable={ data(Tensor),grad,grad_fn }

    Net

    1--PyTorch中网络是以继承的方式实现

    |----继承nn.Model 然后实现 init 和 forward, 需要训练的层放在init中(如CONV),不需要训练的放在 forward中定义即可,定义顺序不一定

    |----定义时没有定义输入的图像大小? pool层的参数?输入时只接受batch输入,要在前加一个batch维度?

    2--损失函数

    |----损失函数定义在nn模块下,创建一个对象criterion =nn.MSELoss(), 使用该对象

    3--优化器

    |----怎么理解优化器:定义了损失函数,反向传播了梯度,但是如何利用梯度去改变参数就是优化器的作用

    |----优化器的参数:优化的参数,学习率。 可以说学习率是梯度的比重,对训练速度有影响,一般取0.1

    |----使用流程:各种优化器定义在nn.optim中,声明(net.parameters, lr)-> 计算loss -> loos反向传递 -> 优化器.step()

    小总: pytorch 数据结构上的抽象是:  tensor -> variable -> net 三个层次, 基本上利用 variable 和 net 这个层次就能够很方便的实现网络了

      

  • 相关阅读:
    Python基础知识随手记
    Java异常笔记整理
    LDAP笔记
    IntelliJ IDEA14导入项目
    字符编码
    认识显示器接口..
    4GB的内存条在32位系统中只能显示为3GB左右的原因(转)
    Velocity截取字符串.
    veloeclipse插件安装
    Velocity使用
  • 原文地址:https://www.cnblogs.com/CXianRen/p/10434905.html
Copyright © 2011-2022 走看看