zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    构建之法阅读笔记03
    12.16第三周总结
    构建之法阅读笔记02
    12.9第二周周总结
    四则运算2
    构建之法阅读笔记01
    12.2第一周总结
    课堂练习-增加信息
    软件工程00
    web自动化测试---web页面元素的定位
  • 原文地址:https://www.cnblogs.com/xiaochun-zhao/p/9555080.html
Copyright © 2011-2022 走看看