pytorch深度学习预备知识
虽然它被称为PyTorch,但是代码中使⽤torch⽽不是pytorch
张量(tensor)表⽰⼀个由数值组成的数组,这个数组可能有多个维度
张量的阶数有时也称维度,或者轴axis
多维的理解:
x = torch.arange(12) //生成0-12 不包含12
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
X = x.reshape(3, 4) //重新构造x
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
//我们可以通过-1来调⽤此⾃动计算出维度的功能x.reshape(-1, 4),
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # **运算符是求幂运算
重要:也可以把多个张量连结(concatenate)在⼀起,把它们端对端地叠起来形成⼀个更⼤的张量。我们只需要提供张量列表,并给出沿哪个轴连结。
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
(tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 2., 1., 4., 3.], //此处开始连接 dim = 0
[ 1., 2., 3., 4.],
[ 4., 3., 2., 1.]]),
tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
[ 4., 5., 6., 7., 1., 2., 3., 4.],
[ 8., 9., 10., 11., 4., 3., 2., 1.]]))
//dim = 0,列不变,dim = 1,行不变
在某些情况下,即使形状不同,
我们仍然可以通过调⽤ ⼴播机制(broadcasting mechanism)来执⾏按元素操作。
(tensor([[0],
[1],
[2]]),
tensor([[0, 1]]))
//将两个矩阵⼴播为⼀个更⼤的3 × 2矩阵,矩阵a将复制列,矩阵b将复制⾏
(tensor([[0, 0]
[1, 1]
[2, 2]]),
tensor([[0, 1],
[0, 1],
[0, 1]]))
//相加后
tensor([[0, 1],
[1, 2],
[2, 3]])
与任何Python数组⼀样:第⼀个元素的索引是0,最后⼀个元素索引是-1;
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
//如下所⽰,我们可以⽤[-1]选择最后⼀个元素,可以⽤[1:3]选择第⼆个和第三个元素:
X[-1], X[1:3]
tensor([ 8., 9., 10., 11.]),
tensor([[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
//除读取外,我们还可以通过指定索引来将元素写⼊矩阵
X[1, 2] = 9 //改变1行 2列元素为9 (1,2)以(0,0)开始
python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析
一维数组:
在一个二维的tensor中我们举一反三,[0:2, :]访问
第1⾏和第2⾏,其中“:”代表沿轴1(列)的所有元素。
X[0:2, :] = 12 //其中0:2还是第一行和第二行 ,后的:表示的所有列
tensor([[12., 12., 12., 12.],
[12., 12., 12., 12.],
[ 8., 9., 10., 11.]])
⽤Y = X + Y,会导致指向新分配的内存处的张量
before = id(Y)
Y = Y + X
id(Y) == before
False //赋值后的Y不在原来的内存了。。。。
before = id(X)
X += Y
id(X) == before
True //使⽤X[:] = X + Y或X += Y来减少操作的内存开销
最大的区别就是Numpy会把ndarray放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算。
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
(numpy.ndarray, torch.Tensor)
感谢:
[1]python中x[:],x[:-1],x[:,]x[:,-1]等操作含义解析https://blog.csdn.net/qq_34621022/article/details/103558098
[2]深度学习numpy与tensor基础知识、关系与区别,通过pytorch构建网络加载数据
https://blog.csdn.net/wty98wzq/article/details/112717379