如何理解深度学习中的tensor(涉及numpy的二维,三维以及四维数据的理解)

0. 写作目的

好记性不如烂笔头。

结论:无论几维,都可以按照(Batch_size, Height, Width, Channle)来理解。

1. 二维数据的理解

 理解为:只有(Height, Width),而且理解的是对于每一【 】从后向前看。即第一个[0.1, 0.2, 0.3]是width维度的。

b = [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]
b_array = np.array( b )

print(b_array)
print(b_array.shape)
print( b_array[1,2] )

### result

[[0.1 0.2 0.3]
 [0.4 0.5 0.6]]
(2, 3)
0.6

 

2. 对三维数据的理解

 理解为:只有(Height, Width, Channel),而且理解的是对于每一【 】从后向前看。即第一个[1, 2, 3, 3.5]是Channel维度的。

a = [ [[1, 2, 3, 3.5], [4, 5, 6, 6.5]], 
[[7, 8, 9, 9.5], [10, 11, 12, 12.5]], 
[[13, 14, 15, 15.5], [16, 17, 18, 18.5]]]

a_array = np.array( a )
print(a_array)
print( a_array.shape )
print( a_array[0, 1, 3] )


### result
[[[ 1.   2.   3.   3.5]
  [ 4.   5.   6.   6.5]]

 [[ 7.   8.   9.   9.5]
  [10.  11.  12.  12.5]]

 [[13.  14.  15.  15.5]
  [16.  17.  18.  18.5]]]
(3, 2, 4)
6.5

可视化上述的三维数据(字迹丑大家见谅,理解原理优先):

 

3. 对四维数据的理解

 理解为:(Batch_size, Height, Width, Channel),而且理解的是对于每一【 】从后向前看。即第一个[0.1, 0.2, 0.3]是Channel维度的。

c = [ [[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [1.0, 1.1, 1.2]],
[[0.11, 0.21, 0.31], [0.41, 0.51, 0.61], [0.71, 0.81, 0.91], [1.01, 1.11, 1.21]] ],
      [[[0.12, 0.22, 0.32], [0.42, 0.52, 0.62], [0.72, 0.82, 0.92], [1.02, 1.12, 1.22]],
       [[0.112, 0.212, 0.312], [0.412, 0.512, 0.612], [0.712, 0.812, 0.912], [1.012, 1.112, 1.212]]]
      ]
c_array = np.array( c )
print(  c_array )
print( c_array.shape )
print( c_array[1, 0, 3, 1] )


## result
[[[[0.1   0.2   0.3  ]
   [0.4   0.5   0.6  ]
   [0.7   0.8   0.9  ]
   [1.    1.1   1.2  ]]

  [[0.11  0.21  0.31 ]
   [0.41  0.51  0.61 ]
   [0.71  0.81  0.91 ]
   [1.01  1.11  1.21 ]]]


 [[[0.12  0.22  0.32 ]
   [0.42  0.52  0.62 ]
   [0.72  0.82  0.92 ]
   [1.02  1.12  1.22 ]]

  [[0.112 0.212 0.312]
   [0.412 0.512 0.612]
   [0.712 0.812 0.912]
   [1.012 1.112 1.212]]]]
(2, 2, 4, 3)
1.12

   可视化上述的四维数据(字迹丑大家见谅,理解原理优先):

4. tensor的简单操作

4.1 numpy 中对tensor的操作

以三维tensor为例:

numpy.sum( tensor, axis ) numpy.mean( tensor, axis)

其中axis = -1是对最里面的一个维度操作。如numpy.sum( tensor, axis = -1 ), 即对第2维度进行操作,即对channel进行相加。

实例为:

import numpy as np
a = [[[1, 2, 3,], [4, 5, 6]], [[1.1, 2.1, 3.1], [4.1, 5.1, 6.1]]]
print( np.sum(a, axis=-1) )
print( np.sum(a, axis=0) )
print( np.sum(a, axis=1) )
print( np.sum(a, axis=2) )


## output
#axis = -1  ## channel
[[ 6.  15. ]
 [ 6.3 15.3]]

# axis = 0  ## height
[[ 2.1  4.1  6.1]
 [ 8.1 10.1 12.1]]

# axis = 1   ## width
[[5.  7.  9. ]
 [5.2 7.2 9.2]]

# axis = 2  ## channel
[[ 6.  15. ]
 [ 6.3 15.3]]

There may be some mistakes in this blog. So, any suggestions and comments are welcome!

  • 75
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值