线性回归从0开始实现
Pytorch中的基本数据类型就是各式各样的张量,张量可以理解为多维矩阵。Pytorch中定义了一个Tensor类来实现张量,Tensor在使用上与numpy的ndarray类似,不同的是,Tensor可以在GPU上运行,但是numpy只能在CPU上运行,当然numpy与Tensor可以进行相互转换,以此使得numpy数据在GPU上运行。Pytorch中的Tensor又包括CPU上的数据类型和GPU上的数据类型,两种数据类型之间也可以进行相互转换
requires_grad是Pytorch中通用数据结构Tensor的一个属性,用于说明当前量是否需要在计算中保留对应的梯度信息
torch.rand和torch.randn有什么区别
一个均匀分布,一个是标准正态分布。
np.random.normal()的意思是一个正态分布numpy.random.normal(loc=0,scale=1e-2,size=shape) ,意义如下:
生成数据集
features = torch.randn(num_examples, num_inputs)
print(features[:, 0])
注意这输出的不是二维数组([[1],[2]])这种,输出的是一维数组([1,2,3])这种
噪声代表了数据集中无意义的干扰:
随机噪声项来生成标签,其中噪声项服从均值为0、标准差为0.01的正态分布
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()),
dtype=torch.float32)
random.shuffle()
用于将一个列表中的元素打乱
a =[10,20,30,40,50,60]
random.shuffle(a)
print(a)
torch.index_select
torch.index_select(features,0, j)
等价于
features.index_select(0,j)
第一个参数是索引的对象,第二个参数0表示按行索引,1表示按列进行索引,第三个参数是一个tensor,就是索引的序号,比如b里面tensor[0, 2]表示第0行和第2行,c里面tensor[1, 3]表示第1列和第3列。
自动求梯度
Tensor是这个包的核心类,如果将其属性.requires_grad设置为True,它将开始追踪(track)在其上的所有操作。完成计算后,可以调用.backward()来完成所有梯度计算。此Tensor的梯度将累积到.grad属性中。
w.requires_grad_(requires_grad=True)
b.requires_grad_(requires_grad=True)
torc