2017-07-12 10 views
1

ケラスモデル内でテンソルフロー演算を使用しようとしています。以前はラムダレイヤーでラップしようとしましたが、レイヤーの逆伝播を無効にすると思います。ケラスモデルのテンソルフロー

より具体的には、Kerasレイヤーに移植することなく、のレイヤーをKerasモデルで使用しようとしています(後ほどtensorflowにデプロイしてください)。これらのレイヤーを共有ライブラリのフォームでコンパイルし、これらをPythonにロードすることができます。これは私にテンソルフロー操作を与え、私はKerasモデルでこれをどのように組み合わせるのか分かりません。

たとえば、Conv2Dレイヤーがtf.nn.conv2d opに置き換えられたKeras MNISTモデルの簡単な例は、私が探しているものと正確に同じです。

私はthisチュートリアルを見てきましたが、私が探しているものとは逆のことをしているようです。テンソルフローグラフにケラス層を挿入しているようです。私は正反対のことを探しています。

敬具、 ハンス

+0

'ラムダ 'レイヤーはバックプロパゲーションを無効にすべきではありません。あなたがそれを試みたとき何が起こったのですか? – mrry

+0

おそらく私は何が起こったのか誤解しましたが、(作業中の)Keras MNISTの例をtf操作(https://gist.github.com/hgaiser/9d38ac49424f400c161c8086ff864d08)に変更しました。そのネットワークは訓練していないようでした(0.1 acc)。また、その要約は訓練可能なパラメータを示さない。分かりやすくするために、私のネットワークがバックプロパゲーションを全くしていないというわけではありません。ちょうどラムダ層がバックプロパゲーションに寄与していないということです。ネットワークがラムダレイヤーのみで構成されている場合、トレーニングはまったくありません。 –

答えて

1

およそ2週間が経過していると、私が今、自分の質問に答えることができていそうです。

thisデコレータを使用して登録すると、テンソルフローがグラデーションをルックアップできるようです。執筆時点では、この機能は(まだ)C++では利用できません。これは私が探していたものです。回避策は、C++で通常のopを定義し、前述のデコレータを使用してPythonメソッドでラップすることです。対応する勾配を持つこれらの関数がテンソルフローで登録されていると、逆伝播は「自動的に」起こります。

関連する問題