機械学習を勉強している者です。
pytorchのニューラルネットワークで二値分類を行おうと、先行事例を探していたところ、下記ブログを見つけました。
ワインの二値分類
この通りに実装し、無事に動いたのですが、分類結果0, 1 のそれぞれの確率がどうなっているかを見ようと、この様な実装を行いました。
python
1test_x, test_y = Variable(test_X), Variable(test_Y) 2y_pred_prob = model(test_x) 3print(y_pred_prob) 4 5#以下出力 6tensor([[ -8.1126, -2.6467], 7 [ -8.4808, -2.1014], 8 [ -8.5551, -1.9885], 9 [ -8.2549, -2.4324], 10 [ -5.4921, -6.5018], 11 [ -4.2638, -8.3200], 12 [ -6.6616, -4.7711], 13 [ -6.4839, -5.0384],
使っている出力の関数はlog_softmaxで、pytorchのドキュメント(log_softmaxについて)を調べたとところ、ソフトマックス関数をlogの中に入れているだけでした。
そこで、ただのソフトマックス関数に直せば、例えば0:0.9, 1:0.1の様な0, 1のラベルがそれぞれ何%の確率で予想しているかが出ると思い、下記の様にログを外したものを算出したところ、期待とは異なる値が返ってきました。
python
1x = [-8.1126, -2.6467] 2A1 = 2**x[0] 3A2 = 2**x[1] 4print('A1 : ', A1) 5print('A2 : ', A2) 6print('A1+A2: ', A1+A2) 7 8#以下出力 9A1 : 0.003612967518575162 10A2 : 0.15968492199325068 11A1+A2: 0.16329788951182583
予想ではA1+A2=1.0となると思ったのですが、上記の様になっております。何か考え方が違うと思うのですが、自力ではわかりませんでしたので、どこが違っているのかをご教示ください。
回答2件
あなたの回答
tips
プレビュー