回答編集履歴
3
修正
answer
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
callable (呼び出し可能) とは、() で関数呼び出しができるという要件を意味しますが、質問のコードだと、`__call__()` が実装されていないクラス `A` に対して、関数呼び出ししようとしているので、できないいうエラーです。
|
32
32
|
|
33
|
-
|
33
|
+
「nn.Module を継承したクラスで forward() を実装すると、model() のように呼び出した際に forward() が呼ばれる事」は以下のコードで説明がつきます。
|
34
34
|
|
35
35
|
```python
|
36
36
|
class Myclass:
|
2
修正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
## 質問2
|
2
2
|
> self(x)とは何ですか?
|
3
3
|
|
4
4
|
`self` は自身のインスタンスを指します。
|
@@ -16,13 +16,13 @@
|
|
16
16
|
print(obj(1)) # 2
|
17
17
|
```
|
18
18
|
|
19
|
-
質問1
|
19
|
+
## 質問1
|
20
20
|
> 無いのであればなぜこの関数は書かれていて、他のどこでニューラルネットワークに学習データを与えているのでしょうか?
|
21
21
|
|
22
22
|
Pytorch では、nn.Module クラスの `__call__()` 関数内で `forward()` を呼び出すようになっています。
|
23
23
|
なので、`nn.Module` クラスを継承したクラスで `forward()` 関数を実装しておけば、そのクラスのインスタンスに対して、() で関数呼び出ししたら、実質的に `forward()` の中身が呼ばれるという仕組みです。
|
24
24
|
|
25
|
-
質問3
|
25
|
+
## 質問3
|
26
26
|
> 以下に質問2に対する自分の理解の為に作成したコードとエラー文を載せておきます。
|
27
27
|
|
28
28
|
> TypeError: 'A' object is not callable
|
1
修正
answer
CHANGED
@@ -30,17 +30,19 @@
|
|
30
30
|
|
31
31
|
callable (呼び出し可能) とは、() で関数呼び出しができるという要件を意味しますが、質問のコードだと、`__call__()` が実装されていないクラス `A` に対して、関数呼び出ししようとしているので、できないいうエラーです。
|
32
32
|
|
33
|
+
質問の内容は以下のコードで説明がつきます。
|
34
|
+
|
33
35
|
```python
|
34
36
|
class Myclass:
|
35
37
|
def __call__(self, x):
|
36
|
-
return x
|
38
|
+
return self.hoge(x)
|
37
39
|
|
38
40
|
def hoge():
|
39
41
|
pass
|
40
42
|
|
41
43
|
|
42
44
|
class MySubClass(Myclass):
|
43
|
-
def hoge(self, x):
|
45
|
+
def hoge(self, x): # 親クラスの関数 hoge() をオーバーライド
|
44
46
|
return x + 1
|
45
47
|
|
46
48
|
|