改变张量的形状函数:
tf.reshape(
tensor, # 输入的张量
shape, # 想要改变的形状
name=None # 操作的名称
)
这个操作不会改变tensor本身的形状,而是返回一个形状为shape,而值和tensor对应的张量。如果有一个张量a,想要把张量a变化形状,可以:a=tf.reshape(a,shape)
。shape是一个list,如果list有元素是-1,表示该维由系统自动计算,比如:
import tensorflow as tf
a = tf.constant([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
a1 = tf.reshape(a, [-1, 3]) # 形状是5,3
a2 = tf.reshape(a, [3, -1]) # 形状是3,5 #
print(a1)
print(a2)
获取张量的形状:
tf.shape(
input, # 输入
name=None, # 操作的名称
out_type=tf.int32 # 控制返回值的类型
)
返回一个一维的整型张量、list或者array,表示input的形状。比如在feed数据的时候,我们想要获取一次输入数据的量,只能用tf.shape(x)[0]来获得。
张量本身的属性函数返回形状。
xxx.get_shape()
只有张量才有的操作,返回的是一个tuple
类型,表示张量的维数。一个常用的属性是num_elements()
,用来返回元素的个数,这个个数可以是维数,也可是元素真正的个数,看代码理解:
import tensorflow as tf
a = tf.constant([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
sess = tf.Session()
print(a.get_shape()[0:1].num_elements()) # 2
print(a.get_shape()[1:2].num_elements()) # 5
print(a.get_shape()[0:2].num_elements()) # 10
sess.close()
关于tensorflow中张量形状的文档
num_elements()
是TennsorShape的一个属性,返回所有元素的个数。如果张量是不完整的,那么返回None
。