目录

* TensorFlow2-维度变换
<https://www.cnblogs.com/nickchen121/p/10841062.html#tensorflow2-维度变换>
* Outline(大纲) <https://www.cnblogs.com/nickchen121/p/10841062.html#outline大纲>
* 图片视图 <https://www.cnblogs.com/nickchen121/p/10841062.html#图片视图>
* First Reshape(重塑视图)
<https://www.cnblogs.com/nickchen121/p/10841062.html#first-reshape重塑视图>
* Second Reshape(恢复视图)
<https://www.cnblogs.com/nickchen121/p/10841062.html#second-reshape恢复视图>
* Transpose(转置)
<https://www.cnblogs.com/nickchen121/p/10841062.html#transpose转置>
* Expand_dims(增加维度)
<https://www.cnblogs.com/nickchen121/p/10841062.html#expand_dims增加维度>
* Squeeze(挤压维度)
<https://www.cnblogs.com/nickchen121/p/10841062.html#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])

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信