FullyConnected
のようなビルド前の高水準関数を使用してモデルを作成できます。たとえば、このようにして行列と行列演算を明示的に使ってMXNetでモデルを構築する方法は?
X = mx.sym.Variable('data')
P = mx.sym.FullyConnected(data = X, name = 'fc1', num_hidden = 2)
私はシンボリック変数X
に依存しているシンボリック変数P
を取得します。言い換えれば、モデルを定義し、fit
とpredict
のような演算を実行するために使用できる計算グラフがあります。
P
からX
を別の方法で表現したいと思います。より詳細には、高レベルの機能(FullyConnected
など)を使用する代わりに、低レベルのテンソル演算(行列乗算など)とモデルパラメータを表す記号変数を使用して、P
とX
の間の関係を明示的に指定したいとします重み行列)。
は上記と同じを達成するために、例えば、私はfollowigを試みた:
W = mx.sym.Variable('W')
B = mx.sym.Variable('B')
P = mx.sym.broadcast_plus(mx.sym.dot(X, W), B)
しかし、P
得られるこの方法は、以前得P
と等価ではありません。私はそれを同じように使うことはできません。特に、私が理解する限り、MXNetはW
とB
に値がないことを訴えています(これは意味があります)。
私はまた、(彼らは値を持っているように)別の方法でW
とB
を宣言しようとしている:それは同様に動作しません
w = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
b = np.array([7.0, 8.0])
W = mx.nd.array(w)
B = mx.nd.array(b)
。 MXNetはシンボリック変数を期待しているので不満を持ちますが、代わりにnd-arrayを取得すると思います。
私の質問は、低レベルのテンソル演算(行列乗算など)とモデルパラメータ(重み行列など)を表す明示的なオブジェクトを使用してモデルを構築する方法です。