tf.shape(a)和a.get_shape()

本文详细介绍了在TensorFlow中如何使用tf.shape()和.get_shape()方法来获取张量的维度信息,并通过实例演示了这两种方法的区别及应用场景。此外,还对比了不同数据类型如tensor、list和numpy array在形状获取上的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tf.shape(a)中a 数据的类型可以是tensor, list, array,返回结果是一个tensor
a.get_shape()中a的数据类型只能是tensor,返回结果是一个元组(tuple)

import tensorflow as tf
import numpy as np
 
x=tf.constant([[1,2,3],[4,5,6]])
y=[[1,2,3],[4,5,6]]
z=np.arange(24).reshape([2,3,4])
 
sess=tf.Session()



x_shape=tf.shape(x)                   		#  x_shape 是一个tensor
y_shape=tf.shape(y)                    		#  <tf.Tensor 'Shape_2:0' shape=(2,) dtype=int32>
z_shape=tf.shape(z)                   		#  <tf.Tensor 'Shape_5:0' shape=(3,) dtype=int32>
print(x_shape)                              #结果:Tensor("Shape:0", shape=(2,), dtype=int32)
print(y_shape)                              #结果:Tensor("Shape:0", shape=(2,), dtype=int32)
print(z_shape)                              #结果:Tensor("Shape_2:0", shape=(3,), dtype=int32)
print(sess.run(x_shape))              		# 结果:[2 3]
print(sess.run(y_shape))              		# 结果:[2 3]
print(sess.run(z_shape))              		# 结果:[2 3 4]


x_shape=x.shape                   		
y_shape=y.shape                    		
z_shape=z.shape       #这句正确,只有array具有shape这个属性            		
print(x_shape)                          
print(y_shape)      #这句正确,结果是(2,3,4)
print(z)                      
print(z_shape)                          
print(sess.run(x_shape))              	
print(sess.run(y_shape))              
print(sess.run(z_shape))              	


x_shape=x.get_shape()       #返回的是一个元组 , 不能使用print(sess.run(x_shape))
print(x_shape)              #结果:(2,3)  
print(x_shape[0])           #结果: 2
print(x_shape.as_list())    #结果:[2,3]
print(x_shape.as_list()[0]) #结果: 2
y_shape=y.get_shape()       # AttributeError: 'list' object has no attribute 'get_shape'
z_shape=z.get_shape()       # AttributeError: 'numpy.ndarray' object has no attribute 'get_shape'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值