質問編集履歴
4
内容を変更しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -304,7 +304,7 @@
|
|
304
304
|
|
305
305
|
・Linearの引数。ドキュメントではout_featureってなっていましたがどういう値をいれればいいのかわかりません。
|
306
306
|
|
307
|
-
・softmaxの引数の適切なdimの数字、使い方があっているのか知りたいです。最後に確率であらわされるはずだと思ってます。
|
307
|
+
・softmaxの引数の適切なdimの数字0とか1で何がちがうのか、使い方があっているのか知りたいです。最後に確率であらわされるはずだと思ってます。
|
308
308
|
|
309
309
|
|
310
310
|
|
3
コードとわからない部分を編集しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
pytorch
|
1
|
+
[pytorchモデル]forwardの中身が知りたい。特にsoftmaxのdimの決め方がわからない。
|
test
CHANGED
@@ -48,6 +48,8 @@
|
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
+
|
52
|
+
|
51
53
|
import torch
|
52
54
|
|
53
55
|
import torch.nn as nn
|
@@ -88,7 +90,7 @@
|
|
88
90
|
|
89
91
|
self.conv1 = nn.Conv2d(3, 16, 3)
|
90
92
|
|
91
|
-
print(self.conv1.weight)
|
93
|
+
# print(self.conv1.weight)
|
92
94
|
|
93
95
|
self.pool1 = nn.MaxPool2d(2,stride=2)
|
94
96
|
|
@@ -118,13 +120,17 @@
|
|
118
120
|
|
119
121
|
|
120
122
|
|
123
|
+
self.softmax = nn.Softmax(dim=1)
|
124
|
+
|
125
|
+
|
126
|
+
|
121
127
|
|
122
128
|
|
123
129
|
|
124
130
|
|
125
131
|
# an affine operation: y = Wx + b
|
126
132
|
|
127
|
-
# linearにおけるout_featuresとは
|
133
|
+
# linearにおけるout_featuresとはなんだろうか
|
128
134
|
|
129
135
|
self.fc1 = nn.Linear(256 * 3 * 3, 120)
|
130
136
|
|
@@ -192,6 +198,8 @@
|
|
192
198
|
|
193
199
|
x = self.fc3(x)
|
194
200
|
|
201
|
+
x = self.softmax(x)
|
202
|
+
|
195
203
|
|
196
204
|
|
197
205
|
return x
|
@@ -206,11 +214,7 @@
|
|
206
214
|
|
207
215
|
net = Net()
|
208
216
|
|
209
|
-
|
217
|
+
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
# print(net.forward(input))
|
214
218
|
|
215
219
|
print(net)
|
216
220
|
|
@@ -226,6 +230,8 @@
|
|
226
230
|
|
227
231
|
|
228
232
|
|
233
|
+
|
234
|
+
|
229
235
|
```
|
230
236
|
|
231
237
|
|
@@ -236,54 +242,6 @@
|
|
236
242
|
|
237
243
|
```
|
238
244
|
|
239
|
-
[[[-0.0633, 0.0949, -0.1568],
|
240
|
-
|
241
|
-
[ 0.0500, 0.0413, 0.0849],
|
242
|
-
|
243
|
-
[-0.1799, -0.1010, -0.0777]],
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
[[ 0.0214, 0.0727, -0.1571],
|
248
|
-
|
249
|
-
[-0.1234, 0.1118, -0.1654],
|
250
|
-
|
251
|
-
[-0.1792, 0.1694, -0.1765]],
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
[[ 0.1505, -0.1342, 0.1366],
|
256
|
-
|
257
|
-
[-0.0817, -0.1172, -0.0465],
|
258
|
-
|
259
|
-
[-0.1790, 0.0543, -0.0363]]],
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
[[[-0.1117, -0.1135, -0.0415],
|
266
|
-
|
267
|
-
[ 0.0203, 0.0146, -0.1017],
|
268
|
-
|
269
|
-
[ 0.1475, -0.0052, -0.1613]],
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
[[-0.0897, -0.1899, 0.1297],
|
274
|
-
|
275
|
-
[-0.1068, -0.1308, -0.0407],
|
276
|
-
|
277
|
-
[ 0.1829, -0.0268, 0.1219]],
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
[[ 0.0152, 0.0256, 0.0292],
|
282
|
-
|
283
|
-
[-0.0563, 0.0864, -0.0593],
|
284
|
-
|
285
|
-
[ 0.1793, 0.0180, 0.1540]]]], requires_grad=True)
|
286
|
-
|
287
245
|
Net(
|
288
246
|
|
289
247
|
(relu): ReLU()
|
@@ -308,6 +266,8 @@
|
|
308
266
|
|
309
267
|
(pool5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
310
268
|
|
269
|
+
(softmax): Softmax(dim=1)
|
270
|
+
|
311
271
|
(fc1): Linear(in_features=2304, out_features=120, bias=True)
|
312
272
|
|
313
273
|
(fc2): Linear(in_features=120, out_features=84, bias=True)
|
@@ -334,6 +294,8 @@
|
|
334
294
|
|
335
295
|
間にどういった法則性で小さくしていくかわからなかったため120、84のような適当な値になってしまいました。
|
336
296
|
|
297
|
+
softmaxの書き方がどうなっているのかわからなかったのでdim=1にしています。
|
298
|
+
|
337
299
|
|
338
300
|
|
339
301
|
### わからないこと(よろしくお願いします。)
|
@@ -342,6 +304,8 @@
|
|
342
304
|
|
343
305
|
・Linearの引数。ドキュメントではout_featureってなっていましたがどういう値をいれればいいのかわかりません。
|
344
306
|
|
307
|
+
・softmaxの引数の適切なdimの数字、使い方があっているのか知りたいです。最後に確率であらわされるはずだと思ってます。
|
308
|
+
|
345
309
|
|
346
310
|
|
347
311
|
・forwardがどのようになっているのか知りたいです。
|
@@ -356,6 +320,8 @@
|
|
356
320
|
|
357
321
|
以下の書き方を参照しましたがわからない点があります。
|
358
322
|
|
323
|
+
[softmaxのドキュメント](https://pytorch.org/docs/master/generated/torch.nn.Softmax.html)
|
324
|
+
|
359
325
|
[modelの書き方ドキュメント](https://pytorch.org/tutorials/beginner/former_torchies/nnft_tutorial.html)
|
360
326
|
|
361
327
|
[nn.Linearのドキュメント](https://pytorch.org/docs/stable/generated/torch.nn.Linear.html#torch.nn.Linear)
|
2
わからないところを編集しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -344,7 +344,11 @@
|
|
344
344
|
|
345
345
|
|
346
346
|
|
347
|
-
・forwardがどのようになっているのか知りたいです
|
347
|
+
・forwardがどのようになっているのか知りたいです。
|
348
|
+
|
349
|
+
→例えば、xにどんな値を与えたらいいかのコードを示していただけると助かります。
|
350
|
+
|
351
|
+
→それでクラスを呼び出したときにxの中身がどう変化しているのかが知りたいです。
|
348
352
|
|
349
353
|
・そもそもinitやforwardの書き方があっているのか確認してほしいです。
|
350
354
|
|
1
コードと出力を変更しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -38,7 +38,13 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
41
|
-
```
|
47
|
+
```
|
42
48
|
|
43
49
|
|
44
50
|
|
@@ -76,39 +82,39 @@
|
|
76
82
|
|
77
83
|
self.relu = nn.ReLU()
|
78
84
|
|
79
|
-
self.pool1 = nn.max_pool2d(2,stride=2)
|
80
|
-
|
81
85
|
|
82
86
|
|
83
87
|
# input: RGB 3 ,output : 16, kernel 3(default)
|
84
88
|
|
85
89
|
self.conv1 = nn.Conv2d(3, 16, 3)
|
86
90
|
|
91
|
+
print(self.conv1.weight)
|
92
|
+
|
87
|
-
self.pool1 = nn.
|
93
|
+
self.pool1 = nn.MaxPool2d(2,stride=2)
|
88
94
|
|
89
95
|
|
90
96
|
|
91
97
|
self.conv2 = nn.Conv2d(16, 32, 3)
|
92
98
|
|
93
|
-
self.pool2 = nn.
|
99
|
+
self.pool2 = nn.MaxPool2d(2,stride=2)
|
94
100
|
|
95
101
|
|
96
102
|
|
97
103
|
self.conv3 = nn.Conv2d(32, 64, 3)
|
98
104
|
|
99
|
-
self.pool3 = nn.
|
105
|
+
self.pool3 = nn.MaxPool2d(2,stride=2)
|
100
106
|
|
101
107
|
|
102
108
|
|
103
109
|
self.conv4 = nn.Conv2d(64, 128, 3)
|
104
110
|
|
105
|
-
self.pool4 = nn.
|
111
|
+
self.pool4 = nn.MaxPool2d(2,stride=2)
|
106
112
|
|
107
113
|
|
108
114
|
|
109
115
|
self.conv5 = nn.Conv2d(128, 256, 3)
|
110
116
|
|
111
|
-
self.pool5 = nn.
|
117
|
+
self.pool5 = nn.MaxPool2d(2,stride=2)
|
112
118
|
|
113
119
|
|
114
120
|
|
@@ -118,7 +124,7 @@
|
|
118
124
|
|
119
125
|
# an affine operation: y = Wx + b
|
120
126
|
|
121
|
-
# out_features
|
127
|
+
# linearにおけるout_featuresとは
|
122
128
|
|
123
129
|
self.fc1 = nn.Linear(256 * 3 * 3, 120)
|
124
130
|
|
@@ -130,6 +136,8 @@
|
|
130
136
|
|
131
137
|
def forward(self, x):
|
132
138
|
|
139
|
+
# conv relu poolの流れを実行してみる
|
140
|
+
|
133
141
|
|
134
142
|
|
135
143
|
x = self.conv1(x)
|
@@ -198,11 +206,13 @@
|
|
198
206
|
|
199
207
|
net = Net()
|
200
208
|
|
201
|
-
input= torch.randn(128,20)
|
209
|
+
# input= torch.randn(128,20)
|
202
|
-
|
203
|
-
|
204
|
-
|
210
|
+
|
211
|
+
|
212
|
+
|
205
|
-
print(net(input))
|
213
|
+
# print(net.forward(input))
|
214
|
+
|
215
|
+
print(net)
|
206
216
|
|
207
217
|
# params = list(net.parameters())
|
208
218
|
|
@@ -212,6 +222,10 @@
|
|
212
222
|
|
213
223
|
|
214
224
|
|
225
|
+
|
226
|
+
|
227
|
+
|
228
|
+
|
215
229
|
```
|
216
230
|
|
217
231
|
|
@@ -222,17 +236,85 @@
|
|
222
236
|
|
223
237
|
```
|
224
238
|
|
239
|
+
[[[-0.0633, 0.0949, -0.1568],
|
240
|
+
|
241
|
+
[ 0.0500, 0.0413, 0.0849],
|
242
|
+
|
243
|
+
[-0.1799, -0.1010, -0.0777]],
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
[[ 0.0214, 0.0727, -0.1571],
|
248
|
+
|
249
|
+
[-0.1234, 0.1118, -0.1654],
|
250
|
+
|
251
|
+
[-0.1792, 0.1694, -0.1765]],
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
[[ 0.1505, -0.1342, 0.1366],
|
256
|
+
|
257
|
+
[-0.0817, -0.1172, -0.0465],
|
258
|
+
|
225
|
-
|
259
|
+
[-0.1790, 0.0543, -0.0363]]],
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
|
264
|
+
|
226
|
-
|
265
|
+
[[[-0.1117, -0.1135, -0.0415],
|
266
|
+
|
267
|
+
[ 0.0203, 0.0146, -0.1017],
|
268
|
+
|
269
|
+
[ 0.1475, -0.0052, -0.1613]],
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
[[-0.0897, -0.1899, 0.1297],
|
274
|
+
|
275
|
+
[-0.1068, -0.1308, -0.0407],
|
276
|
+
|
277
|
+
[ 0.1829, -0.0268, 0.1219]],
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
[[ 0.0152, 0.0256, 0.0292],
|
282
|
+
|
283
|
+
[-0.0563, 0.0864, -0.0593],
|
284
|
+
|
227
|
-
|
285
|
+
[ 0.1793, 0.0180, 0.1540]]]], requires_grad=True)
|
286
|
+
|
228
|
-
|
287
|
+
Net(
|
288
|
+
|
229
|
-
|
289
|
+
(relu): ReLU()
|
230
|
-
|
231
|
-
|
290
|
+
|
232
|
-
|
233
|
-
|
291
|
+
(conv1): Conv2d(3, 16, kernel_size=(3, 3), stride=(1, 1))
|
234
|
-
|
292
|
+
|
235
|
-
|
293
|
+
(pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
294
|
+
|
295
|
+
(conv2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1))
|
296
|
+
|
297
|
+
(pool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
298
|
+
|
299
|
+
(conv3): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1))
|
300
|
+
|
301
|
+
(pool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
302
|
+
|
303
|
+
(conv4): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1))
|
304
|
+
|
305
|
+
(pool4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
306
|
+
|
307
|
+
(conv5): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1))
|
308
|
+
|
309
|
+
(pool5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
|
310
|
+
|
311
|
+
(fc1): Linear(in_features=2304, out_features=120, bias=True)
|
312
|
+
|
313
|
+
(fc2): Linear(in_features=120, out_features=84, bias=True)
|
314
|
+
|
315
|
+
(fc3): Linear(in_features=84, out_features=2, bias=True)
|
316
|
+
|
317
|
+
)
|
236
318
|
|
237
319
|
```
|
238
320
|
|
@@ -260,7 +342,7 @@
|
|
260
342
|
|
261
343
|
・Linearの引数。ドキュメントではout_featureってなっていましたがどういう値をいれればいいのかわかりません。
|
262
344
|
|
263
|
-
|
345
|
+
|
264
346
|
|
265
347
|
・forwardがどのようになっているのか知りたいです
|
266
348
|
|