zoukankan      html  css  js  c++  java
  • pytorch中F.softmax(x1,dim = -1) dim 取值测试及验证

    # -*- coding: utf-8 -*-
    """
    Created on Mon May 27 11:09:52 2019
    
    @author: jiangshan
    """
    
    import torch
    import numpy
    import torch.nn.functional as F
    
    x1= torch.Tensor( [[1,2,3,4],[1,3,4,5],[3,4,5,6]])
    print(x1)
    
    import math
    #将torch.Tensor转换成numpy
    x1_num = x1.numpy()
    print(x1_num)
    r,c = x1_num.shape
    Row_softmax = numpy.ndarray((r, c), dtype=numpy.float64)
    Clo_softmax = numpy.ndarray((r, c), dtype=numpy.float64)
    #对每一行进行softmax
    for i in range(r):
        sum_j = 0
        for j in range(c):
            ins = x1_num[i,j]
            sum_j += math.exp(ins)
        for j in range(c):
            out_j = math.exp(x1_num[i,j])/sum_j
            Row_softmax[i,j] = out_j
            print(out_j)
        print('=====row-%d-end====='%(i+1))
    print(Row_softmax)
    y12 = F.softmax(x1,dim = 1) #对每一行进行softmax --- dim = 1轴
    print(y12)
    y120 = F.softmax(x1,dim = -1) #对每一行进行softmax --- dim = -1
    print(y120)
    
    #对每一列进行softmax
    for j in range(c):
        sum_i = 0
        for i in range(r):
            ins = x1_num[i,j]
            sum_i += math.exp(ins)
        for i in range(r): 
            out_i = math.exp(x1_num[i,j])/sum_i 
            Clo_softmax[i,j] = out_i
            print(out_i)
        print('=====col-%d-end====='%(j+1))
    print(Clo_softmax)     
    y11= F.softmax(x1, dim = 0) #对每一列进行softmax ---- dim = 0轴
    print(y11)
    print('=================================================')
    
    # 1 维张量
    x2 = torch.Tensor([1,2,3,4])
    print(x2)
    y2 = F.softmax(x2,dim=0) #对每一列进行softmax ---- dim = 0轴
    print(y2)
    y20 = F.softmax(x2,dim=-1)
    print(y20)
    print('=================================================')
    
    # 2 维张量
    x3 = torch.Tensor([[1],[1],[3]])
    print(x3)
    y3 = F.softmax(x3,dim=1)#对每一行进行softmax --- dim = 1轴
    print(y3)
    y31 = F.softmax(x3,dim=0) #对每一列进行softmax ---- dim = 0轴
    print(y31)
    y30 = F.softmax(x3,dim=-1)
    print(y30)
    

      解读如下:

    # -*- coding: utf-8 -*-
    """
    Created on Mon May 27 11:09:52 2019
    
    @author: jiangshan
    """
    
    import torch
    import numpy
    import torch.nn.functional as F
    
    x1= torch.Tensor( [[1,2,3,4],[1,3,4,5],[3,4,5,6]])
    print(x1)
    >>
    tensor([[1., 2., 3., 4.],
            [1., 3., 4., 5.],
            [3., 4., 5., 6.]])
            
    import math
    #将torch.Tensor转换成numpy
    x1_num = x1.numpy()
    print(x1_num)
    >>
    [[1. 2. 3. 4.]
     [1. 3. 4. 5.]
     [3. 4. 5. 6.]]
     
    r,c = x1_num.shape
    Row_softmax = numpy.ndarray((r, c), dtype=numpy.float64)
    Clo_softmax = numpy.ndarray((r, c), dtype=numpy.float64)
    #对每一行进行softmax
    for i in range(r):
        sum_j = 0
        for j in range(c):
            ins = x1_num[i,j]
            sum_j += math.exp(ins)
        for j in range(c):
            out_j = math.exp(x1_num[i,j])/sum_j
            Row_softmax[i,j] = out_j
            print(out_j)
        print('=====row-%d-end====='%(i+1))
    print(Row_softmax)
    >>
    0.03205860328008499
    0.08714431874203257
    0.23688281808991013
    0.6439142598879722
    =====row-1-end=====
    0.01203764271193945
    0.0889468172974043
    0.24178251715880075
    0.6572330228318555
    =====row-2-end=====
    0.03205860328008499
    0.08714431874203256
    0.23688281808991013
    0.6439142598879724
    =====row-3-end=====
    [[0.0320586  0.08714432 0.23688282 0.64391426]
     [0.01203764 0.08894682 0.24178252 0.65723302]
     [0.0320586  0.08714432 0.23688282 0.64391426]]
     
    y12 = F.softmax(x1,dim = 1) #对每一行进行softmax --- dim = 1轴
    print(y12)
    y120 = F.softmax(x1,dim = -1) #对每一行进行softmax --- dim = -1
    print(y120)
    >>
    tensor([[0.0321, 0.0871, 0.2369, 0.6439],
            [0.0120, 0.0889, 0.2418, 0.6572],
            [0.0321, 0.0871, 0.2369, 0.6439]])
    tensor([[0.0321, 0.0871, 0.2369, 0.6439],
            [0.0120, 0.0889, 0.2418, 0.6572],
            [0.0321, 0.0871, 0.2369, 0.6439]])
    
    #对每一列进行softmax
    for j in range(c):
        sum_i = 0
        for i in range(r):
            ins = x1_num[i,j]
            sum_i += math.exp(ins)
        for i in range(r): 
            out_i = math.exp(x1_num[i,j])/sum_i 
            Clo_softmax[i,j] = out_i
            print(out_i)
        print('=====col-%d-end====='%(j+1))
    print(Clo_softmax)
    >>
    0.10650697891920075
    0.10650697891920075
    0.7869860421615985
    =====col-1-end=====
    0.09003057317038046
    0.24472847105479767
    0.6652409557748219
    =====col-2-end=====
    0.09003057317038046
    0.24472847105479764
    0.6652409557748219
    =====col-3-end=====
    0.09003057317038045
    0.24472847105479764
    0.6652409557748219
    =====col-4-end=====
    [[0.10650698 0.09003057 0.09003057 0.09003057]
     [0.10650698 0.24472847 0.24472847 0.24472847]
     [0.78698604 0.66524096 0.66524096 0.66524096]]
     
    y11= F.softmax(x1, dim = 0) #对每一列进行softmax ---- dim = 0轴
    print(y11)
    print('=================================================')
    >>
    tensor([[0.1065, 0.0900, 0.0900, 0.0900],
            [0.1065, 0.2447, 0.2447, 0.2447],
            [0.7870, 0.6652, 0.6652, 0.6652]])
    =================================================
    
    # 1 维张量
    x2 = torch.Tensor([1,2,3,4])
    print(x2)
    y2 = F.softmax(x2,dim=0) #对每一列进行softmax ---- dim = 0轴
    print(y2)
    y20 = F.softmax(x2,dim=-1)
    print(y20)
    print('=================================================')
    >>
    tensor([1., 2., 3., 4.])
    tensor([0.0321, 0.0871, 0.2369, 0.6439])
    tensor([0.0321, 0.0871, 0.2369, 0.6439])
    =================================================
    
    # 2 维张量
    x3 = torch.Tensor([[1],[1],[3]])
    print(x3)
    >>
    tensor([[1.],
            [1.],
            [3.]])
            
    y3 = F.softmax(x3,dim=1)#对每一行进行softmax --- dim = 1轴
    print(y3)
    y31 = F.softmax(x3,dim=0) #对每一列进行softmax ---- dim = 0轴
    print(y31)
    y30 = F.softmax(x3,dim=-1)
    print(y30)
    >>
    tensor([[1.],
            [1.],
            [1.]])
    tensor([[0.1065],
            [0.1065],
            [0.7870]])
    tensor([[1.],
            [1.],
            [1.]])
  • 相关阅读:
    SD卡测试
    测试人员可能会遇到的问题
    HDU 1024 Max Sum Plus Plus
    HDU 1176 免费馅饼
    HDU 1257 最少拦截系统
    HDU 1087 Super Jumping! Jumping! Jumping!
    poj 1328 Radar Installation
    poj 1753 Flip Game
    HDU 1003 Max Sum
    HDU 5592 ZYB's Premutation(BestCoder Round #65 C)
  • 原文地址:https://www.cnblogs.com/jeshy/p/10933882.html
Copyright © 2011-2022 走看看