在Tensorflow中實現(xiàn)leakyRelu操作詳解(高效)
從github上轉(zhuǎn)來,實在是厲害的想法,什么時候自己也能寫出這種精妙的代碼就好了
代碼如下:
我做了些改進,因為實在tensorflow中使用,就將原來的abs()函數(shù)替換成了tf.abs()
import tensorflow as tf
def LeakyRelu(x, leak=0.2, name="LeakyRelu"):
with tf.variable_scope(name):
f1 = 0.5 * (1 + leak)
f2 = 0.5 * (1 - leak)
return f1 * x + f2 * tf.abs(x) # 這里和原文有不一樣的,我沒試驗過原文的代碼,但tf.abs()肯定是對的
補充知識:激活函數(shù)ReLU、Leaky ReLU、PReLU和RReLU
“激活函數(shù)”能分成兩類——“飽和激活函數(shù)”和“非飽和激活函數(shù)”。

sigmoid和tanh是“飽和激活函數(shù)”,而ReLU及其變體則是“非飽和激活函數(shù)”。使用“非飽和激活函數(shù)”的優(yōu)勢在于兩點:
1.首先,“非飽和激活函數(shù)”能解決所謂的“梯度消失”問題。
2.其次,它能加快收斂速度。
Sigmoid函數(shù)需要一個實值輸入壓縮至[0,1]的范圍
σ(x) = 1 / (1 + exp(−x))
tanh函數(shù)需要講一個實值輸入壓縮至 [-1, 1]的范圍
tanh(x) = 2σ(2x) − 1
ReLU
ReLU函數(shù)代表的的是“修正線性單元”,它是帶有卷積圖像的輸入x的最大函數(shù)(x,o)。ReLU函數(shù)將矩陣x內(nèi)所有負值都設為零,其余的值不變。ReLU函數(shù)的計算是在卷積之后進行的,因此它與tanh函數(shù)和sigmoid函數(shù)一樣,同屬于“非線性激活函數(shù)”。這一內(nèi)容是由Geoff Hinton首次提出的。
ELUs
ELUs是“指數(shù)線性單元”,它試圖將激活函數(shù)的平均值接近零,從而加快學習的速度。同時,它還能通過正值的標識來避免梯度消失的問題。根據(jù)一些研究,ELUs分類精確度是高于ReLUs的。下面是關于ELU細節(jié)信息的詳細介紹:

Leaky ReLUs
ReLU是將所有的負值都設為零,相反,Leaky ReLU是給所有負值賦予一個非零斜率。Leaky ReLU激活函數(shù)是在聲學模型(2013)中首次提出的。以數(shù)學的方式我們可以表示為:

ai是(1,+∞)區(qū)間內(nèi)的固定參數(shù)。
參數(shù)化修正線性單元(PReLU)
PReLU可以看作是Leaky ReLU的一個變體。在PReLU中,負值部分的斜率是根據(jù)數(shù)據(jù)來定的,而非預先定義的。作者稱,在ImageNet分類(2015,Russakovsky等)上,PReLU是超越人類分類水平的關鍵所在。
隨機糾正線性單元(RReLU)
“隨機糾正線性單元”RReLU也是Leaky ReLU的一個變體。在RReLU中,負值的斜率在訓練中是隨機的,在之后的測試中就變成了固定的了。RReLU的亮點在于,在訓練環(huán)節(jié)中,aji是從一個均勻的分布U(I,u)中隨機抽取的數(shù)值。形式上來說,我們能得到以下結(jié)果:

總結(jié)
下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:

PReLU中的ai是根據(jù)數(shù)據(jù)變化的;
Leaky ReLU中的ai是固定的;
RReLU中的aji是一個在一個給定的范圍內(nèi)隨機抽取的值,這個值在測試環(huán)節(jié)就會固定下來。
以上這篇在Tensorflow中實現(xiàn)leakyRelu操作詳解(高效)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python中使用jpype調(diào)用Jar包中的實現(xiàn)方法
這篇文章主要介紹了Python中使用jpype調(diào)用Jar包中的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Tensorflow分類器項目自定義數(shù)據(jù)讀入的實現(xiàn)
這篇文章主要介紹了Tensorflow分類器項目自定義數(shù)據(jù)讀入的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
Python-Tkinter Text輸入內(nèi)容在界面顯示的實例
今天小編就為大家分享一篇Python-Tkinter Text輸入內(nèi)容在界面顯示的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
pytorch方法測試詳解——歸一化(BatchNorm2d)
今天小編就為大家分享一篇pytorch方法測試詳解——歸一化(BatchNorm2d),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python標準庫之循環(huán)器(itertools)介紹
這篇文章主要介紹了Python標準庫之循環(huán)器(itertools)介紹,本文講解了無窮循環(huán)器、函數(shù)式工具、組合工具、groupby()、其它工具等內(nèi)容,需要的朋友可以參考下2014-11-11
Python 的 sum() Pythonic 的求和方法詳細
Python 的內(nèi)置函數(shù)sum()是一種對數(shù)值列表求和的有效且Pythonic 的方法。將多個數(shù)字相加是許多計算中常見的中間步驟,因此sum()對于 Python 程序員來說是一個非常方便的工具。下面文章就讓我們一起來看具體內(nèi)容吧2021-10-10

