1. ホーム
  2. python

[解決済み] theano.function-どのように機能するのですか?

2022-02-14 10:27:41

質問事項

公式ドキュメンテーションを読み、こちらのコメントも読みました。 https://github.com/Theano/theano/blob/ddfd7d239a1e656cee850cdbc548da63f349c37d/theano/compile/function.py#L74-L324 とある人が言っていましたが、これはTheanoに記号計算グラフを実際のプログラムにコンパイルして実行するように指示しているのだそうです。

しかし、例えばこのコードでは、どうやって知るのかがまだわかりません。

self.update_fun = theano.function(
        inputs=[self.input_mat, self.output_mat],
        outputs=self.cost,
        updates=updates,
        allow_input_downcast=True)

ボディがないのにどうやって計算するんだ?つまり、この貼り付けられた行の上にあるいくつかのコードでそれらのすべてが計算されているのですが、、、theano.functionは実際にそれらの計算方法を見つけるためにソースコードを見ているのでしょうか?私はただ推測しているだけで、それがどのように機能するのか本当に知りたいのです。

多分、私が問題にしているのは、".という説明の部分です。 記号計算グラフを実際のプログラムにコンパイルするようにTheanoに指示する。 というのも、私は記号計算グラフが何なのか全く分からないので、先ほどの質問と非常に関連する別の質問になってしまうのです。

解説をお願いします。

どのように解決するのですか?

私は専門家ではありませんが、私なりの説明をします。

はい、上のコードで 'body' が定義されています。しかし theano は、pythonのインタプリタがするように、そのコードを直接「解釈」しているわけではありません。問題のコードはただ theano オブジェクトを作成し theano を使用して、目的の関数をコンパイルすることができます。簡単な例で、どのように関数を作成するか見てみましょう。 f(x) = 2x + x**3 .

まず、シンボル入力変数を作成します。 x . 次に、関数の「本体」を定義します。 f(x) :

y = 2 * x + x**3 # defines a new symbolic variable which depends on x

これは y オブジェクトは、数式を表すグラフに相当します。次のようなものです。 Plus(Times(2,x), Power(x,3)) . 最後に theano.functioninput=xoutput=y . 次に theano は魔法をかけ、実際の関数をコンパイルします。 f(x) = y = 2 * x + x**3 に「含まれている」情報(グラフ)から y .

物事が明確になるのか?