gpt4 book ai didi

python - 输入 'ref' 在构建 NodeDef 时传递了 int32 预期的引用类型

转载 作者:行者123 更新时间:2023-11-30 09:05:04 24 4
gpt4 key购买 nike

我想乘以2个张量,所以我在Keras中使用了lambda层,并使用目标2个张量作为lambda层的输入,如下

def get_col_att(tensors):

for i in range(num_samples):
global t
t=tf.assign(t,i)
x = tf.nn.embedding_lookup(tensors[0], t)
print("tensors[1]:",tensors[1])
y = tf.nn.embedding_lookup(tensors[1], t)
print("x shape",x.shape,"y shape",y.shape)
ab=tf.transpose(y)

Ecol=tf.reshape(tf.tensordot(x,ab,axes=1),[1,M,C])
if i==0:
all_col_attention=tf.Variable(initial_value=Ecol)
else:
all_col_attention=tf.concat([all_col_attention,Ecol],0)

print("all_col_attention",all_col_attention)
return all_col_attention

total_alpha_sel_np=Lambda(get_col_att)([Hq,cols_last_hidden])

但它给出了以下错误

Input 'ref' passed int32 expected ref type while building NodeDef

我找出了错误所在,它位于以下行

all_col_attention=tf.Variable(initial_value=Ecol)

也因为Ecol所以我用 y(2-d) 和张量 1 替换了 Ecol(3-d)。它适用于张量[1],但不适用于 y。以下是张量的形状

x 形状 (13, 80) y 形状 (12, 80)
tf.tensordot(x,ab,axes=1) 张量("lambda_42/Reshape:0", shape=(1, 13, 12), dtype=float32)
x 形状 (13, 80) y 形状 (12, 80)
tf.tensordot(x,ab,axes=1) 张量("lambda_42/Reshape_2:0", shape=(1, 13, 12), dtype=float32)
x 形状 (13, 80) y 形状 (12, 80)
tf.tensordot(x,ab,axes=1) 张量("lambda_42/Reshape_4:0", shape=(1, 13, 12), dtype=float32)
all_col_attention 张量("lambda_42/concat_1:0", shape=(3, 13, 12), dtype=float32)
x 形状 (13, 80) y 形状 (12, 80)
tf.tensordot(x,ab,axes=1) 张量("lambda_42/Reshape_6:0", shape=(1, 13, 12), dtype=float32)

请帮我解决这个问题:-(

最佳答案

正如我所见,问题不在于张量的形状。错误在于 lambda 层。由于训练和验证图的原因,Keras 中的 lambda 层调用该函数两次。

构建了两个图。一张用于训练。另一个用于验证。您不应该使用某些全局变量来保存某些内部状态。创建一个输出两个张量的自定义层。

Reference

关于python - 输入 'ref' 在构建 NodeDef 时传递了 int32 预期的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com