我想知道为使用tf.data
API 构建的大型数据集计算类权重的最佳方法。考虑有关处理不平衡数据集的官方 TensorFlow 教程 - https://www.tensorflow.org/tutorials/structured_data/imbalanced_data。
如果我要将它缩放到一个大小适中的图像数据集,那么我计算类权重、计算初始偏差等的策略应该是什么?
我想知道为使用tf.data
API 构建的大型数据集计算类权重的最佳方法。考虑有关处理不平衡数据集的官方 TensorFlow 教程 - https://www.tensorflow.org/tutorials/structured_data/imbalanced_data。
如果我要将它缩放到一个大小适中的图像数据集,那么我计算类权重、计算初始偏差等的策略应该是什么?
如果按类权重表示要在 model.fit 中使用的字典,则下面的代码将返回类权重字典。
import numpy as np
def class_weight_calc(class_id_list, class_freq_list):
class_weight={}
total=0
for num in class_freq_list:
total += num
smallest=np.Inf
for klass, count in zip(class_id_list, class_freq_list):
class_weight[klass]=total/count
if class_weight[klass]<smallest:
smallest=class_weight[klass]
for c in class_id_list:
class_weight[c]=class_weight[c]/smallest
return class_weight
注意 class_id_list 是您的类索引列表。Class_freq_list 是每个类有多少样本的对应列表。例如,如果您有 3 个类,则 class_id_list=[0,1,2]。如果类别 0 有 10 个样本,类别 1 有 20 个样本,类别 2 有 40 个样本,则 Class_freq_list=[10,20,40]。使用这些值,函数将返回 class_weight={0:4.0, 1:2.0, 2:1.0}