python - Keras - 自定义损失函数/访问张量的第 75 个百分位元素
问题描述
我正在尝试为 Keras 中的模型实现稍微修改的二元交叉熵损失函数。在 Keras 中,binary_crossentropy 定义为:
def binary_crossentropy(y_true, y_pred):
return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
我拥有的数据是分组的(即有一列指示 group1、group2 等),但每个组的行数不同(即 group1 有 52 个观察值,group2 有 101 个观察值等)。
理想情况下,我想找到每个组的平均二元交叉熵,并返回最大平均二元交叉熵(最大平均二元交叉熵,按组)。
使用组似乎没有任何开箱即用的解决方案,我也无法提出解决方案。关于观察属于哪个组的信息会丢失并且不会传递到 y_true 和 y_pred,我不确定 k-fold cv 将如何准确地改变作为 y_true 和 y_pred 传递的观察值/多少。如果有办法通过顺序模型保留组信息,那可能就是解决方案。代码将完成类似的事情:
def custom_loss(y_true, y_pred):
max_bc = []
for group in groups:
max_bc += [K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)]
return max_bc
如果上述方法不可行,另一种测量方法可能是张量的第 75 个百分位值。就像是:
def custom_loss(y_true, y_pred): return K.binary_crossentropy(y_true, y_pred)[len(y_true)*0.75]
但我确定这是错误的——我只是对 Keras 和 Tensorflow 不够熟悉,无法获得正确的代码。
编辑:我可能刚刚找到了一种方法来计算百分位数,但结果并不如预期......在第一部分获得洞察力仍然很棒。
def custom_loss(y_true, y_pred):
e = K.binary_crossentropy(y_true,y_pred)
return distributions.percentile(e, q=75.)
解决方案
推荐阅读
- github - 通过 travis ci 为 docusaurus 设置持续部署 - 使用哪些 github 范围?
- c++ - 在 C++ 中使用阶乘级数评估 sin 函数
- r - 有谁知道为什么 R 中的鼠标包在不同的方法上给我一个错误?
- c++ - X86 架构 - 使用 unsigned long long 设置向量大小
- java - 使用 Viewpager 显示来自网络的图像,但它没有显示给我,有人帮我解决这个问题
- javascript - 如何保存 JavaScript 输出并同时显示它们?
- android - 如何在我的gridview builder列表末尾添加“添加更多”按钮,我不断收到错误消息
- excel - 在 Excel 中发送 cmd 消息
- r - R逻辑回归 - 错误消息
- python - Pyinstaller python to .exe没有在命令行界面上显示任何输出