tensorflow 2.0 基础操作 之 维度变换

3.4 维度变换

tf.shape, tf.ndim

a = tf.random.normal([4, 28, 28, 3])
a.shape   # TensorShape([4, 28, 28, 3])
a.ndim   # 4 (int)

tf.reshape

a = tf.random.normal([4, 28, 28, 3])
a.shape   # TensorShape([4, 28, 28, 3])
a.ndim   # 4

tf.reshape(a, [4, 28*28, 3]).shape   #  TensorShape([4, 784, 3])
tf.reshape(a, [4, -1, 3]).shape   # TensorShape([4, 784, 3])	

tf.reshape(a, [4, 784*3]).shape   # TensorShape([4, 2352])
tf.reshape(a, [4, -1]).shape   # TensorShape([4, 2352])

# Reshape is flexible
tf.reshape(tf.reshape(a, [4, -1]),[4, 28, 28, 3]).shape   # TensorShape([4, 28, 28, 3])
tf.reshape(tf.reshape(a, [4, -1]),[4, -1, 3]).shape   # TensorShape([4, 784, 3])	

Reshape could lead to potential bugs!

images: [4, 28, 28, 3]
[b, h, w, 3]
reshape to: [4, 784, 3]
[b, pixel, 3]
[4, 784, 3] ℎ???ℎ?: 28, ????ℎ: 28 [4, 28, 28, 3]
[4, 784, 3] ℎ???ℎ?: 14, ????ℎ: 56 [4, 14, 56, 3]
[4, 784, 3] ????ℎ: 28, ℎ???ℎ?: 28 [4, 28, 28, 3]
 

tf.transpose

a = tf.random.normal([4, 3, 2, 1])
a.shape   # TensorShape([4, 3, 2, 1])
tf.transpose(a).shape   # TensorShape([1, 2, 3, 4])
a = tf.random.normal([4, 28, 28, 3]) 
a.shape   # TensorShape([4, 28, 28, 3])
tf.transpose(a, perm=[0,3,1,2]).shape    # TensorShape([4, 3, 28, 28])
# tensorflow tensor to pytorch tensor

tf.expand_dim

  • a: [classes, students, classes]
    • [4, 35, 8]
  • add school dim
  • [1, 4, 35, 8] + [1, 4, 35, 8]
  • [2, 4, 35, 8]

在这里插入图片描述

a = tf.ones([4,35,10])
a.shape   # TensorShape([4, 35, 10])
tf.expand_dims(a, axis=0).shape  # front   TensorShape([1, 4, 35, 10])
tf.expand_dims(a, axis=-1).shape  # behind   TensorShape([4, 35, 10, 1])
tf.expand_dims(a, axis=-2).shape  # behind   TensorShape([4, 35, 1, 10])

tf.squeeze

  • Only squeeze for shape=1 dim

  • [4, 35, 8, 1]

  • [1, 4, 35, 8]

  • [1, 4, 35, 1]

a = tf.ones([1,4,1,35,1,10])
tf.squeeze(a).shape   # # TensorShape([4, 35, 10])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值