teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明の追記

2021/09/26 02:42

投稿

jbpb0
jbpb0

スコア7658

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  なので、
6
6
  [PyTorchを用いてディープラーニングによるワイン分類をしてみた](https://techtech-sorae.com/pytorch%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AF%E3%82%A4%E3%83%B3%E5%88%86%E9%A1%9E/)
7
- のコードは、下記の修正をし
7
+ のコードは、下記の修正をした方がいいで
8
8
  ```python
9
9
  return F.log_softmax(x, dim=0)
10
10
  ```
@@ -24,4 +24,10 @@
24
24
  ```python
25
25
  return F.log_softmax(x, dim=0)
26
26
  ```
27
- の「dim=0」は間違いで、「dim=1」が正しいです
27
+ の「dim=0」は間違いで、「dim=1」が正しいです
28
+ そこを直して、
29
+ ```python
30
+ y_pred_prob = torch.exp(model(test_x))
31
+ ```
32
+ を計算しても、二つの合計は1.0になります
33
+ ただし、「log_softmax」を二重に計算するので、効率が悪くなると思います

1

説明の追記

2021/09/26 02:42

投稿

jbpb0
jbpb0

スコア7658

answer CHANGED
@@ -1,15 +1,27 @@
1
+ まず、この質問の内容とは直接は関係無いのですが、
2
+ [PytorchのCrossEntropyLossの解説](https://qiita.com/ground0state/items/8933f9ef54d6cd005a69)
3
+ とかに書かれてるように、「torch.nn.CrossEntropyLoss()」には「log_softmax」の計算も含まれてるので、「torch.nn.CrossEntropyLoss()」を使う場合はニューラルネットの定義側には「log_softmax」は不要です
4
+
5
+ なので、
1
6
  [PyTorchを用いてディープラーニングによるワイン分類をしてみた](https://techtech-sorae.com/pytorch%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AF%E3%82%A4%E3%83%B3%E5%88%86%E9%A1%9E/)
2
- のコード
7
+ のコード下記の修正をします
3
8
  ```python
4
- return F.log_softmax(x, dim=1)
9
+ return F.log_softmax(x, dim=0)
5
10
  ```
6
-
11
+ ↓ 変更
7
12
  ```python
8
13
  return x
9
14
  ```
10
- と変えたら
15
+ その上で
11
16
  ```python
12
17
  y_pred_prob = model(test_x).softmax(dim=1)
13
18
  ```
14
- 、二つの合計が1.0になります
19
+ を計算したら、二つの合計が1.0になります
15
- (それが確率かどうかは別にして)
20
+ (それが確率かどうかは別にして)
21
+
22
+  .
23
+ なお、toast-uzさんが回答に書いてるように、修正前の
24
+ ```python
25
+ return F.log_softmax(x, dim=0)
26
+ ```
27
+ の「dim=0」は間違いで、「dim=1」が正しいです