Python 在keras中的自定义损失函数中获取真实标签值
我刚刚为我的顺序keras模型实现了一个自定义损失函数。在损失函数中,我想得到Python 在keras中的自定义损失函数中获取真实标签值,python,tensorflow,deep-learning,keras,tensor,Python,Tensorflow,Deep Learning,Keras,Tensor,我刚刚为我的顺序keras模型实现了一个自定义损失函数。在损失函数中,我想得到y\u t的值,输入batch\u size的Tensor,并对这些值进行一些计算: def lossFunction(y_t, u): # 'y_t' shape is (batch_size, 500) # 'u' shape is (batch_size, 256) (output of last layer) y_t_temp = y_t[:,3:y_t.shape[1]] v
y\u t
的值,输入batch\u size
的Tensor
,并对这些值进行一些计算:
def lossFunction(y_t, u):
# 'y_t' shape is (batch_size, 500)
# 'u' shape is (batch_size, 256) (output of last layer)
y_t_temp = y_t[:,3:y_t.shape[1]]
vectors=[]
for record in K.get_value(y_t_temp):
# computeVector is a function that return np array of shape (500, 256) based on the input values
vectors.append(computeVector(record))
# the final 'vectors' shape should be (batch_size, 500, 256)
vectors=np.array(vectors)
vTens = K.variable(vectors)
u = tf.expand_dims(u, axis=K.ndim(u) if 1 == K.ndim(u) - 1 else K.ndim(u))
dotResult = K.batch_dot(u,vTens,axes=[1,2])
p = K.exp(dotResult)
p = tf.reshape(p, [batch_size,500])
sp = K.sum(p,axis=1)
sp = K.expand_dims(sp, axis=1)
sp = K.tile(sp,(1, 500))
soft = p/sp
soft=K.clip(soft, 0.0000001, 0.9999999)
obj = K.categorical_crossentropy(soft, y_t)
return obj
但是通过这个损失函数,我得到了这个错误:
'You must feed a value for placeholder tensor 'dense_3_target' with dtype float
[[Node: dense_3_target = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]'
我知道问题出在操作K.get\u value(y\u t\u temp)
中,但我需要获取值来计算标签记录的向量,正如您在for循环中看到的那样
我只想知道如何在损失函数中获得fedy\u t
值,或者如何以另一种方式实现此逻辑
我在y\u t
中保存额外信息的原因是,我想用这些信息生成向量
数组,用于序列数据的补料批次大小。我可以为所有列车数据在损失函数外生成向量
数组,并将其传递给损失函数,但问题是,损失函数每次都以列车数据的批量大小输入,批量大小记录是从列车数据随机生成的,正如我所知,我不知道如何为损失函数中输入的数据过滤向量数组,因此,我找到了这个解决方案,根据批量大小数据的一些额外信息,在损失函数中生成向量
数组,我发现除了将这些额外信息保存在y\u t
中之外没有其他方法,通过获得y\u t
的值,我可以处理我的问题。因此,我非常感谢是否有任何其他方法可以通过在损失函数中查找补料数据的索引来过滤序列数据的补料批次大小的向量
数组,或者以某种方式将相应的过滤器d向量
数组传递给损失函数
我非常感谢您的帮助或任何其他解决方案来实现我的逻辑。如果您不能将逻辑表示为计算图的一部分,那么它不太可能工作,因为keras会干运行该图,因此您将得到错误。也许你可以解释一下“这里的逻辑”意味着什么,我们可以帮助你将其表示为图表的一部分。我刚刚编辑了我的问题,并提到了完整的逻辑。如果你不能将逻辑表示为计算图表的一部分,那么它不太可能工作,因为keras会干运行图表,因此你会得到错误。也许你可以解释一下“这里的逻辑”意味着什么,我们可以帮助你将其表达为图表的一部分。我刚刚编辑了我的问题,并提到了完整的逻辑。