質問編集履歴
2
やってみたことを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -173,3 +173,7 @@
|
|
173
173
|
plt.plot()
|
174
174
|
```
|
175
175
|
![精度の推移](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-29/ee3b11f7-4ce8-4678-9d50-4cf3092d77c2.png)
|
176
|
+
|
177
|
+
# 追記:やってみたこと
|
178
|
+
・見た感じ、パラメータ数が足りていないのかと思ったので、畳み込み層を1つ追加してみた
|
179
|
+
→精度は変わらなかった
|
1
見やすいようにコードを分割しました。また自分で試したことを補足として追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,11 +6,22 @@
|
|
6
6
|
データセットも前処理もモデルも同じなのになぜこうも結果に差が出るのかがわからずとてもモヤモヤしています。音声感情認識のモデルを実装したときも、論文のとおりに作っても中々精度が出ず、方向性がわからなくなり練習に戻ってきました。
|
7
7
|
|
8
8
|
# 知りたいこと
|
9
|
+
・訓練ロスとテストロス、訓練精度とテスト精度の記録を入れた
|
10
|
+
・torch.to()関数でGPUを利用するようにした
|
9
|
-
|
11
|
+
以外はすべてサイトのコピペです。やっていることは同じなのになぜこうも精度が違うのかが知りたいです。問題のコードと、40エポック経過後のロスと精度の推移を添付します。どうかよろしくお願いします。
|
10
12
|
|
11
|
-
|
13
|
+
補足:上記2つの改変を消して実行してみましたが、結果は変わらなかったのでこれらは原因ではないことがわかりました。
|
12
14
|
|
15
|
+
# 実行環境
|
16
|
+
CPU: Intel® Xeon(R) Silver 4208 CPU @ 2.10GHz × 16
|
13
|
-
|
17
|
+
GPU: NVIDIA GeForce RTX 2080 Ti/PCIe/SSE2
|
18
|
+
OS: Ubuntu 18.04.5 LTS
|
19
|
+
開発環境: Jupyter Notebook
|
20
|
+
|
21
|
+
# コード
|
22
|
+
すべてJupyter Notebook上で実行しました。実行したセルごとにまとめて添付します。
|
23
|
+
|
24
|
+
## モジュールのインポート
|
14
25
|
```python
|
15
26
|
import torch
|
16
27
|
import torchvision
|
@@ -20,8 +31,9 @@
|
|
20
31
|
import torch.nn as nn
|
21
32
|
import torch.nn.functional as F
|
22
33
|
import torch.optim as optim
|
23
|
-
|
34
|
+
```
|
24
|
-
# MNISTをロードする
|
35
|
+
## MNISTをロードする
|
36
|
+
```python
|
25
37
|
transform = transforms.Compose(
|
26
38
|
[transforms.ToTensor(),
|
27
39
|
transforms.Normalize((0.5, ), (0.5, ))])
|
@@ -45,9 +57,10 @@
|
|
45
57
|
num_workers=2)
|
46
58
|
|
47
59
|
classes = tuple(np.linspace(0, 9, 10, dtype=np.uint8))
|
60
|
+
```
|
48
61
|
|
49
|
-
#モデルの定義
|
62
|
+
## CNNモデルの定義
|
50
|
-
|
63
|
+
```python
|
51
64
|
class Net(nn.Module):
|
52
65
|
def __init__(self):
|
53
66
|
super(Net, self).__init__()
|
@@ -68,15 +81,16 @@
|
|
68
81
|
x = self.dropout2(x)
|
69
82
|
x = self.fc2(x)
|
70
83
|
return x
|
71
|
-
|
84
|
+
```
|
72
|
-
#学習用コード
|
85
|
+
## 学習用コード
|
73
|
-
|
86
|
+
```python
|
74
87
|
model = Net().to('cuda')
|
75
88
|
|
76
89
|
criterion = nn.CrossEntropyLoss()
|
77
90
|
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
|
78
91
|
epochs = 40
|
79
92
|
|
93
|
+
#ロスと精度記録用のリスト
|
80
94
|
train_loss = []
|
81
95
|
test_loss = []
|
82
96
|
train_accuracy = []
|
@@ -139,5 +153,23 @@
|
|
139
153
|
train_accuracy.append(correct / total)
|
140
154
|
|
141
155
|
print('Finished Training')
|
156
|
+
```
|
157
|
+
## 結果の出力
|
142
158
|
|
159
|
+
ロスの出力と結果
|
160
|
+
```python
|
161
|
+
plt.plot(train_loss, label='train_loss')
|
162
|
+
plt.plot(test_loss, label='test_loss')
|
163
|
+
plt.legend()
|
164
|
+
plt.plot()
|
143
165
|
```
|
166
|
+
![ロスの推移](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-29/86f07ddd-3382-4a3f-beb2-8bd32a3f6f62.png)
|
167
|
+
|
168
|
+
精度の出力と結果
|
169
|
+
```python
|
170
|
+
plt.plot(train_accuracy, label='train_accuracy')
|
171
|
+
plt.plot(test_accuracy, label='test_accuracy')
|
172
|
+
plt.legend()
|
173
|
+
plt.plot()
|
174
|
+
```
|
175
|
+
![精度の推移](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-29/ee3b11f7-4ce8-4678-9d50-4cf3092d77c2.png)
|