PyTorch创建张量的多种方式(附带实例)
张量的工作是用数字的方式表示数据。例如,可以将图像表示为具有形状 [3, 224,224] 的张量,这意味着 [color_channels,height,width],因为在图像中有 3 个颜色通道(red, green, blue),高度为 224 像素,宽度为 224 像素。
在张量语言(用于描述张量的语言)中,张量有 3 个维度,分别是颜色通道、高度和宽度。
可以使用 ndim 属性来检查张量的维数,代码如下:
怎么从张量中检索数字呢?可以使用 item() 方法,代码如下:
可以用一个向量 [3,2] 来描述房子里的 [卧室、浴室]。也可以用 [3,2,2] 来描述房子里的 [卧室、浴室、停车场]。
向量在其所能表示的内容上是灵活的:
张量的另一个重要概念是它们的形状属性。形状告诉它们内部的元素是如何排列的。让我们看看向量的形状,代码如下:
现在看一个矩阵,代码如下:
矩阵和向量一样灵活,只是它们有一个额外的维度,代码如下:
创建一个张量:
可以使用 torch.rand() 并传入 size 参数来完成此操作,代码如下:
torch.rand() 的灵活性在于,可以将大小调整为我们想要的任何大小。例如,想要一个通用图像形状为 [224, 224, 3]([高度,宽度,颜色通道]) 的随机张量,代码如下:
用 torch.zeros() 可以创建一个全是 0 的张量,代码如下:
可以使用 torch.ones() 创建一个全是 1 的张量,代码如下:
有时,可能想要一个特定类型的张量与另一个张量具有相同的形状。例如,一个全零的张量,其形状与前一个张量相同。要做到这一点,可以使用 torch.zeros_like(input) 或 torch.ones_like(input),它们分别返回一个填充有与输入形状相同的 0 或 1 的张量,代码如下:
在张量语言(用于描述张量的语言)中,张量有 3 个维度,分别是颜色通道、高度和宽度。
PyTorch创建张量
首先创建的是标量。标量是一个单一的数,又称零维张量。>>> # Scalar >>> scalar = torch.tensor(7) >>> scalar tensor(7)
可以使用 ndim 属性来检查张量的维数,代码如下:
>>> scalar.ndim 0
怎么从张量中检索数字呢?可以使用 item() 方法,代码如下:
>>> # Get the Python number within a tensor (only works with one-element tensors) >>> scalar.item() 7向量是一维张量,可以包含许多数字。
可以用一个向量 [3,2] 来描述房子里的 [卧室、浴室]。也可以用 [3,2,2] 来描述房子里的 [卧室、浴室、停车场]。
向量在其所能表示的内容上是灵活的:
>>> # Vector >>> vector = torch.tensor([7, 7]) >>> vector tensor([7, 7])你认为它会有多少个维度?
>>> # Check the number of dimensions of vector >>> vector.ndim 1可以通过外部方括号([)的数量来判断 PyTorch 中张量的维数。
张量的另一个重要概念是它们的形状属性。形状告诉它们内部的元素是如何排列的。让我们看看向量的形状,代码如下:
>>> # Check shape of vector >>> vector.shape torch.Size([2])上述代码返回 torch.Size([2]),这意味着向量具有 [2] 的形状。这是因为在方括号内放置了两个元素([7, 7])。
现在看一个矩阵,代码如下:
>>> # Matrix >>> MATRIX = torch.tensor([[7, 8], [9, 10]]) >>> MATRIX tensor([[ 7, 8], [ 9, 10]])
矩阵和向量一样灵活,只是它们有一个额外的维度,代码如下:
>>> # Check number of dimensions >>> MATRIX.ndim 2矩阵有两个维度。你认为它会是什么形状?
>>> MATRIX.shape torch.Size([2, 2])得到了 torch.Size([2, 2]),因为 MATRIX 是两个元素深和两个元素宽。
创建一个张量:
>>> # Tensor >>> TENSOR = torch.tensor([[[1, 2, 3], [3, 6, 9], [2, 4, 5]]) >>> TENSOR tensor([[1, 2, 3], [3, 6, 9], [2, 4, 5]])你认为它有多少维度?
>>> # Check number of dimensions for TENSOR >>> TENSOR.ndim 3检查它的形状:
>>> # Check shape of TENSOR >>> TENSOR.shape torch.Size([1, 3, 3])维度从外到内。这意味着有一个 3×3 的 1 个维度。
PyTorch随机张量
当使用 PyTorch 构建机器学习模型时,很少会手动创建张量。相反,机器学习模型通常从大的随机数张量开始,并在处理数据时调整这些随机数,以更好地表示数据。可以使用 torch.rand() 并传入 size 参数来完成此操作,代码如下:
>>> # Create a random tensor of size (3, 4) >>> random_tensor = torch.rand(size=(3, 4)) >>> random_tensor, random_tensor.dtype (tensor([[0.3631, 0.3493, 0.7014, 0.8026], [0.7313, 0.7560, 0.5939, 0.4873], [0.9999, 0.1685, 0.6585, 0.3015]]), torch.float32)
torch.rand() 的灵活性在于,可以将大小调整为我们想要的任何大小。例如,想要一个通用图像形状为 [224, 224, 3]([高度,宽度,颜色通道]) 的随机张量,代码如下:
>>> # Create a random tensor of size (224, 224, 3) >>> random_image_size_tensor = torch.rand(size=(224, 224, 3)) >>> random_image_size_tensor.shape, random_image_size_tensor.ndim (torch.Size([224, 224, 3]), 3)
PyTorch零和一填充张量
有时只想用零或一来填充张量。这种情况在做掩码时经常发生。用 torch.zeros() 可以创建一个全是 0 的张量,代码如下:
>>> # Create a tensor of all zeros >>> zeros = torch.zeros(size=(3, 4)) >>> zeros, zeros.dtype (tensor([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]), torch.float32)
可以使用 torch.ones() 创建一个全是 1 的张量,代码如下:
>>> # Create a tensor of all ones >>> ones = torch.ones(size=(3, 4)) >>> ones, ones.dtype (tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]), torch.float32)
PyTorch范围张量
有时可能需要一个数字范围,如 1~10 或 0~100。这时可以用 torch.arange(start,end, step)。- start=范围的开始(如 0);
- end=范围结束(如 10);
- step=每个值之间的步长(如 1)。
>>> # Create a range of values 0 to 10 >>> zero_to_ten = torch.arange(start=0, end=10, step=1) >>> zero_to_ten tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
有时,可能想要一个特定类型的张量与另一个张量具有相同的形状。例如,一个全零的张量,其形状与前一个张量相同。要做到这一点,可以使用 torch.zeros_like(input) 或 torch.ones_like(input),它们分别返回一个填充有与输入形状相同的 0 或 1 的张量,代码如下:
>>> # Can also create a tensor of zeros similar to another tensor >>> ten_zeros = torch.zeros_like(input=zero_to_ten) # will have same shape >>> ten_zeros tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])