在Tensorflow中實(shí)現(xiàn)leakyRelu操作詳解(高效)
從github上轉(zhuǎn)來,實(shí)在是厲害的想法,什么時(shí)候自己也能寫出這種精妙的代碼就好了
原地址:簡易高效的LeakyReLu實(shí)現(xiàn)
代碼如下:
我做了些改進(jìn),因?yàn)閷?shí)在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) # 這里和原文有不一樣的,我沒試驗(yàn)過原文的代碼,但tf.abs()肯定是對的
補(bǔ)充知識:激活函數(shù)ReLU、Leaky ReLU、PReLU和RReLU
“激活函數(shù)”能分成兩類——“飽和激活函數(shù)”和“非飽和激活函數(shù)”。
sigmoid和tanh是“飽和激活函數(shù)”,而ReLU及其變體則是“非飽和激活函數(shù)”。使用“非飽和激活函數(shù)”的優(yōu)勢在于兩點(diǎn):
1.首先,“非飽和激活函數(shù)”能解決所謂的“梯度消失”問題。
2.其次,它能加快收斂速度。
Sigmoid函數(shù)需要一個實(shí)值輸入壓縮至[0,1]的范圍
σ(x) = 1 / (1 + exp(−x))
tanh函數(shù)需要講一個實(shí)值輸入壓縮至 [-1, 1]的范圍
tanh(x) = 2σ(2x) − 1
ReLU
ReLU函數(shù)代表的的是“修正線性單元”,它是帶有卷積圖像的輸入x的最大函數(shù)(x,o)。ReLU函數(shù)將矩陣x內(nèi)所有負(fù)值都設(shè)為零,其余的值不變。ReLU函數(shù)的計(jì)算是在卷積之后進(jìn)行的,因此它與tanh函數(shù)和sigmoid函數(shù)一樣,同屬于“非線性激活函數(shù)”。這一內(nèi)容是由Geoff Hinton首次提出的。
ELUs
ELUs是“指數(shù)線性單元”,它試圖將激活函數(shù)的平均值接近零,從而加快學(xué)習(xí)的速度。同時(shí),它還能通過正值的標(biāo)識來避免梯度消失的問題。根據(jù)一些研究,ELUs分類精確度是高于ReLUs的。下面是關(guān)于ELU細(xì)節(jié)信息的詳細(xì)介紹:
Leaky ReLUs
ReLU是將所有的負(fù)值都設(shè)為零,相反,Leaky ReLU是給所有負(fù)值賦予一個非零斜率。Leaky ReLU激活函數(shù)是在聲學(xué)模型(2013)中首次提出的。以數(shù)學(xué)的方式我們可以表示為:
ai是(1,+∞)區(qū)間內(nèi)的固定參數(shù)。
參數(shù)化修正線性單元(PReLU)
PReLU可以看作是Leaky ReLU的一個變體。在PReLU中,負(fù)值部分的斜率是根據(jù)數(shù)據(jù)來定的,而非預(yù)先定義的。作者稱,在ImageNet分類(2015,Russakovsky等)上,PReLU是超越人類分類水平的關(guān)鍵所在。
隨機(jī)糾正線性單元(RReLU)
“隨機(jī)糾正線性單元”RReLU也是Leaky ReLU的一個變體。在RReLU中,負(fù)值的斜率在訓(xùn)練中是隨機(jī)的,在之后的測試中就變成了固定的了。RReLU的亮點(diǎn)在于,在訓(xùn)練環(huán)節(jié)中,aji是從一個均勻的分布U(I,u)中隨機(jī)抽取的數(shù)值。形式上來說,我們能得到以下結(jié)果:
總結(jié)
下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:
PReLU中的ai是根據(jù)數(shù)據(jù)變化的;
Leaky ReLU中的ai是固定的;
RReLU中的aji是一個在一個給定的范圍內(nèi)隨機(jī)抽取的值,這個值在測試環(huán)節(jié)就會固定下來。
以上這篇在Tensorflow中實(shí)現(xiàn)leakyRelu操作詳解(高效)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
復(fù)習(xí)Python中的字符串知識點(diǎn)
這篇文章主要介紹了Python中字符串的一些知識點(diǎn),來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04Python使用日志模塊快速調(diào)試代碼并記錄異常信息
本文詳細(xì)介紹了Python logging日志模塊的使用方法,包括如何在代碼中使用logging記錄調(diào)試信息、如何設(shè)置日志級別、如何記錄異常信息等。通過本文的指南,讀者可以快速學(xué)會如何使用logging模塊進(jìn)行調(diào)試,并保留有用的日志信息,便于后續(xù)排查問題和優(yōu)化代碼2023-04-04flask框架實(shí)現(xiàn)修改密碼和免密登錄功能
flask是python web開發(fā)的常用框架之一。本文將講述flask如何實(shí)現(xiàn)修改密碼和免密登錄功能2021-05-05python?與c++相互調(diào)用實(shí)現(xiàn)
這篇文章主要介紹了python?與c++相互調(diào)用實(shí)現(xiàn),我們都知道c++運(yùn)算速度快于python,python又簡單易寫,很多人就會想到將兩者結(jié)合,接下倆小編要給大家介紹的就是python?與c++相互調(diào)用實(shí)現(xiàn),,需要的朋友可以參考一下2022-03-03解決Python3.8運(yùn)行tornado項(xiàng)目報(bào)NotImplementedError錯誤
這篇文章主要介紹了Python3.8運(yùn)行tornado項(xiàng)目報(bào)NotImplementedError錯誤,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09詳解如何使用Python處理INI、YAML和JSON配置文件
在軟件開發(fā)中,配置文件是存儲程序配置信息的常見方式,INI、YAML和JSON是常用的配置文件格式,各自有著特定的結(jié)構(gòu)和用途,Python擁有豐富的庫和模塊,本文將重點(diǎn)探討如何使用Python處理這三種格式的配置文件,需要的朋友可以參考下2023-12-12