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

回答編集履歴

3

修正

2020/06/30 19:18

投稿

tiitoi
tiitoi

スコア21960

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

修正

2020/06/30 19:18

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,4 +1,4 @@
1
- > 質問2
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

修正

2020/06/30 19:14

投稿

tiitoi
tiitoi

スコア21960

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 + 1
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