グラフで実行された計算を、同じ演算を行うカスタム演算で置き換えようとしています。グラフ内のノードをテンソルフローの変数依存性を持つカスタム演算子に置き換える
はグラフが一定A
と重量W
変数を持っているとしましょう、私はこれらの2つの入力を取り、(重み更新の最後のステップを除く)全体の計算を行うために、カスタムOPを作成します。
custom_op_tensor = custom_module.custom_op([A,W])
g_def = tf.get_default_graph().as_graph_def()
input_map = { tensor.name : custom_op_tensor }
train_op, = tf.import_graph_def(g_def, input_map=input_map, return_elements=[train_op])
後インポートグラフdefには、2つのW
があります.1つは元のグラフdefから、もう1つはインポートされたグラフです。列車を運行すると、カスタムオペレーションは古いW
を読み終わり、新しいW
が更新されます。その結果、勾配の降下は、正しいことをすることに失敗してしまいます。
問題は、入力重みテンソルW
を必要とするcustom_opのインスタンス化です。新しいW
は、インポート後にのみ認識されます。そして、インポートにはカスタムオペレーションが必要です。 この問題を回避するにはどうすればよいですか?
グラフのopを他のopに置き換える方法をお尋ねします。最近まで、グラフは追加専用であったため、これを行うことはできませんでした。しかし、最近、グラフエディタライブラリが追加されました。おそらくそこに役立つ機能がいくつかあります。 - https://www.tensorflow.org/versions/r0.11/api_docs/python/contrib.graph_editor.html#library-overview –