質問編集履歴
2
train関数の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -19,6 +19,72 @@
|
|
19
19
|
- Flatten作業にてimageをvectorに変更
|
20
20
|
|
21
21
|
- Fully-connected linearレイヤーには10個のアウトプットを生成
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
### 現状のエラーメッセージ
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
`RuntimeError: shape '[-1, 4900]' is invalid for input of size 140000`
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
なお、CNNネットワークは以下のtrain関数で学習させています。以下の通り、CNNを学習させる段階でエラーです。
|
34
|
+
|
35
|
+
```
|
36
|
+
|
37
|
+
def train(net, train_loader, test_loader,
|
38
|
+
|
39
|
+
num_epochs=NUM_EPOCHS, learning_rate=LEARNING_RATE,
|
40
|
+
|
41
|
+
compute_accs=False):
|
42
|
+
|
43
|
+
criterion = nn.CrossEntropyLoss()
|
44
|
+
|
45
|
+
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
train_accs = []
|
50
|
+
|
51
|
+
test_accs = []
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
for epoch in range(1, num_epochs + 1):
|
56
|
+
|
57
|
+
batch_num = 1
|
58
|
+
|
59
|
+
for images, labels in train_loader:
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
# If you are using a GPU, speed up computation by moving values to the GPU
|
64
|
+
|
65
|
+
if torch.cuda.is_available():
|
66
|
+
|
67
|
+
net = net.cuda()
|
68
|
+
|
69
|
+
images = images.cuda()
|
70
|
+
|
71
|
+
labels = labels.cuda()
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
optimizer.zero_grad()
|
78
|
+
|
79
|
+
outputs = net(images) # CNNを学習させるこの段階でエラー
|
80
|
+
|
81
|
+
loss = criterion(outputs, labels)
|
82
|
+
|
83
|
+
loss.backward()
|
84
|
+
|
85
|
+
optimizer.step()
|
86
|
+
|
87
|
+
```
|
22
88
|
|
23
89
|
|
24
90
|
|
@@ -56,15 +122,11 @@
|
|
56
122
|
|
57
123
|
x = self.relu(x)
|
58
124
|
|
59
|
-
|
60
|
-
|
61
125
|
# Run max pooling over x
|
62
126
|
|
63
127
|
x = self.pool(x)
|
64
128
|
|
65
129
|
print(x.shape)
|
66
|
-
|
67
|
-
|
68
130
|
|
69
131
|
# flatten x:おそらくここでエラー発生
|
70
132
|
|
1
誤字を修正しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,21 +2,23 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
PyTorchを用いてCNN(畳み込みニューラルネットワーク)の実装を進めております。
|
5
|
+
PyTorchを用いてCNN(畳み込みニューラルネットワーク)の実装を進めておりますが、CNNへの理解が乏しく上手く実装できておりません。
|
6
|
-
|
7
|
-
その中で、
|
8
6
|
|
9
7
|
|
10
8
|
|
11
|
-
###
|
9
|
+
### 前提
|
12
10
|
|
13
11
|
|
14
12
|
|
15
|
-
|
13
|
+
- Convolution Layerにはカーネルのサイズを width = 5, depth = 25を利用
|
16
14
|
|
17
|
-
|
15
|
+
- ReLu活性化関数を利用
|
18
16
|
|
17
|
+
- max-poolにはカーネルサイズを width = 2, stride = 2を利用
|
18
|
+
|
19
|
-
|
19
|
+
- Flatten作業にてimageをvectorに変更
|
20
|
+
|
21
|
+
- Fully-connected linearレイヤーには10個のアウトプットを生成
|
20
22
|
|
21
23
|
|
22
24
|
|
@@ -36,9 +38,9 @@
|
|
36
38
|
|
37
39
|
self.conv1 = torch.nn.Conv2d(3, 25, kernel_size = (5, 25))
|
38
40
|
|
39
|
-
self.pool = torch.nn.MaxPool2d(kernel_size =
|
41
|
+
self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2)
|
40
42
|
|
41
|
-
self.fc1 = torch.nn.Linear(25 * 14 * 14, 10)
|
43
|
+
self.fc1 = torch.nn.Linear(25 * 14 * 14, 10)
|
42
44
|
|
43
45
|
|
44
46
|
|
@@ -60,11 +62,11 @@
|
|
60
62
|
|
61
63
|
x = self.pool(x)
|
62
64
|
|
65
|
+
print(x.shape)
|
63
66
|
|
64
67
|
|
65
|
-
# flatten x with dimension 0
|
66
68
|
|
67
|
-
|
69
|
+
# flatten x:おそらくここでエラー発生
|
68
70
|
|
69
71
|
x = x.view(-1, 25 * 14 * 14)
|
70
72
|
|
@@ -86,7 +88,13 @@
|
|
86
88
|
|
87
89
|
|
88
90
|
|
89
|
-
|
91
|
+
おそらくflattenする際に`x.view()`を用いているこの点が間違っているのかと思います。PyTorchチュートリアルなどを[見ると](https://pytorch.org/tutorials/recipes/recipes/defining_a_neural_network.html)、`torch.flatten`を用いており、こちらの方が良さそうなのですが、まだ少々曖昧なためご教授いただければ幸いです。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
また、その他の実装段階で前提条件に当てはまっていない箇所があればご指摘いただければと思います。
|
96
|
+
|
97
|
+
|
90
98
|
|
91
99
|
|
92
100
|
|
@@ -94,6 +102,6 @@
|
|
94
102
|
|
95
103
|
|
96
104
|
|
97
|
-
こ
|
105
|
+
こちらがCNNのイメージ図です
|
98
106
|
|
99
107
|
![イメージ説明](870e1954b9efcc25c9a0193faa0a0681.png)
|