一、个人的理解
假设标量(scalar)是一个特殊的张量;张量是张量的有序组合。定义张量为t,那么可以得到以下的理解:
如果我们用树(tree)型数据结构(data structure)描述张量,那么树上的节点就是张量。而树的根节点为t,树的内部节点为张量,树的叶子节点为标量。
(备注:内部节点就是非叶子节点)
二、思考
现在我们从张量的shape来思考。假设张量t的shape为(m, n, r),那么张量t的根节点为t本身,用于描述张量t的树的高度为3。当dim=0时,树高为0的节点(根节点)是m个张量的有序组合;当dim=1时,在树高为1的节点是n个张量的有序组合;当dim=2时,树高为2的节点是r个张量的有序组合,此时这r个张量都是标量,它们均为树的叶子节点。注意这里的节点就是张量,张量就是节点,不做区分。
如下图所示,shape=(3, 1, 4)的张量t的可视化。
三、推广
当张量的shape=(m, n, r, s,...)时,依然可以通过树的结构来对张量进行可视化描述。通过这样的可视化描述,你能够一层一层地看到张量实际上的样子,而每一个dim究竟是什么意思,shape中的每一个数又有着什么样的含义。
四、结束语
以上均是个人的理解。主要是由于网上看了一些其他人写的理解,觉得把张量讲得太复杂,尤其是画格子的那些,一层一层的嵌套,我人都懵了,看完了还是不能够明白什么是dim、shape的意思是什么,什么一维、二维、三维,甚至是四维五维,三维还好,但是四维五维是真的难想象!
我的灵感主要是源于算法与数据结构对于数据的描述。讲真的,其实我感觉张量的本质是一个向量。因为你看上图的那些叶子节点,是不是排起来像一个向量?
如果博客中有何冒犯,或者有何不对的地方,敬请留言,欢迎交流与批评指正!感谢你能够看到这里。