一、张量
3维=时间序列
时间序列数据是截断数据,每个截面是二维张量
eg:脑电波(EEG)信号编码
(time, frequency, channel)
eg:交易所每分钟内最高、最低和最终的股价存入一个2D张量(390,3)。如果我们追踪一周(五天)的交易,我们将得到这么一个3D张量
torch.Tensor 有自动求梯度的功能,且可GPU运算
二、tensor的创建
可以在dtype处指定类型
x = torch.zeros(4, 3, dtype=torch.long)
基于已存在的tensor创建
x = x.new_ones(4, 3, dtype=torch.double)
等价于
x = torch.ones(4, 3, dtype=torch.double)
三、torch的操作
torch.ones(4,3,dtype = torch.double)是一个对象(在内存有不可变的地址)
对象储存:id、value、type
x 是变量,变量储存值:变量的值,是变量到对象的指针
y=x
y和x的指向地址是一样的
x = torch.ones(5,3,dtype = torch.double)
在内存中新创建了一个对象,x指向新对象
y 仍然指向老对象,故y的值不变
x = torch.ones(4,3,dtype = torch.double)
y = x
x = torch.ones(5,3,dtype = torch.double)
print(y)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
语句y = 1+y 和 语句 y+=1 完全不一样
+= 不会创建新对象,+会创建新对象(针对可变类型)
+= 直接改变了y指向的对象
四、自动求导
autograd包为张量上的所有操作提供了自动求导机制
反向传播是根据代码如何运行来决定的。
ps :反向传播就是链式法则求导的时髦名字
torch.Tensor 是这个包的核心类。
如果设置它的属性 .requires_grad 为 True,那么它将会追踪对于该张量的所有操作。
当完成计算后可以通过调用 .backward(),来自动计算所有的梯度。这个张量的所有梯度将会自动累加到.grad属性。
当创建一个张量时,张量的每个数,都是自变量。
张量的操作,就是函数。函数在每个点处,有梯度。梯度下降法,找最优值。
可以张量对张量求导
如果我们想要修改 tensor 的数值,但是又不希望被 autograd 记录(即不会影响反向传播), 那么我么可以对 tensor.data 进行操作。
并行计算
CUDA是我们使用GPU的提供商——NVIDIA提供的GPU并行计算框架。
PyTorch使用 CUDA表示要开始要求我们的模型或者数据开始使用GPU了。
在编写程序中,当我们使用了 cuda() 时,其功能是让我们的模型或者数据迁移到GPU当中,通过GPU开始计算。