我有一些数据可以用来挑选一支球队。团队中的每个玩家都可以从100个角色中选择一个。我为每个玩家创建了一个np.zeros(100),将我的整个选择权设置为1000 x 0s。然后我训练从第一个选择(全0)到最后一个选择的10个数据的子集,尽管整个数组为1000。输出数据是整个团队重复10次以匹配最终答案的结果。
在损失功能中,我想分别检查每个玩家的答案。
def player_loss(self, y_true, y_pred):
t0,t1,t2,t3,t4,t5,t6,t7,t8,t9 = tf.split(y_true, num_or_size_splits=10, axis=1)
p0,p1,p2,p3,p4,p5,p6,p7,p8,p9 = tf.split(y_pred, num_or_size_splits=10, axis=1)
这将第一名玩家平均分配给第十名玩家。现在,最后,我想获取每个玩家的categorical_crossentropy并确定损失。
top_k_ca = lambda yt,yp: categorical_crossentropy(yt,yp)
losses = [top_k_ca(t0,p0),
top_k_ca(t1,p1),
top_k_ca(t2,p2),
top_k_ca(t3,p3),
top_k_ca(t4,p4),
top_k_ca(t5,p5),
top_k_ca(t6,p6),
top_k_ca(t7,p7),
top_k_ca(t8,p8),
top_k_ca(t9,p9)]
return K.mean(tf.concat(losses, axis=0))
我不是专家,但是这种逻辑有效吗?我无法一次查看整个y_true数组,因为任何玩家都可以随时选择。那将是对整个决赛阵容的整体审视,自然不是我在寻找什么。
运行此命令时,很快我就损失函数得到了NaN。
谢谢