用一个热编码目标在Keras中实现RNN的类权重

时间:2018-12-06 15:54:09

标签: python tensorflow keras recurrent-neural-network

我一直在研究如何在RNN结构中实现类权重,其中模型输入14天的数据来预测第15天的目标,并且每天都有相同的功能。本质上,输入是一个大小为3d的numpy数组(样本大小,14,要素数量)。目标是简单的二进制分类“是或否”,但一个热编码。因此目标是“是”的[1 0]和“否”的[0 1]。

通常在非时间模型和非一个热编码响应中,keras在模型拟合函数中有一个简单的实现,您可以输入与权重相对应的字典。例如:

{“是”:1 “否”:5}

“否”的失误的权重是“是”的失误的5倍。

我读过您需要在时间要素发挥作用时使用样本权重,但我认为样本权重是对不同的时间步长(1至14天)进行不同的加权。最重要的是,我不确定如何处理热编码。

任何帮助将不胜感激,如果这太复杂了,我可能只是编写自己的损失函数并尝试这种方式。

谢谢。

1 个答案:

答案 0 :(得分:0)

对于一个热编码矢量,诀窍是使用sample_weight权衡每个样本的权重,就像加权一个类一样

import sklearn.utils.class_weight 

将class_weight字典传递给sample_weights= class_weight.compute_sample_weight(class_weight,y),它会根据该类为每个样本产生权重。这可以传递给keras model.fit(...,sample_weight=sample_weights)

如果您没有班级权重 您可以使用class_weight.compute_class_weight,将输出转换为字典,然后传递给compute_sample_weight以获取sample_weights向量