TensorFlowメモ(clipped_relu)
Tensor演算に関するメモ。
前回見たDeepSpeechのモデルでは、Denseレイヤの活性化関数で「clipped_relu」を指定した。
x = TimeDistributed(Dense(units=fc_size,
kernel_initializer=init,
bias_initializer=init,
activation=clipped_relu),
name='dense_1')(input_data)
APIで提供されているわけではなく、tf.keras.backend.reluに「max_value」を指定して実行する。
def clipped_relu(x): return tf.keras.backend.relu(x, max_value=20)
どのような挙動なのか、記録しておく。
テストデータを用意。
import numpy as np data = np.arange(start=-5, stop=5) print(data)
テストデータ出力結果。
[-5 -4 -3 -2 -1 0 1 2 3 4]
Tensorに変換。
import tensorflow as tf x = tf.cast(data, tf.float32) print(x)
変換後のテストデータ出力結果。
tf.Tensor([-5. -4. -3. -2. -1. 0. 1. 2. 3. 4.], shape=(10,), dtype=float32)
今回は「max_value」を”3"に指定してみる。
x_ = tf.keras.backend.relu(x, max_value=3) print(x_)
出力結果。
「max_value」を超えるものは、「max_value」で置き換えられる。
(「max_value」と等しいものはそのまま)
tf.Tensor([0. 0. 0. 0. 0. 0. 1. 2. 3. 3.], shape=(10,), dtype=float32)
出力値が一定の大きさを超えないようにするために使う。