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

質問編集履歴

2

train関数の追加

2021/05/28 08:34

投稿

huskies
huskies

スコア2

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,39 @@
10
10
  - Flatten作業にてimageをvectorに変更
11
11
  - Fully-connected linearレイヤーには10個のアウトプットを生成
12
12
 
13
+ ### 現状のエラーメッセージ
14
+
15
+ `RuntimeError: shape '[-1, 4900]' is invalid for input of size 140000`
16
+
17
+ なお、CNNネットワークは以下のtrain関数で学習させています。以下の通り、CNNを学習させる段階でエラーです。
18
+ ```
19
+ def train(net, train_loader, test_loader,
20
+ num_epochs=NUM_EPOCHS, learning_rate=LEARNING_RATE,
21
+ compute_accs=False):
22
+ criterion = nn.CrossEntropyLoss()
23
+ optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
24
+
25
+ train_accs = []
26
+ test_accs = []
27
+
28
+ for epoch in range(1, num_epochs + 1):
29
+ batch_num = 1
30
+ for images, labels in train_loader:
31
+
32
+ # If you are using a GPU, speed up computation by moving values to the GPU
33
+ if torch.cuda.is_available():
34
+ net = net.cuda()
35
+ images = images.cuda()
36
+ labels = labels.cuda()
37
+
38
+
39
+ optimizer.zero_grad()
40
+ outputs = net(images) # CNNを学習させるこの段階でエラー
41
+ loss = criterion(outputs, labels)
42
+ loss.backward()
43
+ optimizer.step()
44
+ ```
45
+
13
46
  ### 該当のソースコード
14
47
 
15
48
  ```python
@@ -27,11 +60,9 @@
27
60
  print(x.shape)
28
61
  # use relu function to x
29
62
  x = self.relu(x)
30
-
31
63
  # Run max pooling over x
32
64
  x = self.pool(x)
33
65
  print(x.shape)
34
-
35
66
  # flatten x:おそらくここでエラー発生
36
67
  x = x.view(-1, 25 * 14 * 14)
37
68
  print(x.shape)

1

誤字を修正しました

2021/05/28 08:34

投稿

huskies
huskies

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,14 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- PyTorchを用いてCNN(畳み込みニューラルネットワーク)の実装を進めております。
3
+ PyTorchを用いてCNN(畳み込みニューラルネットワーク)の実装を進めておりますが、CNNへの理解が乏しく上手く実装できておりません
4
- その中で、
5
4
 
6
- ### 発生している問題・エラーメッセージ
5
+ ### 前提
7
6
 
8
- ```
7
+ - Convolution Layerにはカーネルのサイズを width = 5, depth = 25を利用
9
- エラーメッセージ
8
+ - ReLu活性化関数を利用
9
+ - max-poolにはカーネルサイズを width = 2, stride = 2を利用
10
- ```
10
+ - Flatten作業にてimageをvectorに変更
11
+ - Fully-connected linearレイヤーには10個のアウトプットを生成
11
12
 
12
13
  ### 該当のソースコード
13
14
 
@@ -17,8 +18,8 @@
17
18
  super(NetC, self).__init__()
18
19
  self.relu = nn.ReLU()
19
20
  self.conv1 = torch.nn.Conv2d(3, 25, kernel_size = (5, 25))
20
- self.pool = torch.nn.MaxPool2d(kernel_size = (2, 2), stride = (2, 2))
21
+ self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2)
21
- self.fc1 = torch.nn.Linear(25 * 14 * 14, 10) # 2
22
+ self.fc1 = torch.nn.Linear(25 * 14 * 14, 10)
22
23
 
23
24
  def forward(self, x):
24
25
  # pass dataframe into conv1
@@ -29,9 +30,9 @@
29
30
 
30
31
  # Run max pooling over x
31
32
  x = self.pool(x)
33
+ print(x.shape)
32
34
 
33
- # flatten x with dimension 0
35
+ # flatten x:おそらくここでエラー発生
34
-
35
36
  x = x.view(-1, 25 * 14 * 14)
36
37
  print(x.shape)
37
38
  # pass into fully connected linear layer to 10 outputs
@@ -42,9 +43,12 @@
42
43
 
43
44
  ### 試したこと
44
45
 
45
- ここ問題に対し試したことを記載しください。
46
+ おそらくflattenする際`x.view()`を用いいるの点が間違っているのか思います。PyTorchチュートリアルなど[見ると](https://pytorch.org/tutorials/recipes/recipes/defining_a_neural_network.html)、`torch.flatten`を用いおり、こちらの方が良そうなのですが、まだ少々曖昧なためご教授ただければ幸いです
46
47
 
48
+ また、その他の実装段階で前提条件に当てはまっていない箇所があればご指摘いただければと思います。
49
+
50
+
47
51
  ### 補足情報(FW/ツールのバージョンなど)
48
52
 
49
- こにより詳細な情報を記載してください。
53
+ ちらがCNNのイメージ図です
50
54
  ![イメージ説明](870e1954b9efcc25c9a0193faa0a0681.png)