[英]Are there any alternate ways to apply class weights to tensorflow neural networks?
我目前正在嘗試創建一個帶有多標簽目標變量的 Tensorflow DNN model,雖然我的代碼到目前為止沒有任何問題,但我正在使用的數據集的不平衡性質導致了一些問題。
根據 Keras 文檔中的建議,我對 model 應用了初始偏差。我還嘗試在 model 編譯 function 中啟用 class 權重參數,這就是我卡住的地方
https://github.com/tensorflow/tensorflow/issues/41448
如 GitHub 鏈接所示,此方法似乎存在一個已知錯誤,而我嘗試創建解決方法的嘗試根本沒有成功。 對於創建解決方法的任何建議,我將不勝感激,因為老實說,我自己也不知所措。 當前正在運行 Tensorflow 2.4
您使用的是 TensorFlow 的稍舊版本。這在使用 TensorFlow 2.7 和 Keras 2.7 的多類數據集中對我有用:
from sklearn.utils.class_weight import compute_class_weight
class_weights = compute_class_weight(class_weight="balanced", classes=np.unique(y_train),
y=y_train)
model.fit(
...
class_weight=dict(enumerate(class_weights))
)
y_train
的值必須是[0, NUMBER_CLASSES - 1]范圍內的整數,此代碼才能正常工作。 您可以使用LabelEncoder完成此操作。
或者,您可以使用sample_weight
而不是class_weight
來完成同樣的事情(事實上, Keras 在內部將class_weight
轉換為sample_weight
)。 在這里您可以找到有關這些參數的文檔。
其他易於實施且有效的解決數據不平衡的方法是過采樣和欠采樣,它們與使用class_weight
具有類似的效果。 如果您在使用class_weight
或sample_weight
時遇到問題,您可以使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.