Python 什么时候使用keras中的样本重量合适?
根据这一点,我了解到Python 什么时候使用keras中的样本重量合适?,python,tensorflow,keras,Python,Tensorflow,Keras,根据这一点,我了解到keras中的class\u weight在训练过程中应用了加权损失,而sample\u weight则在样本方面做了一些事情,如果我对所有训练样本没有同等的信心 所以我的问题是 验证过程中的损失是按等级权重加权的,还是仅在培训过程中加权的 我的数据集有两个类,实际上我没有严重的不平衡的类分布。比率约为1.7:1。是否有必要使用class_weight来平衡损耗,甚至使用过采样?将稍微不平衡的数据保留为通常的数据集处理,可以吗 Li >我可以简单地考虑样本权重>代码>作为给
keras
中的class\u weight
在训练过程中应用了加权损失,而sample\u weight
则在样本方面做了一些事情,如果我对所有训练样本没有同等的信心
所以我的问题是
等级权重加权的,还是仅在培训过程中加权的
class_weight
来平衡损耗,甚至使用过采样?将稍微不平衡的数据保留为通常的数据集处理,可以吗class_重量
只会影响训练过程中的损耗。我本人对理解在测试和培训期间如何处理课堂和样本重量很感兴趣。看看keras github回购协议和度量和损失代码,似乎损失或度量都不受它们的影响。打印的值很难在训练代码(如model.fit()
及其相应的tensorflow后端训练函数)中跟踪。所以我决定编写一个测试代码来测试可能的场景,请参见下面的代码。结论是class_weight
和sample_weight
只影响训练损失,对任何指标或验证损失都没有影响。有点令人惊讶,因为val\u sample\u weights
(您可以指定)似乎什么都不做(?)
焦点损失
<代码>焦点损失减少采样过度/不足的需要。不幸的是,Focal loss
在keras中还不是内置的inn功能,但可以手动编程sample\u weight
有两个原因。1、训练数据具有某种测量不确定度,如果已知,可以使用这种不确定度对准确数据进行加权,而不是对不准确的测量进行加权。或者,我们可以比旧数据更重视新数据,迫使模型更快地适应新行为,而不忽略有价值的旧数据类权重
和样本权重
的代码,同时保持模型和其他一切静止
将tensorflow导入为tf
将numpy作为np导入
数据大小=100
输入大小=3
等级=3
x\u train=np.random.rand(数据大小、输入大小)
y_train=np.random.randint(0,类,数据大小)
#样本重量序列=np.rand.rand(数据大小)
x_val=np.random.rand(数据大小、输入大小)
y_val=np.random.randint(0,类,数据大小)
#样本重量=np.random.rand(数据大小)
输入=tf.keras.layers.Input(形状=(输入大小))
pred=tf.keras.layers.density(类,activation='softmax')(输入)
模型=tf.keras.models.model(输入=输入,输出=预测)
损失=tf.keras.loss.sparse\u分类\u交叉熵
度量=tf.keras.metrics.sparse\u分类精度
compile(loss=loss,metrics=[metrics],optimizer='adam')
#将模型设置为静态,以便我们可以在不同场景之间进行比较
对于model.layers中的图层:
layer.trainable=错误
#基本模型无权重(与无类权重的结果相同)
#模型拟合(x=x_序列,y=y_序列,验证数据=(x_val,y_val))
类_权重={0:1,1:1,2:1.}
模型拟合(x=x\u序列,y=y\u序列,类权重=类权重,验证数据=(x\u val,y\u val))
#哪些产出:
>损失:1.1882-稀疏分类精度:0.3300-val损失:1.1965-val稀疏分类精度:0.3100
#将类权重更改为零,以检查受影响的损失和度量
类_权重={0:0,1:0,2:0}
模型拟合(x=x\u序列,y=y\u序列,类权重=类权重,验证数据=(x\u val,y\u val))
#哪些产出:
>损失:0.0000e+00-稀疏分类精度:0.3300-瓦尔分类精度:1.1945-瓦尔分类精度:0.3100
#将样本权重更改为零,以检查受影响的损失和度量
样本重量系列=np.零(100)
样本重量=np.零(100)
模型拟合(x=x_序列,y=y_序列,样本重量=样本重量_序列,验证数据=(x_val,y_val,样本重量_val))
#哪些产出:
>损失:0.0000e+00-稀疏分类精度:0.3300-瓦尔分类精度:1.1931-瓦尔分类精度:0.3100
使用重量和不使用重量之间存在一些小偏差