嗨,我是Tensorflow的新手.
我想改变Tensor的维度,我找到了3种类型的方法来实现它,如下所示:
a = tf.constant([[1,2,3],[4,5,6]]) # shape (2,3)
# change dimention of a to (2,3,1)
b = tf.expand_dims(a,2) # shape(2,3,1)
c = a[:,:,tf.newaxis] # shape(2,3,1)
d = tf.reshape(a,(2,3,1)) # shape(2,3,1)
Run Code Online (Sandbox Code Playgroud)
3种方法之间是否有任何差异,例如在性能方面?
我应该使用哪种方法?
jde*_*esa 12
三者之间没有真正的区别,但有时其中一个可能更方便:
tf.expand_dims(a, 2)
:当你想添加一个维度并且它的索引是可变的(例如另一个TensorFlow操作的结果,或者某个函数参数)时,很方便。根据您的风格,您可能会发现它更具可读性,因为它清楚地表达了添加维度的意图。a[:,:,tf.newaxis]
:我个人经常使用它,因为我觉得它可读(也许是因为我从 NumPy 习惯了它),尽管不是在所有情况下。如果要添加多个维度(而不是tf.expand_dims
多次调用),则特别方便。另外(显然)如果您想同时切片并添加新尺寸。但是,它不适用于可变轴索引,如果您有很多维度,则tf.expand_dims
可能不那么令人困惑。tf.reshape(a,(2,3,1))
:我个人很少或从不使用它来仅添加维度,因为它需要我知道并指定所有(或除一个之外的所有)剩余维度大小,并且在阅读代码时可能会产生误导。但是,如果我需要重塑和添加维度,我通常会在同一个操作中进行。 归档时间: |
|
查看次数: |
1062 次 |
最近记录: |