2017-01-12 4 views
0

2つの具体的なクラス、たとえばAとCがあります。NNを使用してクラスA、B、Cに分類して、自信を持って分類しすぎるサンプルをBコスト関数は次のようにすべきである:誤分類(Cと分類されるA、またはその逆)は非常に大きなコストを伴う。正しい分類にはコストがかかりません。アイテムをBとして分類することは、非常に低コストである。結果は、それぞれのクラスに非常によく合っているサンプルのみを区別することになります。Tensorflowカスタムコスト関数

私はTensorFlowの簡単なチュートリアルでしか作業していませんが、より具体的なコスト関数を定義する方法については説明していません。 TensorFlowでこれがどのように成し遂げられるのか誰にも説明できます

私は現在、2つのクラスだけを使って分類しています。これはストレートTensorFlowチュートリアルからのものである:

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y, y_)) 
train_step = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost) 

yはNN(ようになります[1,0,0]、[0,1,0]] 3で設定した2つのサンプルのための出力でありますクラス)であり、y_は[[1,0,0]、[0,0,1]]のサンプルの正しいクラスです。この例では、2番目のサンプルをBと分類していましたが、確信が持てませんでしたが、実際のクラスはCでした。

+0

あなたのコードはどこですか? [Ask]を参照してください。あなたはまた、2分のサイト[ツアー]を取ることも気にしませんでした。 –

答えて

1

NNクラシファイアの基本的な誤解があります。もしあなたがそれらをコーディングすることに深く関わっていくのであれば、ちょっと読んでみてください。マイケル・ニールセンNeural Networks and Deep Learningのオンラインブックを強くお勧めします。

しかし、あなたが探している解決策は特別なコスト関数を作成するのではなく、NNから得た結果をどのように解釈するかということです。あなたは3つのクラスを持っていません。あなたは2つのクラスを持っています。「これが何であるかわからない」というのは、クラスそのものではなく、答えに対するNNの信頼の尺度です。したがって、TendorFlowガイドのように、各クラスに1つずつ、2つの出力が必要です。そして、あなたはガイドのようにそれを訓練するべきです。あなたのネットワークが訓練されたら、それを分類するサンプルをフィードするときに2つの数字が得られ、A 'とC'と呼ぶことができます。これらの数字は、サンプルがどのクラスに属するかに対するNNの信頼を示しています。たとえば、A '== 0.999、C' == 0.00001の場合、ネットワークはあなたのサンプルがクラスAであることを確信しています。A '== 0.6とC' == 0.59を取得した場合、ネットワークにはアイデアがAかCかどうかというアイデアですが、クラスAであるという理論をわずかに支持しています。あなたの信頼区間が何であるかはあなた次第です。これを簡単にするためには、出力層の非線形性(TensorFlow MNISTガイドのやり方)にsoftmaxを使用するのがよいでしょう。 softmaxの便利な機能の1つは、すべてのクラスの合計が常に1になり、A 'とC'の違いに基づいて簡単に決定できるということです。

+0

ご返信ありがとうございます。私が直面している具体的な問題は、特定のタイプのミスが非常に特殊なコストを持つような分類を最適化することです。私はネットワーク内の特定の真偽/偽陽性率の最適化を達成できることを期待していました。これを実現するカスタムコスト関数を作成する方法がないと言っていますか?私はこれを達成する他の方法があることを理解しています。私はこれが従来のアプリケーションではないことを認識していますが、最小化するコスト関数が正しく選択されていれば数学はうまくいくはずです –

+0

いいえ、別のコスト関数では解決できません。それについて考える。あなたのネットワークのトレーニングを開始するとき、あなたの重みは、標準または一様分布から取られたいくつかのランダムな値に設定されます。あなたのネットワークは何も確信しておらず、ラベルを予測と比較して、重みを更新してより良い予測をしています。それで、あなたが "これがAかCかどうかわからないなら、これはBです"というルールで、すべてがBに分類され、ネットワークは実際にAとCを認識するようには決して訓練されません。説明。 –

+0

もちろん、いくつかの非常に具体的な間違いを探していて、訓練データコーパスのこれらのミスをクラスBとしてラベル付けすることができれば、これらを認識するようにネットワークを訓練することができます...もしあなたが探している間違いが通常のAとCとは十分に区別されますが、AとCの認識精度は低下する可能性があります。 –

関連する問題