【PyTorch】3.张量类型转换

个人主页:Icomi

在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch,我们可以轻松搭建各类神经网络模型,实现从基础到高级的人工智能应用。接下来,就让我们一同走进 PyTorch 的世界,探索神经网络与人工智能的奥秘。本系列为PyTorch入门文章,若各位大佬想持续跟进,欢迎与我交流互关。

大家好我是一颗米,我们已经了解了张量在 PyTorch 中的核心地位,也知道了它在 CPU 和 GPU 上的运算方式,这些都是搭建我们深度学习知识大厦的重要基石。但这座大厦要盖得又高又稳,还需要更多的 "砖块",接下来我们就来学习其中非常关键的一块 ------ 张量的类型转换。

在实际的深度学习项目中,我们会从各种不同的数据源获取数据,这些数据可能最初是以不同的形式存在的。而我们之前学过,在 PyTorch 里计算数据基本都是以张量形式,所以就经常需要进行数据类型的转换。其中,将 numpy 数组和 PyTorch Tensor 相互转化,就是最常使用的一种操作,这也是大家必须掌握的知识点。

numpy 在 Python 的数据处理领域应用非常广泛,很多经典的数据集和算法库都与 numpy 紧密相关。当我们从这些地方获取数据后,往往就需要把 numpy 数组转化为 PyTorch Tensor,才能在 PyTorch 的深度学习模型中进行运算。反之,当我们在 PyTorch 模型中完成某些计算,需要使用一些 numpy 强大的数据分析和处理工具时,又得把 Tensor 转换回 numpy 数组。

这一节,我们主要就来学习如何在 numpy 数组和 PyTorch Tensor 之间自由 "穿梭",掌握这一关键技能,为我们后续的深度学习扫除障碍。

1. 张量转换为 numpy 数组

使用 Tensor.numpy 函数可以将张量转换为 ndarray 数组,但是共享内存,可以使用 copy 函数避免共享。

python 复制代码
# 1. 将张量转换为 numpy 数组
def tensor_to_numpy():
    # 创建一个 PyTorch 张量
    tensor = torch.tensor([2, 3, 4])
    # 使用张量对象中的 numpy 函数进行转换
    numpy_array = tensor.numpy()

    print(type(tensor))
    print(type(numpy_array))

    # 注意: tensor 和 numpy_array 共享内存
    # 修改其中的一个,另外一个也会发生改变
    # tensor[0] = 100
    numpy_array[0] = 100

    print(tensor)
    print(numpy_array)


# 2. 对象拷贝避免共享内存
def tensor_to_numpy_with_copy():
    # 创建一个 PyTorch 张量
    tensor = torch.tensor([2, 3, 4])
    # 使用张量对象中的 numpy 函数进行转换,先克隆张量避免共享内存
    numpy_array = tensor.clone().numpy()

    print(type(tensor))
    print(type(numpy_array))

    # 修改 numpy 数组,不会影响原张量
    numpy_array[0] = 100

    print(tensor)
    print(numpy_array)


if __name__ == "__main__":
    tensor_to_numpy()
    tensor_to_numpy_with_copy()

2. numpy 转换为张量

  1. 使用 from_numpy 可以将 ndarray 数组转换为 Tensor,默认共享内存,使用 copy 函数避免共享。
  2. 使用 torch.tensor 可以将 ndarray 数组转换为 Tensor,默认不共享内存。
python 复制代码
# 1. 使用 from_numpy 函数
def test01():

    data_numpy = np.array([2, 3, 4])
    # 将 numpy 数组转换为张量类型
    # 1. from_numpy
    # 2. torch.tensor(ndarray)

    # 浅拷贝
    data_tensor = torch.from_numpy(data_numpy)

    # nunpy 和 tensor 共享内存
    # data_numpy[0] = 100
    data_tensor[0] = 100

    print(data_tensor)
    print(data_numpy)


# 2. 使用 torch.tensor 函数
def test02():

    data_numpy = np.array([2, 3, 4])

    data_tensor = torch.tensor(data_numpy)

    # nunpy 和 tensor 不共享内存
    # data_numpy[0] = 100
    data_tensor[0] = 100

    print(data_tensor)
    print(data_numpy)

3. 标量张量和数字的转换

对于只有一个元素的张量,使用 item 方法将该值从张量中提取出来。

python 复制代码
# 3. 标量张量和数字的转换
def test03():

    # 当张量只包含一个元素时, 可以通过 item 函数提取出该值
    data = torch.tensor([30,])
    print(data.item())

    data = torch.tensor(30)
    print(data.item())


if __name__ == '__main__':
    test03()

4.总结

本节内容比较简单, 我们主要学习了 numpy 和 tensor 互相转换的规则, 以及标量张量与数值之间的转换规则。

相关推荐
羚羊角uou2 分钟前
【Linux】匿名管道和进程池
linux·c++·算法
GEO科技权威资讯8 分钟前
生成对抗网络 (GAN):理解其原理与创作能力
人工智能·神经网络·生成对抗网络
曙曙学编程19 分钟前
stm32——独立看门狗,RTC
c语言·c++·stm32·单片机·嵌入式硬件
一个java开发26 分钟前
distributed.client.Client 用户可调用函数分析
大数据·python
励志不掉头发的内向程序员26 分钟前
C++进阶——多态
开发语言·c++·学习
eqwaak037 分钟前
Matplotlib 动态显示详解:技术深度与创新思考
网络·python·网络协议·tcp/ip·语言模型·matplotlib
六月的可乐41 分钟前
【干货推荐】AI助理前端UI组件-悬浮球组件
前端·人工智能·ui
蔡俊锋1 小时前
【无标题】
人工智能·chatgpt
007php0071 小时前
某大厂MySQL面试之SQL注入触点发现与SQLMap测试
数据库·python·sql·mysql·面试·职场和发展·golang
CodeCraft Studio1 小时前
Excel处理控件Aspose.Cells教程:使用 Python 将 Pandas DataFrame 转换为 Excel
python·json·excel·pandas·csv·aspose·dataframe