mnistを学習させるとき、通常、
この画像のラベルは下記のようにします

| Number | Label |
|---|---|
| 0 | 0 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
これを敢えて、重み付きのラベルで学習させてみます
| Number | Label |
|---|---|
| 0 | 0.2 |
| 1 | 0.2 |
| 2 | 0.2 |
| 3 | 0.8 |
| 4 | 0.2 |
| 5 | 0.2 |
| 6 | 0.2 |
| 7 | 0.2 |
| 8 | 0.2 |
| 9 | 0.2 |
傷位置検出で取り入れようとしている*1この手法が正しいか、
評価するためです
損失関数を重み付きのラベルでクロスエントリピーを計算しているところがポイントです
def loss(output, weight):
soft = tf.nn.softmax(output)
xentropy = - tf.reduce_sum(weight * tf.log(soft), 1)
loss = tf.reduce_mean(xentropy)
return loss
100サイクルで学習させてみました
活性化にsigmoidを使っていることもあって少し精度が低かったんですが、
ちゃんと学習できました

通常の01ラベルと、出力を比較してみます

01ラベルでは、正解の3が一番大きな値になるものの、
その他の値でもそこそこの確率が出力されていました
一方、重み付きラベルでは、3以外の出力は等しく低く、
横ばいになっています
狙い通りの動きですね