それだけで一つのクラスの間であなたの最後の層の出力(数を選択することができますように、あなたの第2のモデルは、常に「クラス0」に答えます)。
2つのクラスがあるので、2つの出力でsoftmax + categorical_crossentropyを計算して、最も可能性の高いものを選択する必要があります。
したがって、あなたの最後の層は次のようになります。
model.add(Dense(2, activation='softmax')
model.compile(...)
ちょうど単一の出力数を解析することにより、真のが「クラス0」の確率を計算あなたのシグモイド+ binary_crossentropyモデルは、すでに正しいです。
EDIT:ここでは実数空間と確率空間との間のマッピングとして表示することができますSigmoid機能
シグモイド程度の小さな説明です。
![Sigmoid Function](https://i.stack.imgur.com/VDOBN.png)
ことに注意してください:実数、ネットワークの出力は、非常に低いのであれば
Sigmoid(-infinity) = 0
Sigmoid(0) = 0.5
Sigmoid(+infinity) = 1
、シグモイドは、「クラス0」の確率は0に近いかを決定します"Class 1"を決定する
逆に、ネットワークの出力が非常に高い場合、Sigmoidは "Class 0"が1に近い確率を決定し、 "Class 0"を決定します。
決定私あなたの出力の看板を見るだけで、クラスを決定するのと同様のことです。しかし、これはあなたのモデルが学ぶのを許さないでしょう!確かに、このバイナリ損失の勾配はほぼすべての場所でゼロになり、適切に定量化されないため、モデルがエラーから学習することは不可能になります。
シグモイドと「binary_crossentropy」が使用されている理由は次のとおりです。
これらはバイナリロスの代理であり、スムーズなプロパティがあり、学習が可能です。
また、Softmax FunctionとCross Entropy
についての詳細情報を見つけてください、あなたは私たちにあなたが使用したコードを示していただけますか?たぶん答えはあなたの説明に隠されています。私の推測では、40%の精度はランダムバイナリクラシファイアよりも最悪であるため、第2のクラシファイアには正式に2つ以上のクラスが存在すると思います。 –
あなたに適したソリューションを見つけたら、その答えの横のチェックマークをクリックして受け入れてください。これにより、あなたの問題を抱えている他の人たちが、あなたに適したソリューションを知ることができます –