- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 Keras 训练期间更改我的 class_weight。
我使用了 fit_generator
和 Callback
方法,如下所示。
model.fit_generator(
decoder_generator(x_train, y_train),
steps_per_epoch=len(x_train),
epochs=args.epochs,
validation_data=decoder_generator(x_valid, y_valid),
validation_steps=len(x_valid),
callbacks=callback_list,
class_weight=class_weights,
verbose=1)
和
class Valid_checker(keras.callbacks.Callback):
def __init__(self, model_name, patience, val_data, x_length):
super().__init__()
self.best_score = 0
self.patience = patience
self.current_patience = 0
self.model_name = model_name
self.validation_data = val_data
self.x_length = x_length
def on_epoch_end(self, epoch, logs={}):
X_val, y_val = self.validation_data
y_predict, x_predict = model.predict_generator(no_decoder_generator(X_val, y_val), steps=len(X_val))
y_predict = np.asarray(y_predict)
x_predict = np.asarray(x_predict)
decoder_generator
和 no_decoder_generator
只是自定义生成器。
我想在每次纪元结束时更改类(class)权重。是否可以?那我该怎么办呢?
我的数据是不平衡数据,一类继续过拟合。
在 epoch 结束时,我想通过按类计算精度来增加精度较低的类的权重。
我该怎么办?
最佳答案
一次循环一个时期这样的简单方法怎么样?
for i in range(args.epochs):
class_weights = calculate_weights()
model.fit_generator(
decoder_generator(x_train, y_train),
steps_per_epoch=len(x_train),
epochs=1,
validation_data=decoder_generator(x_valid, y_valid),
validation_steps=len(x_valid),
callbacks=callback_list,
class_weight=class_weights,
verbose=1)
fit_generator
中的每个时期都没有直接使用不同类别权重的方法。您可以通过检查 model.stop_training
import numpy as np
from keras.models import Sequential
from keras.layers import Input, Dense
from keras.models import Model
from keras.callbacks import Callback
class Valid_checker(Callback):
def __init__(self):
super().__init__()
self.model = model
self.n_epoch = 0
def on_epoch_end(self, epoch, logs={}):
self.n_epoch += 1
if self.n_epoch == 8:
self.model.stop_training = True
def decoder_generator():
while True:
for i in range(10):
yield np.random.rand(10,5), np.random.randint(3,size=(10,3))
inputs = Input(shape=(5,))
outputs = Dense(3, activation='relu')(inputs)
model = Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
for i in range(10):
model.fit_generator(generator=decoder_generator(),
class_weight={0:1/3, 1:1/3, 2:1/3},
steps_per_epoch=10,
epochs=1,
callbacks=[Valid_checker()])
if model.stop_training:
break
关于python - 我可以在训练期间更改 class_weight 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55355170/
documentation中的措辞看起来 None 和“balanced_subsample”是等价的,但我想确保情况确实如此。 最佳答案 文档清楚地表明它们不等效: class_weight=Non
ValueError: class_weight must contain all classes in the data. The classes {1, 2, 3} exist in the da
我正在使用两个不同的分类器对相同的不平衡数据执行一些(二进制)文本分类。我想比较两个分类器的结果。 使用 sklearns 逻辑回归时,我可以选择设置 class_weight = 'balanced
我目前正在研究一个随机森林分类模型,其中包含 24,000 个样本,其中 20,000 个样本属于 class 0其中 4,000 个属于 class 1 。我做了一个train_test_split
我有一个不平衡的数据集,其中 200000 个描述属于 0 类,大约 10000 个描述属于 1 类。但是,在我的训练数据集中,我有相同数量的“正”和“负”样本,每个样本大约 8000 个。所以现在我
在使用 class_weight 解决我的多标签问题时遇到问题。也就是说,每个标签不是0就是1,但是每个输入样本有很多标签。 代码(带有用于 MWE 目的的随机数据): import tensorfl
我正在将 ScikitLearn 的随机森林应用于极度不平衡的数据集(比率为 1:10 000)。我可以使用 class_weigth='balanced' 参数。我看过它相当于欠采样。 但是,这种方
我想在 Keras 训练期间更改我的 class_weight。 我使用了 fit_generator 和 Callback 方法,如下所示。 model.fit_generator(
我的数据具有极度的类别不平衡。约99.99%的样本为阴性;积极因素(大致)平均分配给其他三个类别。我认为我正在训练的模型基本上一直在预测多数类(class)。出于这个原因,我正在尝试对类(class)
尝试让 class_weight 开始。我知道其余代码有效,只是 class_weight 给我错误: parameters_to_tune = ['min_samples_split':[2
我目前正在尝试改变随机森林分类器的阈值以绘制 ROC 曲线。我的印象是,对随机森林执行此操作的唯一方法是使用 class_weight 参数。我已经能够成功地做到这一点,提高和降低精确度、召回率、真阳
Keras 使用 class_weight 参数来处理不平衡的数据集。 这是我们可以在 doc 中找到的内容: Optional dictionary mapping class indices (i
尝试对大约 2500*~4000 个大型特征进行分类,并在训练数据中附上置信文档。 我尝试使用置信度值作为分类器的 class_weight 参数,但无法理解 class_weight 所需的字典格式
我有一个多标签数据(有些类有 2 个标签,有些类有 10 个标签),并且我的模型对于平衡值和无值过度拟合。为 class_weight 参数设置的最佳值是多少。 from sklearn.svm im
我对 sklearn 如何应用我们提供的类权重感兴趣。 documentation没有明确说明类权重的应用位置和方式。阅读源代码也没有帮助(似乎 sklearn.svm.liblinear 用于优化,
我的数据集已经有加权示例。在这个二元分类中,与第二类相比,我也有更多的第一类。 我可以同时使用 sample_weight 并在 model.fit() 函数中使用 class_weight 进一步重
谁能告诉我当数据集不平衡时在 Keras 中应用 class_weight 的最简单方法是什么? 我的目标中只有两个类。 谢谢。 最佳答案 fit() 函数的class_weight 参数是一个将类别
我想在 keras model.fit 中使用 class_weight 参数来处理不平衡的训练数据。通过查看一些文档,我了解到我们可以像这样传递一个字典: class_weight = {0 : 1
此问题已在其他论坛中提出,我尝试了他们的变体但无济于事:class_weight for imbalanced data - Keras how to set class-weights for im
在 TensorFlow 中,当在 fit_generator 中使用 class_weights 时,会导致训练过程不断消耗越来越多的 CPU RAM,直到耗尽。每个纪元后内存使用量都会逐步增加。请
我是一名优秀的程序员,十分优秀!