ホームページ > 記事 > テクノロジー周辺機器 > 画像分類におけるクラスの不均衡の問題
画像分類におけるカテゴリの不均衡の問題、特定のコード例が必要です
要約: 画像分類タスクでは、データセット内のカテゴリの不均衡が発生する可能性があります。 , 一部のカテゴリには、他のカテゴリよりもはるかに多くのサンプルがあります。このクラスの不均衡は、モデルのトレーニングとパフォーマンスに悪影響を与える可能性があります。この記事では、クラスの不均衡問題の原因と影響について説明し、問題を解決するための具体的なコード例をいくつか示します。
クラスの不均衡の問題は、モデルのトレーニングとパフォーマンスに悪影響を及ぼします。まず、一部のカテゴリではサンプル数が少ないため、モデルがこれらのカテゴリを誤って判断する可能性があります。たとえば、2 分類問題では、2 つのカテゴリのサンプル数はそれぞれ 10 と 1000 です。モデルが学習を行わず、すべてのサンプルをより多くのサンプル数を持つカテゴリとして直接予測した場合、精度は次のようになります。非常に高いですが、実際にはサンプルは効果的に分類されていません。第 2 に、サンプル分布の不均衡により、モデルがサンプル数の多いカテゴリの予測に偏り、他のカテゴリの分類パフォーマンスが低下する可能性があります。最後に、カテゴリ分布の不均衡により、少数派カテゴリに対するモデルのトレーニング サンプルが不十分になり、学習されたモデルの少数派カテゴリに対する汎化能力が低下する可能性があります。
アンダーサンプリングとは、各カテゴリのサンプル数が近くなるように、サンプル数が多いカテゴリからいくつかのサンプルをランダムに削除することを指します。この方法はシンプルで簡単ですが、サンプルを削除すると一部の重要な特徴が失われる可能性があるため、情報が失われる可能性があります。
オーバーサンプリングとは、各カテゴリのサンプル数のバランスを整えるために、サンプル数が少ないカテゴリから一部のサンプルをコピーすることを指します。この方法ではサンプル数を増やすことができますが、サンプルをコピーするとモデルがトレーニング セットに過剰適合し、汎化能力が低下する可能性があるため、過剰適合の問題が発生する可能性があります。
重み調整とは、モデルがサンプル数の少ないカテゴリにより多くの注意を払うように、損失関数内のさまざまなカテゴリのサンプルに異なる重みを与えることを指します。この方法は、追加のサンプルを導入することなく、クラスの不均衡の問題を効果的に解決できます。具体的なアプローチは、サンプル数が少ないカテゴリの重みが大きくなるように重みベクトルを指定して、損失関数内の各カテゴリの重みを調整することです。
以下は、PyTorch フレームワークを使用したコード例で、重み調整メソッドを使用してクラスの不均衡の問題を解決する方法を示しています。
import torch import torch.nn as nn import torch.optim as optim # 定义分类网络 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 100) self.fc2 = nn.Linear(100, 10) def forward(self, x): x = x.view(-1, 784) x = self.fc1(x) x = self.fc2(x) return x # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss(weight=torch.tensor([0.1, 0.9])) # 根据样本数量设置权重 optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 2000 == 1999: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training')
上記のコードでは、torch を使用しています。 tensor([ 0.1, 0.9])
2 つのカテゴリの重みを指定します。サンプル数が少ないカテゴリの重みは 0.1、サンプル数が多いカテゴリの重みは 0.9 です。これにより、モデルはサンプル数が少ないカテゴリにより多くの注意を払うことができます。
参考文献:
[1] He, H., & Garcia, E. A. (2009). 不均衡なデータからの学習. 知識とデータ エンジニアリングに関する IEEE トランザクション、21(9)、1263 - 1284.
[2] Chawla, N.V.、Bowyer, K.W.、Hall, L.O.、および Kegelmeyer, W.P. (2002). SMOTE: 合成少数派オーバーサンプリング技術. 人工知能研究ジャーナル、16、321 - 357.
以上が画像分類におけるクラスの不均衡の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。