Pytorch 多维数组运算过程的索引处理方式

 更新时间:2019年12月27日 16:45:59   作者:赵小春  
今天小编就为大家分享一篇Pytorch 多维数组运算过程的索引处理方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

背景:对 python 不熟悉,能看懂代码,也能实现一些简单的功能,但是对 python 的核心思想和编程技巧不熟,所以使 Pytorch 写 loss 的时候遇到很多麻烦,尤其是在 batch_size > 1 的时候,做矩阵乘法之类的运算会觉得特别不顺手。

所幸,在边查边写的过程中,理解了 python 中多维运算的实现规则。

1、python 的基本索引规则

从 0 开始

对于给定的范围,如 b = a[m:n], 那么 b 为由 (n-m)个数据组成的新数组,由 a[m],a[m+1],...,a[n-1] 构成。(若 n<m, 得到空)

2、单个 tensor 运算,使用 dim 参数

torch 中对 tensor 的操作方法,若不加 dim 参数表示对整体的 tensr 进行操作,若增加 dim 参则表示按维操作。

例:

a = [[1,2],[3,4],[5,6]] (torch.tensor)

  torch.mean(a) => 3.5

  torch.mean(a,dim=0) => [1.5, 3.5, 5.5]

  torch.mean(a,dim=1) => [[3],[4]]

  torch.mean(a,dim=0) => [3,4]

  torch.mean(a,dim=1) => [1.5, 3.5, 5.5] 

注: torch.mean() 是一个降维的操作,所以不会出现在取均值后保持跟原 Tensor 同维的情况。 dim 参数存在时降一维,不存在时得到的是整个 Tensor 的均值。

3、两个 tensor 运算,构造对应形状

以乘法为例:

3.1 矩阵乘向量

a = [[1,2],[3,4],[5,6]]

b = [1,1]

计算乘法 c = a@b

若 a 拓展为 (N,3,2) N 为 batch_size, 计算 c2 = a@b

若 a,b 同时拓展, 变成(N, 2),那么需要做一个变换 b = b.view(N,2,1),计算 c3 = a@b

3.2 矩阵乘矩阵

a = [[1,2],[3,4],[5,6]]

b =[ [1,1],[1,1]]

计算乘法 c = a@b

若 a 拓展为 (N,3,2) N 为 batch_size, 计算 c2 = a@b

若 a,b 同时拓展, 变成(N, 2, 2),计算 c3 = a@b

以上这篇Pytorch 多维数组运算过程的索引处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 对python中Json与object转化的方法详解

    对python中Json与object转化的方法详解

    今天小编就为大家分享一篇对python中Json与object转化的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python灰度变换中灰度切割分析实现

    Python灰度变换中灰度切割分析实现

    灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每个像素灰度值的方法。目的是改善画质,使图像显示效果更加清晰。图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分
    2022-10-10
  • Python脚本如何在bilibili中查找弹幕发送者

    Python脚本如何在bilibili中查找弹幕发送者

    这篇文章主要介绍了如何在bilibili中查找弹幕发送者,本文给大家分享小编写的一个python脚本来实现bilibili弹幕发送者,需要的朋友可以参考下
    2020-06-06
  • Anaconda+Pycharm环境下的PyTorch配置方法

    Anaconda+Pycharm环境下的PyTorch配置方法

    这篇文章主要介绍了Anaconda+Pycharm环境下的PyTorch配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • opencv python Canny边缘提取实现过程解析

    opencv python Canny边缘提取实现过程解析

    这篇文章主要介绍了opencv python Canny边缘提取实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python生成任意波形并存为txt的实现

    Python生成任意波形并存为txt的实现

    本文主要介绍了Python生成任意波形并存为txt的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • python使用电子邮件模块smtplib的方法

    python使用电子邮件模块smtplib的方法

    这篇文章主要介绍了python使用电子邮件模块smtplib的方法,需要的朋友可以参考下
    2016-08-08
  • 解决numpy数组互换两行及赋值的问题

    解决numpy数组互换两行及赋值的问题

    这篇文章主要介绍了解决numpy数组互换两行及赋值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • python网络编程之五子棋游戏

    python网络编程之五子棋游戏

    这篇文章主要为大家详细介绍了python网络编程之五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Python中Playwright 与 pyunit 结合使用详解

    Python中Playwright 与 pyunit 结合使用详解

    这篇文章主要介绍了Python中Playwright 与 pyunit 结合使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论