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 这个层次就能够很方便的实现网络了

  

原文地址:https://www.cnblogs.com/CXianRen/p/10434905.html