本次介紹prelu啟用函式,方法來自於何凱明***** 《delving deep into rectifiers:surpassing human-level performance on imagenet classification》.
prelu(parametric rectified linear unit), 顧名思義:帶引數的relu。二者的定義和區別如下圖:
如果ai=0,那麼prelu退化為relu;如果ai是乙個很小的固定值(如ai=0.01),則prelu退化為leaky relu(lrelu)。 有實驗證明,與relu相比,lrelu對最終的結果幾乎沒什麼影響。
prelu的幾點說明
(1) prelu只增加了極少量的引數,也就意味著網路的計算量以及過擬合的危險性都只增加了一點點。特別的,當不同channels使用相同的ai時,引數就更少了。
(2) bp更新ai時,採用的是帶動量的更新方式,如下圖:
上式的兩個係數分別是動量和學習率。
需要特別注意的是:更新ai時不施加權重衰減(l2正則化),因為這會把ai很大程度上push到0。事實上,即使不加正則化,試驗中ai也很少有超過1的。
(3) 整個**,ai被初始化為0.25。
方法一:
def parametric_relu(_x):
alphas = tf.get_variable('alpha', _x.get_shape()[-1],
initializer=tf.constant_initializer(0.0),
dtype=tf.float32)
pos = tf.nn.relu(_x)
neg = alphas * (_x - abs(_x)) * 0.5
return pos + neg
方法二:
def prelu(_x, scope=none):
"""parametric relu activation"""
with tf.variable_scope(name_or_scope=scope, default_name="prelu"):
_alpha = tf.get_variable("prelu", shape=_x.get_shape()[-1],
dtype=_x.dtype, initializer=tf.constant_initializer(0.1))
return tf.maximum(0.0, _x) + _alpha * tf.minimum(0.0, _x)
方法三:
import tensorflow as tf
def prelu(_x, name=none):
if name is none:
name = "alpha"
_alpha = tf.get_variable(name,
shape=_x.get_shape(),
initializer=tf.constant_initializer(0.0),
dtype=_x.dtype)
return tf.maximum(_alpha*_x, _x)
tensorflow中tfrecords使用介紹
這篇文章主要講一下如何用tensorflow中的標準資料讀取方式簡單的實現對自己資料的讀取操作 主要分為以下兩個步驟 1 將自己的資料集轉化為 xx.tfrecords的形式 2 在自己的程式中讀取並使用.tfrecords進行操作 資料集轉換 為了便於講解,我們簡單製作了乙個資料,如下圖所示 程式...
Tensorflow中dynamic rnn的用法
1 api介面dynamic rnn cell,inputs,sequence length none,initial state none,dtype none,parallel iterations none,swap memory false,time major false,scope no...
TensorFlow中遮蔽warning的方法
tensorflow的日誌級別分為以下三種 tf cpp min log level 1 預設設定,為顯示所有資訊 tf cpp min log level 2 只顯示error和warining資訊 tf cpp min log level 3 只顯示error資訊 所以,當tensorflow出...