tf.shape()是获取张量的大小
import tensorflow as tf
import numpy as np
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]]) with tf.Session() as sess:
print(sess.run(tf.shape(a_array)))
print(sess.run(tf.shape(b_list)))
print(sess.run(tf.shape(c_tensor)))
x.get_shape().as_list()
x.get_shape(),只有tensor才可以使用这种方法,返回的是一个元组。
import tensorflow as tf
import numpy as np
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
print(c_tensor.get_shape())
print(c_tensor.get_shape().as_list()) with tf.Session() as sess:
print(sess.run(tf.shape(a_array)))
print(sess.run(tf.shape(b_list)))
print(sess.run(tf.shape(c_tensor)))
可见只能用于tensor来返回shape,但是是一个元组,需要通过as_list()的操作转换成list.
不是元组进行操作的话,会报错!
如果你在上面的代码上添加上a_array.get_shape()会报如下的错误:
print(a_array.get_shape())AttributeError: 'numpy.ndarray' object has no attribute 'get_shape'
下面强调一些注意点:
第一点:tensor.get_shape()返回的是元组,不能放到sess.run()里面,这个里面只能放operation和tensor;
第二点:tf.shape()返回的是一个tensor。要想知道是多少,必须通过sess.run()
a_array=np.array([[1,2,3],[4,5,6]])
b_list=[[1,2,3],[3,4,5]]
c_tensor=tf.constant([[1,2,3],[4,5,6]])
with tf.Session() as sess:
a_array_shape=tf.shape(a_array)
print("a_array_shape:",a_array_shape)
print("a_array_shape:",sess.run(a_array_shape)) c_tensor_shape=c_tensor.get_shape().as_list()
print("c_tensor_shape:",c_tensor_shape)
#print(sess.run(c_tensor_shape)) #报错
注释掉的那个报错如下:不是tensor或者是operation。