1.Tensor的变形
在TensorFlow中经常要用到Tensor的变形,尤其是当一个tensor作为全连接的输入的时候,要先将其拉成一个向量,这个时候就要用的tf.reshape函数,因为我们在训练的时候往往有多个数据同时进行训练,所以输入的Tensor一般都是有batch这个维度作为我们Tensor的第一维。举个例子,加入我们输入的tensor是4维的第一个维度是batch,然后后面是w,h和c(宽、高、通道数)要将其拉成一个向量就是:
reshape=tf.reshape(X,[-1,X.shape[1]*X.shape[2]*X.shape[3]])
这里-1就是先不管后面的维度确定后根据原始的X自动对齐,从我们的例子来看就是得到了batch,有些同学可能发现这么写不行,可以试下下面的写法
reshape=tf.reshape(X, [-1, X.get_shape().as_list()[1] *X.get_shape().as_list()[2] *X.get_shape().as_list()[3]])
其他类似的变形都可以这样处理
2.array转化成tensor
转化成tensor:tf.convert_to_tensor(arr)
import tensorflow as tf
import numpy as np
A=np.ones([3,4])
tensor_A = tf.convert_to_tensor(arr,name='A')
sess=tf.Session()
print(sess.run(tensor_A))
3.矩阵的转置
如果只有两个维度可以直接
x = tf.transpose(x)
如果有多个维度(>=3)的话:
tf.transpose(b, perm=[0, 2, 1])
可以类似上面这样,就可以实现原来的第二个和第三个维度的互换,其他以此类推 .
4.在某一维度上重复数据,有时候我们需要对数据进行扩展就是将某个数据重复几次作为新的数据进行操作:
A=np.asarray([[1,2,3,4],[5,6,7,8]])
print(A.shape)
A=np.reshape(A,[1,2,4])
B=A.repeat(3,axis=0)
B=np.reshape(B,[-1,4])
print(B.shape)
print(B)