2

入力の交換に関して対称な関数の Keras でニューラル ネットワーク モデルを作成する方法を探しています。簡単にするために、目的の関数が 2 つの変数に依存しx,y、スカラーを返すと仮定しますf=f(x,y)f(x,y)=f(y,x)さらに、が任意の に当てはまることがわかっていますx,y。この対称性が私の Keras ニューラル ネットワーク モデルによって正確に再現されることを保証するために選択する方法は何でしょうか?

明らかに、対称データを使用してモデルをトレーニングできますが、探しているのは、この対称性をモデルに「ハードコード」する方法です。

私は知っています、この質問は本当に基本的なようです。申し訳ありませんが、私が見落としていたこの質問に対する明白な答えがあれば、よろしくお願いします!

4

1 に答える 1

3

あなたの質問から、あなたが探しているのは、順方向と逆方向の両方で入力に適用される共有重みを持つレイヤーまたはレイヤーのセットを持つ便利な方法のようです。

つまり、畳み込みが時間ステップのセットを介してパターンを識別する方法に似ていますが、入力バッファーが循環していると見なされます。

これを実現する便利な方法は、特別な「畳み込み」レイヤーを再利用可能な補助モデル内に配置し、結果を最大プールすることです。次のようなもの:

from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model
from tensorflow.keras import backend as K

def make_inner_model():
  inp = Input(shape=(2,))
  h1 = Dense(8, activation='relu')(inp)
  out = Dense(1)(h1)
  model = Model(inp, out)
  return model

def make_model(inner_model):
  inp = Input(shape=(2,))
  rev = Lambda(lambda x: K.concatenate([x[:, 1:], x[:, 0:1]], axis=1))(inp)
  r1 = inner_model(inp)
  r2 = inner_model(rev)
  out = Maximum()([r1, r2])
  model = Model(inp, out)
  model.compile('adam', 'mse')
  return model

inner = make_inner_model()
model = make_model(inner)
model.summary()
于 2019-07-04T07:28:50.387 に答える