2017-01-29 10 views
0

私はJuliaのMXNetの象徴的なAPIのニュアンスを理解するのに苦労しています。 act_typeシンボル:reluが割り当てられているのはなぜJuliaのMXNetのシンボリックAPIに関する問い合わせ

act1 = mx.Activation(data = fc1, name=:relu1, act_type=:relu) 

:私は、次の行を持っているMXNetマニュアルに例を見ましたか。?

:reluは関数ポインタですか?そうでない場合は、値を:reluシンボルに割り当てますか?データにシンボルが割り当てられないのはなぜですか?名前に文字列ではなくシンボルが割り当てられるのはなぜですか?

答えて

1

記号は、変数 "Symbol"の有効な値です。私の推測では、内部では、渡されたシンボルに応じて特定のサブルーチンを適用するスタイルステートメントがあります。または、あなたが言ったように、シンボル自体が特定の関数を呼び出すために使用されます。文字列ではなく記号であるという事実はおそらく単なる設計問題です。文字列引数をとり、その文字列を使って関数を呼び出すなどの関数を定義するのを止めるものは何もありません。

シンボルは「関数ハンドル」と同じではないことに注意してください(これはあなたが混乱していると思います)。言い換えれば、いいえ、あなたはこの構文で引数として "関数ポインタ"を渡していません。

関数を呼び出すときに、実際のデータを最初の引数として渡すことになっている可能性があるため、データには記号が割り当てられていません。

+0

あなたが通過したシンボルに応じて実行するスイッチスタイルステートメントは、 - reluシンボルが何らかの名前でチェックできることを意味します。 typeof(:relu)は結果に-Symbolを与えます。だから、どのタイプのシンボルが –

+0

に渡されたかをどうやって確認することができますか?それは 'if name ==:relu;という単純なものかもしれません。 callrelu(); elseif name ==:エクスポ; callexpo();終わり。ソースコードを見ると、MXNetライブラリはPythonベースのようです。シンボルはPyCall内でPythonモジュールの各メンバーを呼び出すために使用されることがあります。例えばPythonの中で 'mx.relu'を持っていれば、通常は' mx [:relu] 'になるjuliaにあります。これがここで起こっている可能性があります。 'relu'は' mx' pythonモジュールのメンバーです。 –

+0

と思ったので、PyCallの構文です。 Pythonの同等のドキュメントを見てください。 (たとえば、pipを使用してmxnetをインストールし、pythonで 'mxnetをインポート 'してから' help(mxnet.symbol.Activation) 'を実行します)。 Pythonモジュールがインストールされている限り、 'pyCall'、' mxnet = pyimport( "mxnet"); '、' pybuiltin( "help")を使ってjuliaを使って同じ情報を得ることができます(mxnet [ :シンボル] [:アクティベーション]) ' –

関連する問題