回答編集履歴
2
説明の追記
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
説明の追記
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=
|
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
|
-
|
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」が正しいです
|