PyTorch Tips(二)

本文详细介绍了PyTorch中的归并操作,包括常见的函数如norm、mean、sum、std等,以及如何通过参数dim指定操作维度。通过示例代码展示了不同参数设置下输出形状的变化,帮助读者深入理解归并操作的使用。
部署运行你感兴趣的模型镜像

归并操作
此类操作会使输出形状小于输入形状,并可以沿着某一维度进行指定操作。如加法sum,既可以计算整个tensor的和,也可以计算tensor中每一行或每一列的和。常用的归并操作如下表所示:

| 函数 | 功能 |
| norm/dist | 范数/距离 |
| mean/sum/median/mode | 均值/和/中位数/众数|
| std/var | 标准差/方差|
| cumsum/cumprod | 累加/累乘 |

以上大多数函数都有一个参数dim,用来指定这些操作是在哪个维度上执行的。关于dim(对应于numpy中的axis)
的解释众说纷纭,这里提供一个简单的记忆方式。
假设输入的形状是(m,n,k):
a.如果指定dim=0,输出的形状就是(1,n,k)或(n,k);
b.如果指定dim=1,输出的形状就是(m,1,k)或(m,k);
c.如果指定dim=2,输出的形状就是(m,n,1)或(m,n);
size中是否有“1”,取决于参数keepdim,keepdim=True会保留维度1.从PyTorch0.2.0版本起,keepdim默认为False。注意,以上只是经验总结,并非所有函数都符合这种形状变化,如cumsum。

代码如下:

from __future__ import print_function
import torch as t


b = t.ones(2,3)
b.sum(dim = 0,keepdim = True)
b.sum(dim = 0,keepdim = False)
b.sum(dim = 1)


a = t.arange(0,6).view(2,3)
print(a)
a.cumsum(dim = 1)

输出如下:

b.sum(dim = 0,keepdim = True)
Out[3]: tensor([[2., 2., 2.]])
b.sum(dim = 0,keepdim = False)
Out[4]: tensor([2., 2., 2.])
b.sum(dim = 1)
Out[5]: tensor([3., 3.])
a = t.arange(0,6).view(2,3)
print(a)
tensor([[0, 1, 2],
        [3, 4, 5]])
a.cumsum(dim = 1)
Out[7]: 
tensor([[ 0,  1,  3],
        [ 3,  7, 12]])

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 使用Visdom进行PyTorch项目的可视化 为了在PyTorch项目中集成并使用Visdom进行数据和模型训练过程的实时监控与可视化,需先安装Visdom服务器以及相应的客户端库。具体操作如下: #### 安装Visdom服务端和客户端 通过pip可以方便地完成安装工作: ```bash pip install visdom ``` 启动Visdom服务器可以通过命令行执行以下语句来实现: ```bash python -m visdom.server ``` 这将在本地8097端口上运行一个Web应用,默认情况下可通过浏览器访问`http://localhost:8097`查看可视化界面。 #### 初始化Visdom环境并与PyTorch连接 在Python脚本或者Jupyter Notebook环境中引入visdom模块,并创建一个新的Visdom实例用于后续绘图和其他交互功能。 ```python import torch from visdom import Visdom viz = Visdom() assert viz.check_connection(), '无法连接到Visdom服务器' ``` #### 创建简单的折线图展示损失函数变化趋势 下面的例子展示了如何记录每次迭代后的loss值,并将其绘制为一条随时间更新的曲线。 ```python # 假设这是来自训练循环中的某次迭代得到的结果 iteration = 0 loss_value = some_computed_loss.item() if iteration == 0: win = viz.line( X=torch.tensor([iteration]), Y=torch.tensor([loss_value]), opts=dict(title='Training Loss') ) else: viz.line( X=torch.tensor([iteration]), Y=torch.tensor([loss_value]), update='append', win=win ) iteration += 1 ``` 除了基本的折线图外,Visdom还支持多种类型的图表形式,比如散点图、热力图等,可以根据实际需求灵活运用这些工具来进行更丰富的数据分析和呈现[^1]。 #### 结合Seaborn探索性分析 对于复杂的数据集,还可以考虑结合seaborn这样的高级统计图形库来做一些初步的数据理解工作,然后再利用Visdom做动态跟踪。 ```python import seaborn as sns sns.set_theme(style="whitegrid") tips = sns.load_dataset("tips") ax = sns.barplot(x="day", y="total_bill", data=tips) # 将Matplotlib图像转换成numpy数组以便于发送给Visdom显示 fig = ax.get_figure() fig.canvas.draw() image_from_plot = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8) image_from_plot = image_from_plot.reshape(fig.canvas.get_width_height()[::-1] + (3,)) viz.image(image_from_plot.transpose(2, 0, 1), opts={'title': 'Tips Dataset Analysis'}) plt.close(fig) # 关闭不再使用的Figure对象以释放资源 ``` 上述方法不仅限于处理静态图片;也可以用来定期抓取当前状态下的任意matplotlib/seaborn生成的内容作为训练进度的一部分持续更新至Visdom面板之上[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值