1、Tensor
https://pytorch.org/docs/stable/tensors.html
Tensor其实就是一个高维度的矩阵或是
type:
shape:
how to construct a tensor?
Operators:
2、Numpy
https://github.com/wkentaro/pytorch-for-numpy-users
NVIDIA CUDA是显卡里边的一个功能,他可以支援你在显卡上去做一些运算;gpu的cuda就像cpu的核心数一样;(GPU的cuda和CPU的核心数一样,越多的话就能同时计算的数量越多)
因为矩阵运算都可以拆成很多个小的运算,可以同时...,因为很多运算是互相独立的,互相独立的运算他不互相干扰,那GPU里边有很多个小核心,每个小核心都可以算其中一个小运算,全部加在一起他就可以达到平行处理,速度就会变得比较快;
How to calculate gradient?
1、先产生一个tensor;
2、计算z;
3、backward就是帮你计算gradient的步骤;
4、显示计算出来的微分;
Train一个neural network的步骤:
1、读data;
1.1、读数据的第一步要先创建一个dataset;
先从Pytorch这个Dataset里边产生一个class,产生这个class你要自己去定义一些东西,比如说读data,去做一些预处理;一次取得一个data,指定一个index就把对应的data把它输出出来,回传给dataloader,下面dataloader是会用到__getitem__这个函数的;还要回传出来你的dataset有多大;
刚才产生的dataset就把他传到dataloader里边,
查看参数:
激活函数:
损失函数:
怎么产生自己定义的neural network呢?
更新:
有了前边的data和要件(设计好的network)就可以做training了;training之前要先读data,设好dataloader,产生你的model,放到device上面,比如说丢到cuda上面就是丢到GPU上边跑,之后设计loss function,最后要把你的model参数丢进一个optimizer里边,然后去gradient decent优化;
training的方式可以1写一个for循环,在for循环外边定义跑几次;2要把model设计为train,train的话才会去更新参数;3从刚才设好的dataloader里边每次提取出一组数据,比如x和y;4之后把optimizer里边存的gradient全部设置为0,因为如果有以前的gradient在里边的话就会影响现在的更新,5再把移到device上边去,6计算model的output(predication),7计算loss,8计算gradient(指示计算并未更新)9step就是使用计算出来的gradient去更新你的model的参数。
validation:
可能你的model计算完一个epoch之后呢就要去做validation,1要把model设成eval这样才不会做training,2,3,从dataloader里边每次取出一个数据,4移到device上面,5我们不希望在validation或者testing的时候去计算gradient,所以加一行with torch.no_gradient,不计算gradient的话速度会非常的快,6model去计算他的output,7计算loss,8累积loss并计算平均Loss;这些loss就会去决定你要不要把你现在的model存下来,那就看你的model有没有进步,
Testing:
testing的话是没有正确答案的,1先设成eval,然后每次读一笔data进来,然后去做预测,最后collect收集起来,
Save/Load:
当你train完一个neural network,要把它存起来,torch.save;如果想把它再载上来呢就torch.load