歡迎您光臨本站 註冊首頁

在TensorFlow中實現矩陣維度擴充套件

←手機掃碼閱讀     sl_ivan @ 2020-06-12 , reply:0

一般TensorFlow中擴充套件維度可以使用tf.expand_dims()。近來發現另一種可以直接運用取資料運運算元[]就能擴充套件維度的方法。

用法很簡單,在要擴充套件的維度上加上tf.newaxis就行了。

  foo = tf.constant([[1,2,3], [4,5,6], [7,8,9]])  print(foo[tf.newaxis, :, :].eval()) # => [[[1,2,3], [4,5,6], [7,8,9]]]  print(foo[:, tf.newaxis, :].eval()) # => [[[1,2,3]], [[4,5,6]], [[7,8,9]]]  print(foo[:, :, tf.newaxis].eval()) # => [[[1],[2],[3]], [[4],[5],[6]],[[7],[8],[9]]]

 

參考:

https://tensorflow.google.cn/api_docs/python/tf/Tensor?hl=en#__getitem__

補充知識:tensorflow 利用expand_dims和squeeze擴充套件和壓縮tensor維度

在利用tensorflow進行文字挖掘工作的時候,經常涉及到維度擴充套件和壓縮工作。比如對文字進行embedding操作完成之後,若要進行卷積操作,就需要對embedded的向量擴充套件維度,將[batch_size, embedding_dims]擴充套件成為[batch_size, embedding_dims, 1],利用tf.expand_dims(input, -1)就可實現,反過來用squeeze(input, -1)或者tf.squeeze(input)也可以把最第三維去掉。

tf.expand_dims()
 tf.squeeze()
 

tf.expand_dims()
 

tf.expand_dims(input, axis=None, name=None, dim=None)

在第axis位置增加一個維度.

給定張量輸入,此操作在輸入形狀的維度索引軸處插入1的尺寸。 尺寸索引軸從零開始; 如果您指定軸的負數,則從最後向後計數。

如果要將批次維度新增到單個元素,則此操作非常有用。 例如,如果您有一個單一的形狀[height,width,channels],您可以使用expand_dims(image,0)使其成為1個影象,這將使形狀[1,高度,寬度,通道]。

例子

  # 't' is a tensor of shape [2]  shape(expand_dims(t, 0)) ==> [1, 2]  shape(expand_dims(t, 1)) ==> [2, 1]  shape(expand_dims(t, -1)) ==> [2, 1]  # 't2' is a tensor of shape [2, 3, 5]  shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]  shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]  shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

 

tf.squeeze()

tf.squeeze(input, axis=None, name=None, squeeze_dims=None)

直接上例子

  # 't' is a tensor of shape [1, 2, 1, 3, 1, 1]   shape(squeeze(t)) ==> [2, 3]  # 't' is a tensor of shape [1, 2, 1, 3, 1, 1]   shape(squeeze(t, [2, 4])) ==> [1, 2, 3, 1]

 

   


[sl_ivan ] 在TensorFlow中實現矩陣維度擴充套件已經有292次圍觀

http://coctec.com/docs/program/show-post-238188.html