Pytorch学习-1

张量(Tensor)是深度学习和科学计算中的一个核心概念。在PyTorch中,张量是一个多维数组,是库操作的基本单位,可以看作是高维数组或矩阵的泛化。张量支持自动求导机制,非常适合在GPU或其他硬件加速器上进行高效计算。张量不仅可以用于存储数据,还可以通过计算图和梯度流来参与和构建复杂的数学模型。

张量的属性

张量具有以下几个关键属性:

  • 维度(Dimension):张量的维度(或称为轴)表示数据的组织形式。例如,一个3维张量可以表示一个立方体的数据,维度分别对应高度、宽度和深度。
  • 形状(Shape):张量的形状是一个由各维度大小组成的元组,描述了张量在每个维度上的尺寸。
  • 数据类型(Dtype):张量可以存储不同类型的数值,如整数、浮点数等。PyTorch中的张量支持多种数据类型。
  • 设备(Device):张量可以存储在不同的设备上,最常见的设备是CPU和GPU。将张量移动到GPU上可以加速计算。

创建张量

PyTorch提供了多种方法来创建张量:

1.直接从数据创建

import torch
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)

2.从NumPy数组创建

import numpy as np
np_array = np.array(data)
x_np = torch.from_numpy(np_array)

3.通过现有的张量创建: 使用现有张量来确定新张量的形状、数据类型和设备。新张量会重新分配内存。

x_ones = torch.ones_like(x_data) # 保留x_data的属性
x_rand = torch.rand_like(x_data, dtype=torch.float) # 覆盖x_data的数据类型

4.使用随机或常数值

shape = (2,3,) # 形状为2x3的张量
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

张量操作

PyTorch中的张量支持超过100种操作,包括算术、线性代数、矩阵操作等,这些操作可以在CPU或GPU上执行。示例:
 

import torch
import numpy as np

# 张量创建
# 从数据直接创建张量
tensor_from_data = torch.tensor([[1, 2], [3, 4]])

# 从NumPy数组创建张量
np_array = np.array([[1, 2], [3, 4]])
tensor_from_numpy = torch.from_numpy(np_array)

# 使用随机或常数值创建张量
shape = (2, 3)
tensor_rand = torch.rand(shape)
tensor_ones = torch.ones(shape)
tensor_zeros = torch.zeros(shape)

# 张量属性
print("张量形状:", tensor_from_data.shape)
print("张量类型:", tensor_from_data.dtype)
print("存储在哪个设备:", tensor_from_data.device)

# 张量操作
# 算术操作
tensor_add = tensor_from_data + tensor_ones  # 张量加法
tensor_mul = tensor_from_data * tensor_ones  # 张量乘法

# 切片和索引
tensor_slice = tensor_from_data[:, 1]  # 获取所有行的第二列

# 形状变换
tensor_reshape = tensor_from_data.view(4)  # 改变形状为4个元素的一维张量
tensor_resize = tensor_from_data.reshape(1, 4)  # 改变形状为1x4的张量

# 张量拼接
tensor_concat = torch.cat([tensor_from_data, tensor_ones], dim=1)  # 在列维度上拼接

# 张量广播
# 广播允许在算术操作中自动扩展尺寸不同的张量
tensor_broadcast = tensor_from_data + torch.tensor([1, 2])

# 将张量移动到不同的设备
if torch.cuda.is_available():
    tensor_to_gpu = tensor_from_data.to('cuda')

# 打印结果示例
print("加法结果:\n", tensor_add)
print("乘法结果:\n", tensor_mul)
print("切片结果:\n", tensor_slice)
print("重塑结果:\n", tensor_reshape)
print("张量拼接结果:\n", tensor_concat)
print("广播结果:\n", tensor_broadcast)

# 注意:执行 tensor_to_gpu 时,确保你的环境支持CUDA

        注:通过使用运算符+ 或 add函数,可以将两个相同形状的张量相加,以获得相同 形状的输出张量。PyTorch遵循为同一操作使用后缀下划线的惯例,但这会发生in- place。 例如,a.add(b)得到了一个新的张量,它是通过在a 和 b 上求和得到的结果。 此操作不会对现有的张量a 和 b 进行任何更改。但是a.add_(b)使用求和结果更新张 量 a 并返回更新后的a0 这同样适用于PyTorch中的所有操作。 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值