微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据形状 [5,4,3] 的张量生成 [1,1,1]?

如何解决如何根据形状 [5,4,3] 的张量生成 [1,1,1]?

我想应用 tf.tile 操作,例如tf.tile(A,[1,1,b]) 其中 A 的形状为 [5,4,3]。如何根据A生成[1,1]?然后我将 [1,1] 的第三个元素设置为 b,其中 b 是占位符。 这是我的代码,但不起作用,如何修复?

d = tf.shape(A)
for i in range(tf.rank(A)):   #wrong,tf.rank(A) as a tensor can't be here
    d[i] = 1
d[2] = b
result = tf.tile(A,d)

解决方法

最简单的解决方案可能是使用 tf.one_hot 直接构建您的 multiples 张量。

>>> b = 2
>>> tf.one_hot(indices=[b],depth=tf.rank(A),on_value=b,off_value=1)
<tf.Tensor: shape=(3,),dtype=int32,numpy=array([1,1,2],dtype=int32)>

或者,您可以使用 tf.ones_like 生成与作为参数传递的张量具有相同形状的 1 张量。

>>> A = tf.random.uniform((5,4,3))
>>> tf.shape(A)
<tf.Tensor: shape=(3,numpy=array([5,3],dtype=int32)>
>>> tf.ones_like(tf.shape(A))
<tf.Tensor: shape=(3,1],dtype=int32)>

请注意,在 tensorflow 中,您不能对张量进行项目分配(例如,d[2] = b 将不起作用)。要生成张量 [1,b],您可以使用 tf.concat:

>>> b = 2
>>> tf.concat([tf.ones_like(tf.shape(A)[:-1]),[b]],axis=0)
<tf.Tensor: shape=(3,dtype=int32)>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。