2017-11-28 5 views
0

カスタムレイヤーを実装したいと思います。私のカスタムレイヤの2つの入力は2つのテンソルです.2つの別々の2D畳み込みレイヤから来ていますが、その例はありますか?ケラスで2テンソルの入力を持つカスタムレイヤーを定義する

+0

kerasバックエンド関数を使用して関数を書き直せますか? numpyを使用しようとすると、バックプロパゲーションのためのコネクトインがありません。 ---ラムダまたはカスタムレイヤの選択は、レイヤ内で訓練可能なウェイトを使用するかどうかによって異なります。 (純粋な計算の場合は、ラムダを使用してください)。 –

+0

ダニエルにお返事ありがとうございました。私はバックプロパゲーションを受けたいと思います。私が実装したいレイヤーは、Faster rcnn Networkの提案レイヤーです。だから訓練可能なものはない。私の混乱は、私は体重がない場合どのように私は逆伝播を持つことができますか? – Tassou

+0

ウェイトは必要ありません(モデル全体に​​ウェイトが必要ですが、すべてのレイヤーにウェイトが必要です)。しかし、(自動)バックプロパゲーションをそのまま維持するためには、テンソルに直接ケラスバックエンド関数(またはテンソルフロー/テーラー関数)が必要です。 numpyを使用すると接続が切断されます。 –

答えて

0

訓練が必要なわけではないので、ラムダ関数も実行します。または、カスタムレイヤーをそのまま使用し、trainableをFalseに設定することもできます。ウェイトはこのレイヤーでは決して更新されません。ここで行うことは、モデル内の次のレイヤーに伝播され、コメントに記載されているように、バックプロックはウェイト付きで他のレイヤーに影響します。だから間違いなくあなたのモデルは何かを学ぶでしょう。

このレイヤーに学習を追加して結果を確認する場合は、カスタムレイヤーを使用することをおすすめします。ラムダ関数ではこれを行うことはできません。 1つ(カーネル)を追加する場合は、 'call'メソッドで使用する必要があります。あなたのモデルは、トレーニング中にエラーが発生します。

+0

Ajjoありがとうございます。しかし、カスタムレイヤーを使用する場合にバックプロパゲーションするために、numpy関数の代わりにバックエンド関数を使用してrpn_to_roi関数を再実装する必要がありますか? – Tassou

+0

はい。バックエンド機能を使用する必要があります。 – Ajjo

+0

例えば、** anchor_x =(anchor_size * anchor_ratio [0])/ C.rpn_stride **はこのように実装されます** anchor_x = K.dot(K.dot(anchor_size、anchor_ratio [0])、K .variable(値= 1/C.rpn_stride))**?これは正しいですか? – Tassou

関連する問題