在Tensorflow中使用tf.expand_dims和tf.newaxis有什么区别?

时间:2018-08-09 01:15:17

标签: python tensorflow

嗨,我是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)

这3种方法之间是否有任何区别,例如在性能方面?
我应该使用哪种方法?

1 个答案:

答案 0 :(得分:4)

这三者之间并没有真正的区别,但有时其中一个可能更方便:

  • tf.expand_dims(a, 2):在您要添加一个尺寸且其索引为变量(例如,另一个TensorFlow操作或某些函数参数的结果)时方便。根据您的风格,您可能会发现它更具可读性,因为它清楚地表达了添加尺寸的意图。
  • a[:,:,tf.newaxis]:我个人经常使用它,是因为我觉得它可读(也许是因为我习惯于NumPy),尽管并非在每种情况下都如此。如果要添加多个尺寸(而不是多次调用tf.expand_dims),则特别方便。另外(很明显),如果您想切片并同时添加新尺寸。但是,它不适用于可变轴索引,并且如果您有很多尺寸,tf.expand_dims可能会减少混乱。
  • tf.reshape(a,(2,3,1)):就我个人而言,我很少或从未使用它仅添加尺寸,因为它要求我知道并指定所有(或除一个以外的所有尺寸)剩余尺寸,并且在阅读时可能会产生误导代码。但是,如果需要重塑形状并添加尺寸,通常会在同一操作中完成。