TensorFLow2.0张量操作一

记录一下,tensorflow的复习和tensorflow2.0的学习,首先是看看我们最为常用的一些tensor的操作方式,先是总结成为了思维导图,然后根据思维导图,强调一些常用的api。

1、常规的张量基础操作

张量的一些基础的操作

下面就是一些实际使用的例子

1、创建Tensor

采用list或者numpy array的方式生成tensor

In [1]: import tensorflow as tf
In [2]: import numpy as np
In [3]: tf.convert_to_tensor([[1,1],[1,1]])
Out[3]:
<tf.Tensor: id=0, shape=(2, 2), dtype=int32, numpy=array([[1, 1],[1, 1]], dtype=int32)>
In [4]: tf.convert_to_tensor(np.ones([2,2]))
Out[4]:
<tf.Tensor: id=2, shape=(2, 2), dtype=float64, numpy=
array([[1., 1.],
       [1., 1.]])>

采用tf.ones、tf.zeros的方式生成,注意传入的shape。

In [5]: tf.ones([])
Out[5]: <tf.Tensor: id=4, shape=(), dtype=float32, numpy=1.0>

In [6]: tf.ones([1])
Out[6]: <tf.Tensor: id=8, shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>

In [7]: tf.ones([2,2,2])
Out[7]:
<tf.Tensor: id=12, shape=(2, 2, 2), dtype=float32, numpy=
array([[[1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.]]], dtype=float32)>

采用tf.ones_like、tf.zeros_like的方式创建tensor:

In [8]: t = tf.ones([2,2])
In [9]: tf.zeros_like(t)
Out[9]:
<tf.Tensor: id=17, shape=(2, 2), dtype=float32, numpy=
array([[0., 0.],
       [0., 0.]], dtype=float32)>

采用tf.fill的方式创建:

In [10]: tf.fill([2,2],9)
Out[10]:
<tf.Tensor: id=21, shape=(2, 2), dtype=int32, numpy=
array([[9, 9],
       [9, 9]], dtype=int32)>

随机的创建tensor,使用random下面的方法来完成我们的目的:

In [11]: tf.random.normal([3,3], mean=10, stddev=1)
Out[11]:
<tf.Tensor: id=28, shape=(3, 3), dtype=float32, numpy=
array([[10.522197,  9.101805, 10.785618],
       [10.089577, 11.056175, 10.859367],
       [ 8.939952, 10.882309, 10.458437]], dtype=float32)>

In [12]: tf.random.truncated_normal([3,3],mean=0,stddev=1)
Out[12]:
<tf.Tensor: id=35, shape=(3, 3), dtype=float32, numpy=
array([[ 0.27650222,  0.98030627, -0.08287273],
       [ 0.8523224 , -0.84964395, -0.30538195],
       [-0.8515796 ,  0.13293248,  1.4719163 ]], dtype=float32)>
In [13]: tf.random.uniform([3,3],minval=0,maxval=10)
Out[13]:
<tf.Tensor: id=6, shape=(3, 3), dtype=float32, numpy=
array([[0.17660737, 0.19122243, 9.849804  ],
       [4.9092007 , 6.591599  , 7.013088  ],
       [0.95211625, 8.508183  , 2.331909  ]], dtype=float32)>
2、索引

data = [classes, students, subjects]
基础的索引就不记录,主要是说明一下选取式的索引方式:

In [14]: a = tf.random.normal([4,20,6])
In [15]: a.shape
Out[15]: TensorShape([4, 20, 6])
# 选取第一个和第二个学校
In [16]: tf.gather(a,axis=0,indices=[0,1]).shape
Out[16]: TensorShape([2, 20, 6])
# 选取第一个学生和第二个学生
In [17]: tf.gather(a,axis=1,indices=[0,1]).shape
Out[17]: TensorShape([4, 2, 6])
# 选取第一个科目和第二个科目
In [18]: tf.gather(a,axis=2,indices=[0,1]).shape
Out[18]: TensorShape([4, 20, 2])
# 选取第一个学校第一个学生和第二个学校及其第二个学生
In [19]: tf.gather_nd(a,[[0,0],[1,1]]).shape
Out[19]: TensorShape([2, 6])
# 同上面的道理
In [20]: tf.gather_nd(a,[[0,0,0],[1,1,1]]).shape
Out[20]: TensorShape([2])

In [21]: tf.boolean_mask(a, mask=[True, True, False, False]).shape
Out[21]: TensorShape([2, 20, 6])

In [22]: tf.boolean_mask(a, mask=[True, True, False, False,True, False],axis=2).shape
Out[22]: TensorShape([4, 20, 3])
3、Broadcasting
In [11]: b.shape
Out[11]: TensorShape([4, 20, 6])

In [12]: (b + tf.random.normal([6])).shape
Out[12]: TensorShape([4, 20, 6])

In [13]: (b + tf.random.normal([4,1,6])).shape
Out[13]: TensorShape([4, 20, 6])

In [14]: (b + tf.random.normal([1,1,6])).shape
Out[14]: TensorShape([4, 20, 6])
4、维度变换
In [24]: a.ndim
Out[24]: 3
In [25]: tf.reshape(a,[4,-1]).shape
Out[25]: TensorShape([4, 120])
In [26]: tf.transpose(a)
Out[26]: TensorShape([6, 20, 4])

通过tf.expand_dims给tensor增加一个维度

In [27]: a.shape
Out[27]: TensorShape([4, 20, 6])
In [28]: tf.expand_dims(a,axis=0).shape
Out[28]: TensorShape([1, 4, 20, 6])
In [29]: tf.expand_dims(a,axis=-1).shape
Out[29]: TensorShape([4, 20, 6, 1])
In [30]: tf.expand_dims(a,axis=2).shape
Out[30]: TensorShape([4, 20, 1, 6])
In [31]: tf.expand_dims(a,axis=-2).shape
Out[31]: TensorShape([4, 20, 1, 6])

通过tf.squeeze来挤压到维度只为1的那个维度

In [32]: b = tf.random.normal([4,28,28,1])

In [33]: b.shape
Out[33]: TensorShape([4, 28, 28, 1])

In [34]: tf.squeeze(b).shape
Out[34]: TensorShape([4, 28, 28])
5、数学运算
In [35]: a = tf.fill([2,2], 1.)

In [36]: b = tf.reshape(tf.range(4,dtype=tf.float32),[2,2])

In [37]: a+b, a-b, a*b, b/a, b//a, b%a
Out[37]:
(<tf.Tensor: id=59, shape=(2, 2), dtype=float32, numpy=
 array([[1., 2.],
        [3., 4.]], dtype=float32)>,
 <tf.Tensor: id=60, shape=(2, 2), dtype=float32, numpy=
 array([[ 1.,  0.],
        [-1., -2.]], dtype=float32)>,
 <tf.Tensor: id=61, shape=(2, 2), dtype=float32, numpy=
 array([[0., 1.],
        [2., 3.]], dtype=float32)>,
 <tf.Tensor: id=62, shape=(2, 2), dtype=float32, numpy=
 array([[0., 1.],
        [2., 3.]], dtype=float32)>,
 <tf.Tensor: id=63, shape=(2, 2), dtype=float32, numpy=
 array([[0., 1.],
        [2., 3.]], dtype=float32)>,
 <tf.Tensor: id=64, shape=(2, 2), dtype=float32, numpy=
 array([[0., 0.],
        [0., 0.]], dtype=float32)>)
In [38]: tf.exp(a)
Out[38]:
<tf.Tensor: id=71, shape=(2, 2), dtype=float32, numpy=
array([[2.7182817, 2.7182817],
       [2.7182817, 2.7182817]], dtype=float32)>

In [39]: tf.pow(b,2)
Out[39]:
<tf.Tensor: id=74, shape=(2, 2), dtype=float32, numpy=
array([[0., 1.],
       [4., 9.]], dtype=float32)>

In [40]: tf.sqrt(b)
Out[40]:
<tf.Tensor: id=76, shape=(2, 2), dtype=float32, numpy=
array([[0.       , 1.       ],
       [1.4142135, 1.7320508]], dtype=float32)>

矩阵相乘:

In [41]: A = tf.random.normal([2,3])

In [42]: B = tf.random.normal([3,4])

In [43]: A@B
Out[43]:
<tf.Tensor: id=90, shape=(2, 4), dtype=float32, numpy=
array([[-0.9533348 ,  0.07129656, -0.22759368, -0.30643538],
       [-0.889043  ,  0.46086258,  1.4728254 , -1.2075386 ]],
      dtype=float32)>

In [44]: tf.matmul(A,B)
Out[44]:
<tf.Tensor: id=92, shape=(2, 4), dtype=float32, numpy=
array([[-0.9533348 ,  0.07129656, -0.22759368, -0.30643538],
       [-0.889043  ,  0.46086258,  1.4728254 , -1.2075386 ]],
      dtype=float32)>

参考资料:
1、https://study.163.com/course/courseMain.htm?courseId=1209092816&share=1&shareId=1355397
2、https://github.com/dragen1860/TensorFlow-2.x-Tutorials

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容