まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【ひとり読書会】PyTorch&深層学習プログラミング(第9回)

どうも、カタミチです。

さて、今日も「最短コースでわかる PyTorch&深層学習プログラミング」のひとり読書会、やっていきますかねー。

1章も今日でラストですね。さっそく行きましょう!

 

1-6. インスタンスを関数として使う

今回は、早速ですがコードを見てみましょう。

すごく簡素なクラスが定義されていますね。「__call__」という関数のみが定義されています。「__」で囲まれているところからして、「__init__」と同じく、クラス自身に作用する特殊な関数ってことになりそうです。

どうやらこの「__call__」は、クラスから生成したインスタンスを呼び出し可能な関数にするという能力を持っているようです。

どういう感じで使うかというと…

こういう感じ。

クラスHから生成したインスタンスhが、上で定義された関数\(y = 2x^2 + 2\)として振る舞っている様子が分かります。ダメ押しでグラフも書いてみると…

はい、こうですね。

ちなみに、「__call__」の部分を「__init__」に書き換えてみましたが、うまく動きませんでした。あくまでも、インスタンスを関数として振る舞わせるには「__call__」関数を使う必要があるようです。

 

ちなみに、当然ですが、関数を実現したいだけならこんな感じ↓で書けばいいことになります。

わざわざクラスで表現するのにはきっとメリットがあるんでしょうけど、今の私にはまだよく分かりません。何となく思うのは、関数自体を独立したインスタンスとして立てられるので、分身の術みたいにポコポコ増やせる…って当たりでしょうか。

いずれにせよ、PyTorchのライブラリ内では良く使われるらしいので、書き方には慣れておく必要がありそうですねー。

 

ということで

これにて1章「ディープラーニングのためのPythonのツボ」が終わりですね。

西遊記で言うなら、孫悟空が筋斗雲と、如意棒を手に入れた!…ってあたりですかねー(相変わらず引っ張られる西遊記)。筋斗雲が「微分」で、如意棒が「合成関数」…ってとこでしょうかね。そういえば、毛を抜いて息を吹くと分身ができる術も、つい今しがた学びましたね(こじつけ)。この章では、あらかじめつまずきそうなポイントを解説してくれたようですが、単体の知識としても色々と学びがありました。

さてそろそろ、得意げにイキり散らした挙げ句にお釈迦様の手のひらから逃げられず、500年くらい岩の下に閉じ込められるとしますかねー。ちなみに私は、孫悟空と言えば堺正章世代です(古)

ではまた。