Kerasからのmodel.predict関数の出力はどういう意味ですか?


14

Quora公式データセットで重複する質問を予測するLSTMモデルを作成しました。テストラベルは0または1です。1は質問のペアが重複していることを示します。使用してモデルを構築した後model.fit、私が使用してモデルをテストしmodel.predict、テストデータに。出力は、以下のような値の配列です。

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

配列の最初の10個の値のみを表示しています。これらの値の意味と、各質問ペアの予測ラベルは何ですか?


1
ネットワークに問題があると思います..確率は
0〜1の

回答:


8

ニューラルネットワークの出力は、デフォルトでは決してバイナリではありません。つまり、ゼロまたは1です。勾配降下法の枠組みで損失をより自由に最適化するために、ネットワークは(離散ではなく)連続値で動作します。

いくつかのコードも示す同様の質問を見てください。

微調整やスケーリングを行わないと、ネットワークの出力は、その公称値に関して、入力の範囲のどこかに落ちる可能性があります。あなたの場合、それはおおよそ0と2の間のようです。

これで、あるしきい値に基づいて、上記の値を0または1に変換する関数を作成できます。たとえば、値を[0、1]の範囲にスケーリングし、値が0.5未満の場合は0を返し、0.5を超える場合は1を返します。


おかげで、私もしきい値を使用してラベルを分類することを考えました。しかし、しきい値が決定する根拠は何ですか?
Dookoto_Sea 2018

あなたはそれを自分で決定する必要があり@Dookoto_Sea
ジェレミーブレイン

あなたのラベルが0または1であれば、あなたの価値はの予測値スケール持つ、その範囲内にあるべきであることを@Dookoto_Seaしてくださいノート[0、2]興味をそそられる、あなたはモデル出力を変更する必要がある
ジェレミーブレイン

6

これが分類の問題である場合、2つの出力ニューロンを持つようにネットワークを変更する必要があります。

次を使用して、ラベルをワンホットエンコードされたベクトルに変換できます。

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

次に、出力層にsoftmaxアクティベーション関数を持つ2つのニューロンがあることを確認します。

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

これにより、model.predict(x_test_reshaped)リストの配列になります。内部リストは、各クラスに属するインスタンスの確率です。これは合計で1になり、明らかに決定されたラベルは最も高い確率の出力ニューロンであるべきです。

Kerasのライブラリにはこれが含まれているため、この比較を自分で行う必要はありません。を使用して、クラスラベルを直接取得できますmodel.predict_classes(x_test_reshaped)


3
「これが分類の問題である場合は、2つの出力ニューロンを持つようにネットワークを変更する必要があります。」..申し訳ありませんが、そうするべきではありません。ソフトマックス関数の代わりに1つのニューロンとシグモイドでそれを行うことができます。
ガネム2018年

@Minion、両方の方法は基本的に同等であり、単一の出力ニューロンで実行する必要があるしきい値処理は、ネットワークに暗黙的に埋め込まれています。したがって、バイナリ出力を提供します。
JahKnows、

1
はい、知っています。彼が言及したからといってコメントしました。「ネットワークを2つの出力ニューロンに変更する必要があります。」.. thanx
Ghanem 2018年

1

予測は、トレーニング出力として入力したものとアクティベーション関数に基づいています。

たとえば、0-1入力とバイナリクロスエントロピー損失のある出力のシグモイドアクティベーション関数を使用すると、1の確率が得られます。どちらの方向でも間違った決定をするコストに応じて、次の方法を決定できます。これらの確率を処理します(たとえば、確率が> 0.5である場合、またはおそらくすでに> 0.1である場合、カテゴリ "1"を予測します)。

あなたが説明したことから、あなたは0-1の入力を持っていて、おそらくあなたの出力層の線形活性化を仮定しました(おそらく平均二乗誤差損失で?)。これは、出力が直接予測された数(からの任意の実数である可能性があります)であるという回帰問題を想定したことを意味します。代わりに最初の段落で述べました。(,

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.