神经网络激活函数sigmoid、tanh、Relu、LeakyRelu、Elu、PRelu、MaxOut的java实现
神經(jīng)網(wǎng)絡(luò)常用激活函數(shù)包括sigmoid、tanh、Relu、LeakyRelu、Elu、PRelu和MaxOut。對(duì)每一種函數(shù)采用java進(jìn)行實(shí)現(xiàn)。前面四種激活函數(shù)是固定形式,后面三種激活函數(shù)部分參數(shù)可以通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)進(jìn)行調(diào)整,這里只針對(duì)激活函數(shù)本身進(jìn)行簡(jiǎn)單實(shí)現(xiàn),不做過多講解。
1、sigmoid函數(shù)
公式:1 / (1 + E^-x)
代碼:
public double sigmoid(double x) {return 1 / (1 + Math.pow(Math.E, -x));}sigmoid圖形:
2、tanh函數(shù)
公式:公式:(E^x - E^-x)/(E^x + E^-x)
代碼:
public double tanh(double x) {return (Math.pow(Math.E, x) - Math.pow(Math.E, -x)) / (Math.pow(Math.E, x) + Math.pow(Math.E, -x));}Tanh圖形:
3、relu函數(shù)
公式:max(0,x)
代碼:
public double relu(double x) {return Math.max(0, x);}Relu圖形:
4、leakyrelu函數(shù)
公式:max(a*x,x),a為(0~1)之間取一個(gè)固定值
代碼:
public double leakyRelu(double x) {return Math.max(0.01 * x, x); }圖形(a=0.5):
5、prelu函數(shù)
公式:max(ax,x),其中a不是固定值,可通過學(xué)習(xí)更改
代碼:
public double pRelu(double x,double a) {return Math.max(a * x, x); }6、elu函數(shù)
公式:當(dāng)x>0,返回x;當(dāng)x<=0,返回a*(E^x - 1),a不是固定值,同樣可通過學(xué)習(xí)進(jìn)行調(diào)整
代碼:
?
7、maxout函數(shù)
公式:max(z[]),z[]為神經(jīng)網(wǎng)絡(luò)每一層計(jì)算結(jié)果的集合
神經(jīng)網(wǎng)絡(luò)層計(jì)算公式:z=wx+b,w為權(quán)重,b為偏置
也就是說,maxout函數(shù)的參數(shù)z[]會(huì)隨著神經(jīng)網(wǎng)絡(luò)層的增加而遞增
代碼:
public class MaxOut {List<Double> values = new ArrayList<>();public double maxOut(double value) {values.add(value);Collections.sort(values);return values.get(0);} }?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的神经网络激活函数sigmoid、tanh、Relu、LeakyRelu、Elu、PRelu、MaxOut的java实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直方图均衡算法及结合自动色阶的改进
- 下一篇: java计算数组均值