Pytorch 初探 电脑版发表于:2023/11/20 15:50 ![](https://img.tnblog.net/arcimg/hb/21f086c80c5d4afda1bc1029dadd8f3a.png) >#Pytorch 初探 [TOC] ## Pytorch简介 tn2>PyTorch由 Facebook 的 AI 研究团队开发的一个开源的机器学习库,它提供了张量(tensor)计算和动态计算图的功能。 ## Pytorch特点 | 特点 | 描述 | | ------------ | ------------ | |动态计算图|PyTorch 使用动态计算图,这意味着在运行时创建计算图。相比于静态计算图,动态计算图更加灵活,方便调试和动态修改模型结构。| |张量| PyTorch 张量是其核心数据结构,类似于NumPy的数组。张量可以在GPU上运算,从而加速深度学习模型的训练。| |自动求导| PyTorch 提供了自动求导的功能,通过autograd模块可以轻松计算梯度。这对于训练神经网络和其他机器学习模型非常有用。| |模块化和灵活性| PyTorch 的模块化设计使其非常灵活。你可以按照自己的需求选择使用其高级API或底层API。高级API(例如torch.nn)提供了更抽象的接口,而底层API允许更精细的控制。| |丰富的生态系统| PyTorch 拥有庞大的社区和丰富的生态系统,包括许多预训练模型、工具和库,使其成为科学研究和工业应用中的热门选择。|| |深度整合| PyTorch 与很多其他深度学习框架(如TorchScript)和库(如Torchvision、Torchaudio等)深度整合,为用户提供全面的工具支持。| |支持动态图和静态图| PyTorch 提供了torchscript,它可以将动态图转换为静态图,这对于生产环境的部署非常有用。| |社区支持| PyTorch 拥有活跃的社区,提供丰富的教程、文档和在线支持,使得用户能够轻松上手和解决问题。| ## 安装Pytorch tn2>执行如下命令即可安装Pytorch ```bash # mac or linux pip install torch torchvision torchaudio # win pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 ``` tn2>安装完成后执行如下命令查看Pytorch版本。 ```python import torch print(torch.__version__) print(torch.cuda.is_available()) ``` ![](https://img.tnblog.net/arcimg/hb/a791062611d046ed907b952f9afdf81b.png) tn2>可以看到我这里没有的gpu只有cpu。 ## 基本示例 tn2>创建一个5x3的矩阵。 ```python x = torch.empty(5, 3) print(x) ``` ![](https://img.tnblog.net/arcimg/hb/b138b3173e5a44149073ca1b3bb6896e.png) tn2>创建随机5x3的矩阵。 ```python x = torch.rand(5, 3) print(x) ``` ![](https://img.tnblog.net/arcimg/hb/cc43d585d71c4f6e9880ea8ac552a7a0.png) tn2>初始化一个全零矩阵。 ```python x = torch.zeros(5, 3, dtype=torch.long) print(x) ``` ![](https://img.tnblog.net/arcimg/hb/17579d2469e44c2c819875dec37f9a17.png) tn2>直接传入数据。 ```python x = torch.tensor([5.5, 3]) print(x) ``` ![](https://img.tnblog.net/arcimg/hb/3ef314b2791041af9d1313bf0ffb5e4e.png) tn2>创建一个形状为 (5, 3) 的张量,并初始化为全为1 ```python x = x.new_ones(5,3,dtype=torch.double) # 创建了一个与前面张量相同形状的新张量,但是这次是用从标准正态分布中抽样得到的随机数填充,同时将数据类型设置为 torch.float x = torch.randn_like(x, dtype=torch.float) print(x) ``` ![](https://img.tnblog.net/arcimg/hb/59be8f43d08a494bb31532ffacf5174b.png) ### 展示矩阵大小 ```python x.size() ``` ![](https://img.tnblog.net/arcimg/hb/17cc10e559e34c21ac5ac100e72b121d.png) ## 基本计算方法 tn2>做加法。 ```python y = torch.rand(5, 3) print(x + y) ``` ![](https://img.tnblog.net/arcimg/hb/5b73730aaa994d67836efdaa299ba6d7.png) ```python print(torch.add(x, y))# 一样的也是加法 ``` ![](https://img.tnblog.net/arcimg/hb/a65df0d7bc844c0f8d61b5538b2364c6.png) ## 索引 ```python x ``` ![](https://img.tnblog.net/arcimg/hb/23c9e9a5856b4cae8ddd2532647f0f0b.png) ```python x[:,1]# 取出所有第二个的 ``` ![](https://img.tnblog.net/arcimg/hb/2d4c42e6128f4aae86bd2a88caccdac6.png) ```python x[:,2]# 取出所有第三个的 ``` ![](https://img.tnblog.net/arcimg/hb/27bcdae1e7a9462db26e9e0dd93638b6.png) ## view操作可以改变矩阵维度 ```python x = torch.randn(4, 4) y = x.view(16) z = x.view(-1, 8) # 这里-1表示自动计算 print(x.size(), y.size(), z.size()) ``` ![](https://img.tnblog.net/arcimg/hb/3d76669019f3444e95e2513f112a91e9.png) ```python x,y,z ``` ![](https://img.tnblog.net/arcimg/hb/1f24ccebd1c74913ad95538279de7e3a.png) ```python m = x.view(-1, 2) m.size(),m ``` ![](https://img.tnblog.net/arcimg/hb/aea483d4c4bc44e49efc33bdb952a88e.png) tn2>与`-1`是相同的。 ```python z = x.view(2, 8) z.size() ``` ![](https://img.tnblog.net/arcimg/hb/84515e1edc3e4a94a779a295697692af.png) ## 与Numpy的协同操作 tn2>numpy与pytorch之间的数据互转。 ```python a = torch.ones(5) b = a.numpy() print(a, b) ``` ![](https://img.tnblog.net/arcimg/hb/5a1f418a0a2f43b7986000fccc6bce92.png) ```python import numpy as np a = np.ones(5) b = torch.from_numpy(a) b ``` ![](https://img.tnblog.net/arcimg/hb/e19351a8a08a45abb0a68fc3006318ee.png)