回帰タスク用に完全に接続された(高密度の)レイヤーを構築したいと思います。私は通常、次のようなKeras APIを使用して、TF2でそれを行います。
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units=2, activation='sigmoid', input_shape=(1, )))
model.add(tf.keras.layers.Dense(units=2, activation='linear'))
model.compile(optimizer='adam', loss='mae')
model.fit(inp_data, out_data, epochs=1000)
次に、カスタムレイヤーを作成します。レイヤーは、たとえば10ユニットで構成され、8ユニットには事前定義された固定のトレーニング不可能な重みとバイアスがあり、2ユニットにはランダムに選択された重みとバイアスがあり、ネットワークによってトレーニングされます。Tensorflowでどのように定義できるか誰かが考えていますか?
Kerasレイヤーはtrainable
、True
デフォルトで、トレーニングするかどうかを示すパラメーターを受け取る場合があります。訓練不可能な層は、初期化子によって与えられた値を保持するだけです。私が正しく理解していれば、部分的にしか訓練できない1つのレイヤーが必要です。これは、既存のレイヤーでは不可能です。カスタムレイヤークラスでそれを行うこともできますが、2つの単純なレイヤーを使用してそれらを連結することで、同等の動作を実現できます(アクティベーションが要素ごとに機能する場合、およびソフトマックスのように機能しない場合)。レイヤーでは、連結後にそのアクティベーションを適用できます)。これがどのように機能するかです:
inputs = tf.keras.Input(shape=(1,))
# This is the trainable part of the layer
layer_train = tf.keras.layers.Dense(units=8, activation='sigmoid')(inputs)
# This is the non-trainable part
layer_const = tf.keras.layers.Dense(units=2, activation='sigmoid', trainable=False)(inputs)
# Merge both parts
layer = tf.keras.layers.Concatenate()([layer_train, layer_const])
# Make model
model = tf.keras.Model(inputs=inputs, outputs=layer)
# ...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加