tensorflow之中的tf.shape()和get_shape()函数的区别

tensorflow之中的get_shape()函数好tf.shape()函数输出的形状有很大的区别
这里我们以一个小例子来说明具体用法的不同

input_ids = keras.layers.Input(shape=(None,),dtype='int32',name="token_ids")
input_shape = input_ids.get_shape()
print('input_shape1 = ')
print(input_shape)
maxlen = input_shape[1]
print(maxlen==None)
input_shape = tf.shape(input=input_ids)
print('input_shape2 = ')
print(input_shape)
maxlen = input_shape[1]
print(maxlen==None)

对应的输出内容如下:
输出内容可以看出get_shape()函数和tf.shape()函数的区别:get_shape()函数输出的内容为一个list类型的数组,而tf.shape()输出的为一个tensor类型的数据
所以这里的

maxlen = input_shape[1]

在get_shape()之后从数组中直接得到对应的None的值,而

maxlen = input_shape[1]

得到的是一个对应的tensor值

KerasTensor(type_spec=TensorSpec(shape=(), dtype=tf.int32, name=None), inferred_value=[None], name='tf.__operators__.getitem_1/strided_slice:0', description="created by layer 'tf.__operators__.getitem_1'")

所以这里tensor判断是否为None的时候就会报false。
但是在

output_shape = [batch_size,seq_len,
               self.num_attention_heads,self.size_per_head]
output_tensor = K.reshape(input_tensor,output_shape)

这里面如果放入常规的None,None的时候,K.reshape操作会报错,所以这里放入的内容必须为KerasTensor类型的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值