この論文で説明されているように、私は通常の回帰のモデルを作成しようとしています。その大部分は最終層で重みを共有することですが、ランクの単調性を得るためのバイアスではありません(基本的に、P [Y> N]がそのようなNに対して常にP [Y> N-1]より大きくなければならないことを保証するため) 。値が非常に少ない値がいくつかあるので、これは私にとって非常に望ましいことですが、それでもそれらの確率を取得したいと思います。今のところ、私はそれが数をエンコードする方法を実装しました、そして時々P(Y> 5)> P(Y> 4)の確率として単調性をランク付けしません。
Kerasでウェイトシェアリングを達成できますが、バイアスシェアリングは達成できませんか?機能APIには重みとバイアスを共有する方法があることは知っていますが、それはこのシナリオでは役に立ちません。助けてくれる人に感謝します。
編集:重みを共有するが、1つのレイヤー内でN個のニューロンとバイアスを共有しないか、N個のレイヤー間で問題を解決します。また、Dense()のuse_bias引数をfalseに設定し、ある種のカスタムBiasレイヤーを作成することでも問題を解決できると思いますが、その方法がわかりません。
6つのニューロンと5つの入力の方程式はこれだと思います
op1 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b1
op2 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b2
op3 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b3
op4 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b4
op5 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b5
op6 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b6
ここで、w1からw5は重み、z1からz5は入力、b1からb6はバイアス項です。
これを実現する方法の1つは、カスタムbias
レイヤーを定義することです。これを行う方法は、次のとおりです。PS:必要に応じて入力形状/初期化子を変更します。
import tensorflow as tf
print('TensorFlow:', tf.__version__)
class BiasLayer(tf.keras.layers.Layer):
def __init__(self, units, *args, **kwargs):
super(BiasLayer, self).__init__(*args, **kwargs)
self.bias = self.add_weight('bias',
shape=[units],
initializer='zeros',
trainable=True)
def call(self, x):
return x + self.bias
z1 = tf.keras.Input(shape=[1])
z2 = tf.keras.Input(shape=[1])
z3 = tf.keras.Input(shape=[1])
z4 = tf.keras.Input(shape=[1])
z5 = tf.keras.Input(shape=[1])
dense_layer = tf.keras.layers.Dense(units=10, use_bias=False)
op1 = BiasLayer(units=10)(dense_layer(z1))
op2 = BiasLayer(units=10)(dense_layer(z2))
op3 = BiasLayer(units=10)(dense_layer(z3))
op4 = BiasLayer(units=10)(dense_layer(z4))
op5 = BiasLayer(units=10)(dense_layer(z5))
model = tf.keras.Model(inputs=[z1, z2, z3, z4, z5], outputs=[op1, op2, op3, op4, op5])
model.summary()
出力:
TensorFlow: 2.1.0-dev20200107
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
input_2 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
input_3 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
input_4 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
input_5 (InputLayer) [(None, 1)] 0
__________________________________________________________________________________________________
dense (Dense) (None, 10) 10 input_1[0][0]
input_2[0][0]
input_3[0][0]
input_4[0][0]
input_5[0][0]
__________________________________________________________________________________________________
bias_layer (BiasLayer) (None, 10) 10 dense[0][0]
__________________________________________________________________________________________________
bias_layer_1 (BiasLayer) (None, 10) 10 dense[1][0]
__________________________________________________________________________________________________
bias_layer_2 (BiasLayer) (None, 10) 10 dense[2][0]
__________________________________________________________________________________________________
bias_layer_3 (BiasLayer) (None, 10) 10 dense[3][0]
__________________________________________________________________________________________________
bias_layer_4 (BiasLayer) (None, 10) 10 dense[4][0]
==================================================================================================
Total params: 60
Trainable params: 60
Non-trainable params: 0
__________________________________________________________________________________________________
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加