函數原型
函數接口:
tf.reshape(
tensor, shape, name=None
)
參數 | |
---|---|
tensor |
Tensor張量 |
shape |
Tensor張量,用於定義輸出張量的shape,組成元素類型爲 int32 或int64 . |
name |
可選參數,用於定義操作名稱. |
返回 |
---|
A Tensor . 輸出張量和輸入張量的元素類型相同。 |
用法
tf.reshape函數用於對輸入tensor進行維度調整,但是這種調整方式並不會修改內部元素的數量以及元素之間的順序,換句話說,reshape函數不能實現類似於矩陣轉置的操作。比如,對於矩陣[[1,2,3],[4,5,6]],如果使用reshape,將維度變爲[3,2], 其輸出結果爲:[[1,2],[3,4],[5,6]]
, 元素之間的順序並沒有改變:1之後還是2,如果是矩陣轉置操作,1之後應該爲4。
其內部實現可以理解爲:
tf.reshape(a, shape)
->tf.reshape(a, [-1])
->tf.reshape(a, shape)
現將輸入tensor,flatten鋪平,然後再進行維度調整(元素的順序沒有變化)
tf.reshape不會更改張量中元素的順序或總數,因此可以重用基礎數據緩衝區。這使得它快速運行,而與要運行的張量有多大無關。
如果需要修改張量的維度來實現對元素重新排序,需要使用tf.transpose。
總結
關於tf.reshape函數我們需要知道的是:
- 函數用於張量維度調整,但是不會修改內部元素的數量以及相對順序
- shape中-1表示這個維度的大小,程序運行時會自動計算填充(因爲變換前後元素數量不變,我們可以根據其他維度的大小,最終確定-1這個位置應該表示的數字)
- 如果需要通過修改內部元素的存儲順序以實現維度調整,需要使用tf.transpose函數