Theano学习笔记01--Dimshuffle()函数

版权声明:本文为原创文章,水平有限,欢迎转载,但请注明转载出处http://blog.csdn.net/niuwei22007,谢谢。!!!联系方式见左侧!!! https://blog.csdn.net/niuwei22007/article/details/48949869

原文地址可以查看更多信息

  本文主要介绍Theano中的一个函数,名叫dimshuffle()。在做卷积实验室会用到,是用来改变一个array张量结构的一个工具。原来不懂这个函数的作用以及作用后的结果是什么,经过多次实验,终于有了结果。下面来说一下我的结果。仅贡献给尚不懂这个函数的同学。
  
  为了弄懂dimshuffle()函数的作用,最好的方法就是做实验。输入数据,然后观察输出数据。渐渐地就能找到规律,并能总结出函数作用。下面我们开始做实验。

  实验代码gitHub下载
  实验代码CSDN免费下载

  代码介绍:借用Python卷积运算的代码,将图片显示的部分去掉,另外加入function函数中间值输出功能。

  实验条件:经测试,b是shared变量时,才能调用dimshuffle()函数。
  实验开始:
  1. 一维变换。b是一维张量(把b视为列向量,因此其shape为(2,)),调用dimshuffle()时,传入的参数只可以为0或’x’
  (1). 调用b.dimshuffle(0)
    结果:b_1.dimshuffle str = [ 0.33799502 -0.06810025]
    分析:输出b的原始结构信息,shape为(2,)。
    
  (2). 调用b.dimshuffle(0, ‘x’)
    结果:b_1.dimshuffle str = [[ 0.33799502]
                   [-0.06810025]]
    分析:将b的结构改变为2维,且shape为(2, 1)
  
  (3). 调用b.dimshuffle(‘x’, 0)
    结果:b_1.dimshuffle str = [[ 0.33799502 -0.06810025]]
    分析:将b的结构改变为2维,且shape为(1, 2)
  
  (4). 调用b.dimshuffle(0, ‘x’, ‘x’)
    结果:b_1.dimshuffle str = [[[ 0.33799502]]
[[-0.06810025]]]
    分析:将b的结构改变为3维,且shape为(2, 1, 1)
    
  (5). 调用b.dimshuffle(‘x’, 0, ‘x’)
    结果:b_1.dimshuffle str = [[[ 0.33799502]
                  [-0.06810025]]]
    分析:将b的结构改变为3维,且shape为(1, 2, 1)
    
  (6). 调用b.dimshuffle(‘x’, ‘x’, 0)
    结果:b_1.dimshuffle str = [[[ 0.33799502 -0.06810025]]]
    分析:将b的结构改变为3维,且shape为(1, 1, 2)
    
  其他实验自己继续做,比如dimshuffle(0,’x’,’x’,’x’)等。先作如下总结:0代表原始b的行。因为原b是1维,因此dimshuffle中的参数只有0,没有1。每增加一个’x’,则结果增加一维。0的位置不同,结果中结构不同。结果结构规律为:把’x’用1替换,0则用原来的行数代替。例如(4)中的(0, ‘x’, ‘x’)用以上规律则其结构为:2*1*1,为什么0对应的是2呢,因为原来的b有2行。

  2. 二维变换。b1是二维张量,调用dimshuffle()时,传入的参数可以为(0和1)或’x’
  (1). 调用b.dimshuffle(0, 1)
    结果:b_1.dimshuffle str = [[0 1 2]]
    分析:输出b1的原始结构信息,shape为(1,3)。
    
  (2). 调用b.dimshuffle(1, 0)
    结果:b_1.dimshuffle str = [[0]
                 [1]
                 [2]]
    分析:输出b1的原始结构信息,shape为(3,1)。
    
  (3). 调用b.dimshuffle(0, 1, ‘x’)
    结果:b_1.dimshuffle str = [[[0]
                  [1]
                  [2]]]
    分析:输出b1的原始结构信息,shape为(1,3,1)。
    
  (4). 调用b.dimshuffle(0, ‘x’, 1)
    结果:b_1.dimshuffle str = [[[0 1 2]]]
    分析:输出b1的原始结构信息,shape为(1,1,3)。
    
  (5). 调用b.dimshuffle(‘x’, 0, 1)
    结果:b_1.dimshuffle str = [[[0 1 2]]]
    分析:输出b1的原始结构信息,shape为(1,1,3)。
    
  (6). 调用b.dimshuffle(1, 0, ‘x’)
    结果:b_1.dimshuffle str = [[[0]]
                 [[1]]
                 [[2]]]
    分析:输出b1的原始结构信息,shape为(3,1,1)。
    
  (7). 调用b.dimshuffle(1, ‘x’, 0)
    结果:b_1.dimshuffle str =[[[0]]
                 [[1]]
                 [[2]]]
    分析:输出b1的原始结构信息,shape为(3,1,1)。
    
  (8). 调用b.dimshuffle(‘x’, 1, 0)
    结果:b_1.dimshuffle str =[[[0]
                 [1]
                 [2]]]
    分析:输出b1的原始结构信息,shape为(1,3,1)。
    
  (9). 调用b.dimshuffle(‘x’, 1, ‘x’, 0)
    结果:b_1.dimshuffle str = [[[[0]]
                  [[1]]
                  [[2]]]]
    分析:输出b1的原始结构信息,shape为(1,3,1,1)。
    
  (10). 调用b.dimshuffle(‘x’, 0, ‘x’, 1)
    结果:b_1.dimshuffle str = [[[[0 1 2]]]]
    分析:输出b1的原始结构信息,shape为(1,1,1,3)。
  
  其他实验自己继续做,比如dimshuffle(0,’x’,’x’,1,’x’)等。先作如下总结:0对应原始b1的行数,1对应原始b1的列数。每增加一个’x’,则结果增加一维。0和1的位置不同,结果中结构不同。结果结构规律为:把’x’用1替换,0用原来b1的行数代替,1用原来b1的列数代替。例如(9)中的(‘x’, 1, ‘x’, 0)用以上规律则其结构为:1*3*1*1。

  基本实验及结果介绍到此,其中描述会有不严谨的部分,但是总结的规律可以让新手明白dimshuffle到底是怎么回事。如有疑问或建议,欢迎交流。

猜你喜欢

转载自blog.csdn.net/niuwei22007/article/details/48949869