维度变换的意义
- 维度变换的物理意义:用于将数据转换为另一种理解方式,如有4张28x28的图片RGB三通道,初始数据维度为[4,28,28,3],是按行和列来理解图片。通过维度变换来改变为[4,28*28,3],是按照像素来理解图片。
- 维度变换要保证改变维度之后的数据与原数据总量一致且被充分利用
维度变换的方法
-
tf.reshape函数的使用:reshape函数的基本语法为 tf.reshape(a,[4,784,3]) 其中a为需要进行维度变换的数据,[]中的内容为改变后的维度,并且tf.reshape函数也支持嵌套使用
-
tf.reshape函数的注意:在进行维度变换后,如果想要恢复为原来或之前某一步的数据,则必须注意保留之前的content信息(即之前每个维度的含义,大小,名称)。如将[4,28*28,3]恢复时,不指定行列大小,则可能恢复为[4,8,98,3]这与原图片不符,为指定名称含义,如颠倒列和行,则会导致图片的翻转
维度变换中改变content(转置)的方法
-
tf中的转置:tf中的转置是对每个维度轴(axis)顺序进行改变
-
tf.transpose函数的使用:tf.transpose函数的基本语法为tf.transpose(a,perm=[0,1,3,2]) 其中a为原来的数据,perm后[]中的数据为改变后的维度顺序,即后面四个数表示原来第一个维度换位第一个维度,原来第二个维度换位第二个维度,原来第三个维度换位第四个维度,原来第四个维度换位第三个维度。默认perm为维度逆序(同线代中的转置)
-
改变content的意义:用于将数据换为易处理的形式,如tf中的数据格式为[b,h,w,c]而pytorch的数据格式[b,c,h,w],也可以用于图像的翻转等
增加减少维度的方法
- 增加减少维度的意义:如果用一组[4,35,8]的数据来表示四个班级35个学生的8门课成绩,想要增加一个学校的信息就需要增加一个维度,之后想要去掉这个信息就需要减少一个维度
- 增加维度的方法(tf.expand_dims函数的用法):使用tf.expand_dims函数来增加某个维度,tf.expand_dims函数的基本语法为tf.expand_dims(a,axis=x) 其中a为原来的数据,x代表增加维度的位置(即具体在第几个维度上增加维度)
其中axis=的数可以是正也可以是负
如果是正的话,其中0代表插入在最左侧,1代表插入在0和1维度之间,以此类推
如果是负的话,其中-1代表插入在最右侧,-2代表插入在最后一个和倒数第二个维度之间,以此类推
- 维度减少的方法(tf.squeeze函数的用法):使用tf.squeeze函数来减少某个维度,注意减少的维度必须是1(值为1,不是第一个维度)。tf.squeeze函数的基本语法为tf.squeeze(a,axis=x),其中a为原来的数据,x代表减少维度的位置(即具体在第几个维度上减少维度)
其中axis=的数可以是正也可以是负
如果是正的话,其中0代表删除第0个维度,1代表删除第1个维度,以此类推
如果是负的话,其中-1代表删除最后一个维度,-2代表删除倒数第二个维度,以此类推
如果不写具体维度的话,默认删除所有为1的维度(值为1,不是第一个维度)