ichou1のブログ

主に音声認識、時々、データ分析のことを書く

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)

出力値が一定の大きさを超えないようにするために使う。