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