0

の可能性を予測するために、以下は真である:私はそれぞれに属する入力のための確率を予測しようとしている構造は、複数の独立したクラス私は解決しています問題については

  • 12クラス。
  • 入力が12クラスのいずれにも属していない可能性があります。つまり、12個の出力(確率)はすべて低くなります。
  • 出力確率は独立している必要があります。つまり、クラス1の可能性が95%であれば、クラス2の可能性は5%を超える可能性があります。つまり、いくつかのクラスが類似しているため、合計確率を1にする必要はありません。明確にするために、実際には、各入力は1クラスにしか属しません。私が言及しているのは確率です。

    • ワンホットエンコード12出力クラス
    • 損失関数:カテゴリcrossentropy
    • 最終層:12個のニューロンと緻密で、次のよう

    私は現在、これに近づいてる方法ですシグモイド活性化

質問

  1. これら12種類のクラスのメンバーシップを予測するには、1つのモデルを持つことが理にかなっていますか?あるいは、それぞれが1つのクラスだけの確率を予測する独立したモデルを持つことがより理にかなっていますか?何が良いですか?
  2. 新しいクラスが入力がどのクラスにも属していないことを表す場合、12ではなく13のクラスを持つ方がよいでしょうか?

コード

test_fraction = 0.2 
dropout_prob = 0.4 
activation_function = 'relu' 
loss_function = 'categorical_crossentropy' 
opt = Adam() 
verbose_level = 1 
num_targets = 12 
batch_size = 32 
epochs = 75 

X = np.array(keypoints) 
labels = np.array(labels) 
labels = np_utils.to_categorical(labels) 
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=test_fraction, random_state=42) 

# model training 
model = Sequential() 
model.add(Dense(32, input_shape=(180,))) 
model.add(Dense(64, activation=activation_function)) 
model.add(Dense(128, activation=activation_function)) 
model.add(Dense(num_targets, activation='sigmoid')) 
model.summary() 
model.compile(loss=loss_function, optimizer=opt, metrics=['accuracy']) 
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=verbose_level, 
        validation_data=(X_test, y_test)) 
model.save('../models/model.h5') 
+0

各入力が1つのクラスにしか属していない場合、確率がどのように1より大きいかを理解していません。実際には、モデルの出力を確率?いずれにしても、入力が複数のクラスに属することができない場合は、1つのモデルが最適です。私はあなたが 'クラスのどれものケースをカバーする13のクラスを持っている必要があると思うが、すべてのあなたの訓練のインスタンスがクラスに属している場合は、どのように13番目のケースのために訓練するつもりですか? – Stephen

答えて

0

これは、マルチラベル分類と呼ばれ、それが簡単にモデル内の2つの変更を行うことにより実現することができる。

  • でシグモイドの活性化を使用します出力
  • 複数ラベルの分類を処理できるbinary_crossentropyの損失を使用します。

そして、あなたのモデルをトレーニングしてください。

0

正しい開始について

model.add(Dense(num_targets, activation='softmax')) 

sigmoid activation

model.add(Dense(num_targets, activation='sigmoid')) 

は、あなたの質問に答えるために、私が言うのバイナリ分類ではないマルチクラス分類のために使用される

  1. あなたは独立したモデル(クラスごとに1つのモデル)を必要としません、すべてのための1つのモデルは問題ありません。クラスごとに1つのモデルは、ハードウェアのリソースの観点からは不採算である可能性があります。
  2. 2番目の質問について、12のクラスの代わりに13を使用することは、あなたが扱っている問題によって異なります。この13番目のクラスのデータがあれば、モデルを訓練することができます。
関連する問題