Jeneratörlerde kategorik etiketler için sınıf ağırlıklarını jeneratör kullanarak ayarlama

Keras'ta dengesiz bir veri seti üzerinde çalışıyorum ve azınlık sınıfımdaki örneklere daha fazla ağırlık vermek istiyorum. fit() fonksiyonunun güzel bir sample_weight argümanı vardır, ancak verilerimin boyutu nedeniyle fit_generator() 'ı kullanmam gerekiyor.

fit_generator() has a class_weight argument, which seems useful for this purpose and is already discussed in Another question. However, in this case the labels are not one-hot-encoded/categorical and I could not find whether using class_weight also allows for categorical data.

Tek kodlu/kategorik etiketler için class_weight argümanı kullanabilir ve eğer öyleyse nasıl yapılır? Yoksa özel bir ağırlık kaybı fonksiyonuna başvurmalı mıyım?

2

1 cevap

Kategorik veriler için class_weight argümanı yerine sample_weight kullanmak en iyisidir. Bu, belirli bir sınıfa ait tüm örnekleri aynı ağırlıkta vererek yapılabilir. sample_weight , kategorik veriler için çalışır çünkü class_weight durumunda bir kategoriye (kategorik sınıf etiketleri için çalışmayan) karşılık gelen bir değer olarak numpy dizisini alır.

See: Keras sequential model methods

Ya bir düz (1D) Numpy dizisini aynı uzunlukta olarak geçirebilirsiniz.   giriş örnekleri (1: 1 ağırlık ve numuneler arasında eşleme) veya   geçici veri durumunda, şekil ile bir 2D dizi geçebilir (örnekler,   sequence_length), her zaman için farklı bir ağırlık uygulamak   her örnek. Bu durumda belirttiğinizden emin olmalısınız.   sample_weight_mode = "geçici" derleme ().

The other way, as you mentioned is using custom weighted loss function. A detailed discussion on it can be found here.

1
katma
Büyük veri boyutu için fit_generator yerine sample_weight içeren train_on_batch komutunu kullanabilirsiniz. Bakınız bu link .
katma yazar Janki Mehta, kaynak
sample_weight kullanmak gerçekten de güzel bir çözüm olacaktır, fit_generator işlevine sahip olmak maalesef bu seçeneği sağlamamaktadır.
katma yazar DGIB, kaynak