0

TensorFlow を使用してネットワークを実装し、コードで次のことを行うモデルを作成しました。

def multilayer_perceptron(x, weights, biases):
    layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"])
    layer_1 = tf.nn.relu(layer_1)
    out_layer = tf.add(tf.matmul(layer_1, weights["out"]), biases["out"])
    return out_layer

重みとバイアスを次のように初期化します。

weights = {
    "h": tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    "out": tf.Variable(tf.random_normal([n_hidden_1, n_classes]))
    }

biases = {
    "b": tf.Variable(tf.random_normal([n_hidden_1])),
    "out": tf.Variable(tf.random_normal([n_classes]))
    }

ここで、カスタム アクティベーション関数を使用したいと考えています。したがって、次のように定義されtf.nn.relu(layer_1)たカスタム アクティベーション関数に置き換えました。custom_sigmoid(layer_1)

def custom_sigmoid(x):
    beta = tf.Variable(tf.random.normal(x.get_shape[1]))
    return tf.sigmoid(beta*x)

betaトレーニング可能なパラメーターはどこにありますか。TensorFlow が使用できるように派生物を実装する方法がわからないため、これは機能しないことに気付きました。

質問: TensorFlow でカスタム アクティベーション関数を使用するにはどうすればよいですか? 助けていただければ幸いです。

4

2 に答える 2

4

私は自分自身の質問に答えようとします。ここに私がしたことと、うまくいくように見えるものがあります:

まず、カスタム アクティベーション関数を定義します。

def custom_sigmoid(x, beta_weights):
    return tf.sigmoid(beta_weights*x)

次に、活性化関数の重みを作成します。

beta_weights = {
    "beta1": tf.Variable(tf.random_normal([n_hidden_1]))
    }

最後に、モデル関数に追加beta_weightsし、アクティベーション関数を次のように置き換えますmultilayer_perceptron()

def multilayer_perceptron(x, weights, biases, beta_weights):
    layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"])
    #layer_1 = tf.nn.relu(layer_1) # Old
    layer_1 = custom_sigmoid(x, beta_weights["beta1"]) # New
    out_layer = tf.add(tf.matmul(layer_1, weights["out"]), biases["out"])
    return out_layer
于 2018-04-20T11:38:04.887 に答える