TensorFlow2.0 学习笔记 2.5:维度变换

TensorFlow2-维度变换

目录

一、TensorFlow2-维度变换
二、Outline(大纲)
三、图片视图
四、First Reshape(重塑视图)
五、Second Reshape(恢复视图)
六、Transpose(转置)
七、Expand_dims(增加维度)
八、Squeeze(挤压维度)

TensorFlow2-维度变换

Outline(大纲)

shape, ndim

reshape

expand_dims/squeeze

transpose

图片视图

[b, 28, 28] # 保存b张图片,28行,28列(保存数据一般行优先),图片的数据没有被破坏
[b, 28 * 28] # 保存b张图片,不考虑图片的行和列,只保存图片的数据,不关注图片数据的细节
[b, 2, 14*28] # 保存b张图片,把图片分为上下两个部分,两个部分具体多少行是不清楚的
[b, 28, 28, 1] # 保存b张图片,28行,28列,1个通道

First Reshape(重塑视图)

import tensorflow as tf

a = tf.random.normal([4, 28, 28, 3])

a.shape, a.ndim

(TensorShape([4, 28, 28, 3]), 4)

tf.reshape(a, [4, 784, 3]).shape  # 给出一张图片某个通道的数据,丢失行、宽的信息

TensorShape([4, 784, 3])

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

TensorShape([4, 784, 3])

tf.reshape(a, [4, 784*3]).shape  # 给出一张图片的所有数据,丢失行、宽和通道的信息

TensorShape([4, 2352])

tf.reshape(a, [4, -1]).shape

TensorShape([4, 2352])

Second Reshape(恢复视图)

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, 14, 56, 3]).shape

TensorShape([4, 14, 56, 3])

tf.reshape(tf.reshape(a, [4, -1]), [4, 1, 784, 3]).shape

TensorShape([4, 1, 784, 3])

first reshape:

images: [4,28,28,3]
reshape to: [4,784,3]

second reshape:

[4,784,3]  height:28,width:28  [4,28,28,3] √
[4,784,3]  height:14,width:56  [4,14,56,3] ×
[4,784,3]  width:28,height:28  [4,28,28,3] ×

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])

tf.transpose(a, perm=[0, 1, 3, 2]).shape  # 按照索引替换维度

TensorShape([4, 3, 1, 2])

a = tf.random.normal([4, 28, 28, 3])  # b,h,w,c

a.shape

TensorShape([4, 28, 28, 3])

tf.transpose(a, [0, 2, 1, 3]).shape  # b,2,h,c

TensorShape([4, 28, 28, 3])

tf.transpose(a, [0, 3, 2, 1]).shape  # b,c,w,h

TensorShape([4, 3, 28, 28])

tf.transpose(a, [0, 3, 1, 2]).shape  # b,c,h,w

TensorShape([4, 3, 28, 28])

Expand_dims(增加维度)

a:[classes, students, classes]

add school dim(增加学校的维度):

[1, 4, 35, 8] + [1, 4, 35, 8] = [2, 4, 35, 8]
a = tf.random.normal([4, 25, 8])

a.shape

TensorShape([4, 25, 8])

tf.expand_dims(a, axis=0).shape  # 索引0前

TensorShape([1, 4, 25, 8])

tf.expand_dims(a, axis=3).shape  # 索引3前

TensorShape([4, 25, 8, 1])

tf.expand_dims(a,axis=-1).shape  # 索引-1后

TensorShape([4, 25, 8, 1])

tf.expand_dims(a,axis=-4).shape  # 索引-4后,即左边空白处

TensorShape([1, 4, 25, 8])

Squeeze(挤压维度)

Only squeeze for shape = 1 dim(只删除维度为1的维度)

[4, 35, 8, 1] = [4, 35, 8]
[1, 4, 35, 8] = [14, 35, 8]
[1, 4, 35, 1] = [4, 35, 8]
tf.squeeze(tf.zeros([1,2,1,1,3])).shape

TensorShape([2, 3])

a = tf.zeros([1,2,1,3])

a.shape

TensorShape([1, 2, 1, 3])

tf.squeeze(a,axis=0).shape

TensorShape([2, 1, 3])

tf.squeeze(a,axis=2).shape

TensorShape([1, 2, 3])

tf.squeeze(a,axis=-2).shape

TensorShape([1, 2, 3])

tf.squeeze(a,axis=-4).shape

TensorShape([2, 1, 3])

这篇写的不好,有空重写!

你可能感兴趣的:(TensorFlow2.0,学习笔记,pytorch,人工智能,机器学习,深度学习,numpy)