为了账号安全,请及时绑定邮箱和手机立即绑定

Keras自定义损失函数访问python全局变量的内部机制是什么?

Keras自定义损失函数访问python全局变量的内部机制是什么?

慕村9548890 2021-09-25 16:15:37
Keras 自定义损失函数是否接受全局 python 变量?我正在构建我自己的 Keras 自定义损失函数,它只接受y_true和y_pred作为参数。但损失函数非常复杂,它依赖于其他变量。目前在我的实现中,损失函数只是直接在同一个 python 代码脚本中使用全局变量.训练完模型后,如果我想用模型做预测,那么python环境中的那些全局变量就会被改变。我的问题是,我是否需要再次编译模型,以保证模型已使用这些外部全局变量的最新版本进行更新?Rlist=....def custom_loss(y_true,y_pred):    z = 0.0    #Rlist is the global variable     for j in Rlist:        z = z  +K.log(K.sum(K.exp(K.gather(y_pred,j[0])))) \        - K.log(K.sum(K.exp(K.gather(y_pred,j))))    z = -z     return z#below build the model and compile it with loss=custom_lossmodel=...model.compile(loss=custom_loss,....model.fit(x=train_x,y=train_y,...)#Rlist=...  update Rlist which is adaptive to test dataset#Do I need to recompile in the code below,or whether Rlist is updated#in custom_loss when it is called?model.predict(x=test_x,y=test_y,...)在我的损失函数中(实际上这是 cox 比例风险模型的损失函数),每个样本的损失值之间的损失不相加。 Rlist是我的 Keras 代码的 python 环境中的全局变量,我的问题是,在训练模型后,如果我Rlist为测试数据集更改Rlist此变量,Keras 会自动更新,或者Rlist在编译时使用该变量的旧版本构建计算图?有什么解释,如果我在损失函数中直接引用python环境中的一个全局变量,那么Tensorflow构建其计算图时会发生什么?我知道使用全局变量不是一种习惯做法。还推荐更好的建议。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

“我的 Keras 代码的 Python 环境”究竟是什么意思?如果在训练时将代码中的 Rlist 变量设置为 [1,2,3]。然后在预测/生产模式下将其更改为 [3,2,1],您的自定义损失将看到 [3,2,1] 变量。


我不确定你想要实现什么,我想这可以工作:A)用 RList 创建一个真正的 ENV_Variable B)用你的 RList 创建一个 JSON 文件(这样,你就可以使用你的 RList 数据服务器或云上的生产模式)。C)在你的代码中创建一个字典,比如


RList={

    'train': [1,2,3], 

    'test':[3,2,1], 

    'production':[4,5,6]

}


查看完整回答
反对 回复 2021-09-25
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信