在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使用日志模塊快速調(diào)試代碼并記錄異常信息
本文詳細介紹了Python logging日志模塊的使用方法,包括如何在代碼中使用logging記錄調(diào)試信息、如何設置日志級別、如何記錄異常信息等。通過本文的指南,讀者可以快速學會如何使用logging模塊進行調(diào)試,并保留有用的日志信息,便于后續(xù)排查問題和優(yōu)化代碼2023-04-04解決Python3.8運行tornado項目報NotImplementedError錯誤
這篇文章主要介紹了Python3.8運行tornado項目報NotImplementedError錯誤,本文給大家分享解決方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09詳解如何使用Python處理INI、YAML和JSON配置文件
在軟件開發(fā)中,配置文件是存儲程序配置信息的常見方式,INI、YAML和JSON是常用的配置文件格式,各自有著特定的結(jié)構和用途,Python擁有豐富的庫和模塊,本文將重點探討如何使用Python處理這三種格式的配置文件,需要的朋友可以參考下2023-12-12