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.]])
  • 相关阅读:
    如何编写高质量的VB代码(转自雪中漫步的专栏)
    写好软件的75条(转)
    .NET在SQL Server中的图片存取技术(转)
    股票基础知识
    ActiveX组件及其注册
    面试之中企动力
    海量数据库的查询优化及分页算法方案(转)
    什么是Ajax(转)
    VB.Net2005使用windows media player 初探
    done sonatus 无人车startup阴区区烙印
  • 原文地址:https://www.cnblogs.com/jeshy/p/10933882.html
Copyright © 2011-2022 走看看