の可能性を予測するために、以下は真である:私はそれぞれに属する入力のための確率を予測しようとしている構造は、複数の独立したクラス私は解決しています問題については
- 12クラス。
- 入力が12クラスのいずれにも属していない可能性があります。つまり、12個の出力(確率)はすべて低くなります。
- 出力確率は独立している必要があります。つまり、クラス1の可能性が95%であれば、クラス2の可能性は5%を超える可能性があります。つまり、いくつかのクラスが類似しているため、合計確率を1にする必要はありません。明確にするために、実際には、各入力は1クラスにしか属しません。私が言及しているのは確率です。
- ワンホットエンコード12出力クラス
- 損失関数:カテゴリcrossentropy
- 最終層:12個のニューロンと緻密で、次のよう
私は現在、これに近づいてる方法ですシグモイド活性化
質問
- これら12種類のクラスのメンバーシップを予測するには、1つのモデルを持つことが理にかなっていますか?あるいは、それぞれが1つのクラスだけの確率を予測する独立したモデルを持つことがより理にかなっていますか?何が良いですか?
- 新しいクラスが入力がどのクラスにも属していないことを表す場合、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')
各入力が1つのクラスにしか属していない場合、確率がどのように1より大きいかを理解していません。実際には、モデルの出力を確率?いずれにしても、入力が複数のクラスに属することができない場合は、1つのモデルが最適です。私はあなたが 'クラスのどれものケースをカバーする13のクラスを持っている必要があると思うが、すべてのあなたの訓練のインスタンスがクラスに属している場合は、どのように13番目のケースのために訓練するつもりですか? – Stephen