百度了好久,没有找到与sample_weight相关的博客,于是自己摸索一下。
sample_weight是keras中的fit的参数,中文文档介绍如下:
简单点的解释如下:参考https://blog.csdn.net/weixin_40755306/article/details/82290033#commentBox
sample_weight的作用就是为数据集中的数据分配不同的权重。
我的例子是要将数据集的数据分为三类,用0,1,2代表这三类,我这里想为0分配权重0.3,为1分配权重1,为2分配权重2.。
我的数据是存储在csv文件中的,我提取出标签列表,标签列表的内容是0,1,2的集合,列表名称为y_train。我用下面代码生成一个权重的列表:
sample_weights=[]
for sw in range(len(y_train)):
if y_train[sw]==0:
sample_weights.append(0.3)
if y_train[sw]==1:
sample_weights.append(1)
if y_train[sw]==2:
sample_weights.append(2)
sample_weights=np.array(sample_weights)
当标签为0时, sample_weights添加0.3,当标签为1时, sample_weights添加1,当标签为2时, sample_weights添加2。
这里记得不要漏了最后一行,将列表转化为numpy数组。因为sample_weight只能是numpy数组。
创建好数组之后,下一步是要在compile中添加一个参数,先看看是添加哪个参数:
这里的sample_weight_mode分为两种形式,如果你的权重形式是像我这样的,就是1D,那sample_weight_mode就设置为None。2D的形式还没试过,但如果用2D形式,那sample_weight_mode就要设置为sample_weight_mode=‘temporal’ 。
compile设置完就要设置fit了,我的模型有两个输出,但是我只想设置分类输出,我这里的分类输出层命名为’classifier’。那就在fit中添加一个参数:
sample_weight={'classifier' : sample_weights}
sample_weights是我们上面定义的数组。
这样便可简单实现对数据的加权。