标签:tran ast sha 变换 灵活 mamicode 需要 转换 增加
(1)View视图,图片在内存中以行优先进行存储
(2)reshape,只是改变图片的一种理解方式,即view,没有改变图片的content,也就是原照片中像素的个数
①简单使用
1 a = tf.random.normal([4,28,28,3]) #view1 2 print(a.shape,a.ndim) #(4, 28, 28, 3) 4 3 4 b1 = tf.reshape(a,[4,784,3]) #输入一种新的理解方式,即view2。这里只关注像素的个数, 5 print(b1.shape) #(4, 784, 3) 6 7 b2 = tf.reshape(a,[4,-1,3]) # -1会自动计算原图片的像素的个数28*28,等同于b1的[4,784,3] 8 print(b2.shape) #(4, 784, 3) 9 10 b3 = tf.reshape(a,[4,784*3]) #新的方式view3,隐藏了通道的信息 11 print(b3.shape) #(4, 2352) 12 13 b4 = tf.reshape(a,[4,-1]) # -1自动计算783*3,等同于b3的[4,783*3] 14 print(b4.shape) # (4, 2352)
②灵活运用
1 a = tf.random.normal([4,28,28,3]) #view1 2 print(a.shape,a.ndim) #(4, 28, 28, 3) 4 3 4 b1 = tf.reshape(tf.reshape(a,[4,-1]),[4,28,28,3]) #tf.reshape(a,[4,-1])将原图片改成[4,28*28*3],然后继续变成[4,28,28,3] 5 print(b1.shape) # (4, 28, 28, 3) 6 7 b2 = tf.reshape(tf.reshape(a,[4,-1]),[4,14,56,3]) 8 print(b2.shape) # (4, 14, 56, 3) 9 10 b3 = tf.reshape(tf.reshape(a,[4,-1]),[4,1,784,3]) 11 print(b3.shape) # (4, 1, 784, 3)
1 a = tf.random.normal([4,3,2,1]) #view1 2 print(a.shape,a.ndim) #(4, 3, 2, 1) 4 3 4 b1 = tf.transpose(a) #默认全部转置 5 print(b1.shape) #(1, 2, 3, 4) 6 7 #如果希望只有某些维度进行转置,则需要指定参数,表示转换后的顺序号 8 b2 = tf.transpose(a,perm = [0,1,3,2]) 9 print(b2.shape) #(4, 3, 1, 2)
1 #增加维度 2 a = tf.random.normal([4,35,8]) 3 print(a.shape) #(4, 35, 8) 4 5 b1 = tf.expand_dims(a,axis=0) 6 print(b1.shape) #(1, 4, 35, 8) 7 8 b2 = tf.expand_dims(a,axis=3) 9 print(b2.shape) #(4, 35, 8, 1) 10 11 #减少维度,只能减掉shape = 1的维度 12 """ 13 如:[2,33,21,1] ——> [2,33,21] 14 [3,1,4,1,1] ——> [3,4] 15 """ 16 17 a = tf.zeros([1,2,1,1,3]) 18 print(a.shape) 19 20 b1 = tf.squeeze(a) #默认减去所有shape为1的维度 21 print(b1.shape) # (2, 3) 22 23 b2 = tf.squeeze(a,axis=[0,2]) #设定指定的维度 24 print(b2.shape) #(2, 1, 3)
张量在计算的时候,如果相应的维度的维数不够,需要对其进行扩张,tf.tile是在真实的数据上复制n次,而broadcasting只是维度扩张的一种手段,只对张量的某一个维度重复计算多次,没有真正的进行数据的复制。
1 # ①将b的维度自动进行扩张 2 a = tf.random.normal([4,32,32,3]) 3 print(a.shape) # (4, 32, 32, 3) 4 5 b = tf.random.normal([3]) 6 print(b.shape) #(3,) 7 8 c = a + b 9 print(c.shape) # (4, 32, 32, 3)
1 # ②维度转换,只能从低维度到高维度转换 2 a = tf.random.normal([4,1,1,1]) 3 print(a.shape) # [4,1,1,1] 4 5 #将b的维度扩张同a一样的维度 6 b = tf.broadcast_to(a,[4,32,32,3]) 7 print(b.shape) #(4, 32, 32, 3)
标签:tran ast sha 变换 灵活 mamicode 需要 转换 增加
原文地址:https://www.cnblogs.com/pengzhonglian/p/11907783.html