![深度学习实践教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/249/33692249/b_33692249.jpg)
3.2 Tensor的创建
在PyTorch中,创建Tensor的方法有很多,例如:用指定值创建Tensor;创建时仅指定Tensor的形状;依据另外一个Tensor的形状创建Tensor等。
1.用指定值创建Tensor
【例3.1】假设要创建一个32位浮点型的Tensor,其值是矩阵[[1,2],[3,4],[5,6]]。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_46_4.jpg?sign=1739361846-syILGspKYrIXm4Sjyl1Jfx47m5LYw38C-0-2bc24aa4635920cd057c5c24ae226a24)
输入:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_1.jpg?sign=1739361846-LGbaeZfmJUX3XN7bpr2UuuApYEqLCqT1-0-624be0fb4d020430435fadc24d1638f2)
输出:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_2.jpg?sign=1739361846-h4IPu71AYBetNRDiK9cCBYf7n2IrvjM6-0-8f22648fb42881626c7ced294b386c9f)
【例3.2】用size()函数或shape属性查看Tensor的尺寸;用dtype属性查看它的数据类型;用numel()函数查看它的元素个数。
输入:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_3.jpg?sign=1739361846-X00DwohT2XxQIn00ucHeHENpMfYcp5gL-0-a3ace6f06d6ac68faf5794f9f2f51ca3)
输出:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_4.jpg?sign=1739361846-L5iDfqIKsUcM2vAtZWTon7fJDDzCjMo7-0-48768a8b9efb1906e3c1431947ecad09)
可以看出:
(1)size()函数与shape属性具有相同的功能。
(2)不指定数据类型时,Tensor默认的数据类型是32位浮点型(torch.FloatTensor)。
2.创建时仅指定Tensor的形状
【例3.3】可以在创建时为Tensor直接赋值,也可以先创建一个未赋值的空Tensor。
输入:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_5.jpg?sign=1739361846-sBAJHMGCPIqjuafuN38rPaseUYl0fdMl-0-7fbdaddaa06825fb9826d1dabf5c4a33)
输出:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_47_6.jpg?sign=1739361846-MtMojVupZ2eQtyXFaY52SQXOf1vZINhg-0-c29cb27a2e5544bce48272ee38038e22)
系统不会马上给这个Tensor分配空间,使用时才会分配,分配空间的大小取决于内存空间的状态。
3.依据另外一个Tensor的形状创建Tensor
【例3.4】创建一个和给定的Tensor形状一样的新Tensor。
输入:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_48_1.jpg?sign=1739361846-1o3y25rZaYPwAabsa6Z4IZgLcNTFTAHn-0-a9170cab1e942365f6ea5d03c152869b)
输出:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_48_2.jpg?sign=1739361846-NHCXqke3xeU20AMsDmBadiEZCRaZ7o7J-0-ee377460d362907e4edc2aeafd2bf0b0)
4.其他常用的创建Tensor的方法
其他常用的创建Tensor的方法如下。
(1)torch.empty(size):返回形状为size的空Tensor。
(2)torch.zeros(size):返回形状为size、元素全部是0的Tensor。
(3)torch.zeros_like(input):返回与input相同形状的、元素全部是0的Tensor。
(4)torch.ones(size):返回形状为size、元素全部是1的Tensor。
(5)torch.ones_like(input):返回与input相同形状的、元素全部是1的Tensor。
(6)torch.rand(size):返回形状为size、元素为一组在[0,1)内满足均匀分布的随机数的Tensor。
(7)torch.randn(size):返回形状为size、元素为一组满足标准正态分布(均值为0,方差为1)的随机数的Tensor。