tensorflow 使用内部Tensor的最后一位数进行Tensor填充

cu6pst1q  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(168)

我试图用最后一个内部Tensor填充一个2DTensor,使最后一个值成为新Tensor的整行。这可能是没有意义的,所以这里有一个给定tensora = [[1,2,3],[2,2,2],[4,3,4],[2,3,7]]的例子。新Tensor为[[3,3,3],[2,2,2],[4,4,4],[7,7,7]]。它是内部Tensor的最后一个值。
我尝试的是

tf.fill(input_layer.shape, input_layer[:,-1])

这会导致数值错误:
ValueError:调用层“tf.fill”(类型TFOpLambda)时遇到异常。尝试将“dims”转换为Tensor,但失败。错误:无法将部分已知的TensorShape(None,32,1024)转换为Tensor。调用层“tf.fill”接收的参数(类型TFOpLambda):
· dims=TensorShape([无,32,1024])
· value=tf.Tensor(shape=(1024,),dtype=float32)
· name=无
任何关于如何修复此错误或替代方法的帮助都将是很好的。这样做的目的是通过拥抱面部来获得告密者预训练模型的输入之一。我需要过去观察到的特征,我已经将其存储在最后一个维度的输出中。如果有一个更简单的方法来做到这一点,在过去观察到的特征是不同的地方,我可以改变位置。

nwsw7zdq

nwsw7zdq1#

tf.fill() API接受参数dims(Tensor形状)和value(标量Tensor),但您将value -作为数组给出,这导致了此错误。
所以使用循环的一种方法如下:

import tensorflow as tf
input_layer = tf.constant([[1,2,3],[2,2,2],[4,3,4],[2,3,7]])
print(input_layer)
print("Dims:",input_layer.shape)
print("Value:",input_layer[:,-1])

输出:

tf.Tensor(
[[1 2 3]
 [2 2 2]
 [4 3 4]
 [2 3 7]], shape=(4, 3), dtype=int32)
Dims: (4, 3)
Value: tf.Tensor([3 2 4 7], shape=(4,), dtype=int32)

使用For循环:

#tf.fill(input_layer.shape, input_layer[:,-1])
y=[]
for i in input_layer:
    x = tf.fill(i.shape, i[-1]).numpy() #as tensors are immutable
    y.append(x) 
z = tf.convert_to_tensor(y)
z

输出:

<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[3, 3, 3],
       [2, 2, 2],
       [4, 4, 4],
       [7, 7, 7]], dtype=int32)>

相关问题