亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? quickprop.java

?? 利用JAVA分別實現了神經網絡和遺傳算法并對XOR問題給出了兩者的比較
?? JAVA
字號:
/*
	Copyright 2006, 2007 Brian Greer

	This file is part of the Java NN Trainer.

	Java NN Trainer is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	Java NN Trainer is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Java NN Trainer; if not, write to the Free Software
	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

package algorithms;

public class QuickProp extends Trainer{
	public static final double DEFAULT_MOMENTUM = 0.9;

	private double momentum = DEFAULT_MOMENTUM; // [0.0-1.0]

	// Inside thresh, do grad descent; outside, jump.
	private double modeSwitchThreshold = 0.0;
	// Don't jump more than this times last step
	private double maxFactor = 1.75;
	private double shrinkFactor = maxFactor / (1.0 + maxFactor);
	// divide epsilon by fan-in before use
	private boolean splitEpsilon = false; //true;
	// For grad descent if last step was (almost) 0
	private double epsilon = 0.55; /* 1.0 */
	// Weight decay
	private double decay = -0.0001;

	private double [][] prevInSlopes = null;
	private double [][] inSlopes = null;
	private double [][] inDeltaWeights = null;

	private double [][] prevOutSlopes = null;
	private double [][] outSlopes = null;
	private double [][] outDeltaWeights = null;

	private NeuralNetwork nn = null;

	public QuickProp(NeuralNetwork nn, double [][] inputs, double [][] targets, double minError){
		super(nn.getNumHidden(), inputs, targets, minError);
		this.nn = nn;
	}

	public QuickProp(int numHidden, double [][] inputs, double [][] targets, double minError){
		super(numHidden, inputs, targets, minError);
		nn = new NeuralNetwork(numInput, numHidden, numOutput);
	}

	public int getType(){
		return Trainer.QUICKPROP;
	}

	public void setMomentum(double momentum){
		this.momentum = momentum;
	}

	public void run(){
		broadcastBegin();

		prevInSlopes = new double[numInput][numHidden];
		inSlopes = new double[numInput][numHidden];
		inDeltaWeights = new double[numInput][numHidden];
		for(int i = 0; i < numInput; i++)
			for(int j = 0; j < numHidden; j++)
				inDeltaWeights[i][j] = prevInSlopes[i][j] = inSlopes[i][j] = 0.0;

		prevOutSlopes = new double[numHidden][numOutput];
		outSlopes = new double[numHidden][numOutput];
		outDeltaWeights = new double[numHidden][numOutput];
		for(int i = 0; i < numHidden; i++)
			for(int j = 0; j < numOutput; j++)
				outDeltaWeights[i][j] = prevOutSlopes[i][j] = outSlopes[i][j] = 0.0;

		double fitness = 1000.0;

		while(fitness > minError && isRunning){
			numGenerations++;

			updateSlopes(inSlopes, prevInSlopes, nn.getInWeights());
			updateSlopes(outSlopes, prevOutSlopes, nn.getOutWeights());

			fitness = 0.0;
			for(int i = 0; i < numPatterns; i++)
				fitness += adjustWeights(inputs[i], targets[i]);
			fitness /= numPatterns;

			nn.setFitness(fitness);

			broadcastGenerationComplete(nn);
		}

		broadcastEnd();
	}

	private void updateSlopes(double [][] slopes, double [][] prevSlopes, double [][] weights){
		int size1 = slopes.length;
		int size2 = slopes[0].length;
		for(int i = 0; i < size1; i++){
			for(int j = 0; j < size2; j++){
				prevSlopes[i][j] = slopes[i][j];
				slopes[i][j] = decay * weights[i][j];
			}
		}
	}

	private double adjustWeights(double [] inputs, double [] targets){
		double [] hidden = new double[numHidden];
		double [] outputs = new double[numOutput];

		nn.activate(inputs, hidden, outputs);

		double [] outError = new double[numOutput];

		for(int i = 0; i < numOutput; i++)
			outError[i] = (targets[i] - outputs[i]) * outputs[i] * (1.0 - outputs[i]);

		double [][] outWeights = nn.getOutWeights();
		double [] hiddenError = new double[numHidden];

		for(int i = 0; i < numHidden; i++){
			double sum = 0.0;
			for(int j = 0; j < numOutput; j++)
				sum += outError[j] * outWeights[i][j];
			hiddenError[i] = sum * hidden[i] * (1.0 - hidden[i]);
		}

		for(int i = 0; i < numInput; i++)
			for(int j = 0; j < numHidden; j++)
				inSlopes[i][j] += hiddenError[j] * hidden[j];

		for(int i = 0; i < numHidden; i++)
			for(int j = 0; j < numOutput; j++)
				outSlopes[i][j] += outError[j] * outputs[j];

		takeStep(nn.getInWeights(), inDeltaWeights, inSlopes, prevInSlopes);
		takeStep(outWeights, outDeltaWeights, outSlopes, prevOutSlopes);

		return NeuralNetwork.sumSquaredError(outputs, targets);
	}

	private void takeStep(double [][] weights, double [][] deltaWeights, double [][] slopes, double [][] prevSlopes){
		int size1 = weights.length;
		int size2 = weights[0].length;

		for(int i = 0; i < size1; i++){
			for(int j = 0; j < size2; j++){
				double nextStep = 0.0;

				if(deltaWeights[i][j] > modeSwitchThreshold){
					if(slopes[i][j] > 0.0)
						nextStep = (splitEpsilon ? ((epsilon * slopes[i][j]) / size1)
						                         : (epsilon * slopes[i][j]));

					if(slopes[i][j] > (shrinkFactor * prevSlopes[i][j]))
						nextStep += maxFactor * deltaWeights[i][j];
					else
						nextStep += (slopes[i][j] / (prevSlopes[i][j] - slopes[i][j])) * deltaWeights[i][j];
				}
				else if(deltaWeights[i][j] < -modeSwitchThreshold){
					if(slopes[i][j] < 0.0)
						nextStep = (splitEpsilon ? ((epsilon * slopes[i][j]) / size1)
						                         : (epsilon * slopes[i][j]));

					if(slopes[i][j] < (shrinkFactor * prevSlopes[i][j]))
						nextStep += maxFactor * deltaWeights[i][j];
					else
						nextStep += (slopes[i][j] / (prevSlopes[i][j] - slopes[i][j])) * deltaWeights[i][j];
				}
				else{
					nextStep = (splitEpsilon ? ((epsilon * slopes[i][j]) / size1)
					                         : (epsilon * slopes[i][j]))
					           + (momentum * deltaWeights[i][j]);
				}

//				System.out.print(slopes[i][j] + "," + nextStep);
//				System.out.print("," + deltaWeights[i][j] + "," + weights[i][j]);
				deltaWeights[i][j] = nextStep;
				weights[i][j] += nextStep;
//				System.out.print("," + deltaWeights[i][j] + "," + weights[i][j]);
//				System.out.println("");
			}
		}
	}
}

// vim:noet:ts=3:sw=3

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费成人在线观看| 色老汉一区二区三区| 91精品久久久久久久久99蜜臂| 亚洲色图欧美激情| 99久久99久久精品国产片果冻 | 欧美一级理论性理论a| 亚洲成va人在线观看| 欧美日韩激情在线| 免费人成精品欧美精品| 久久精品人人做人人综合| 成人综合在线网站| 玉足女爽爽91| 日韩欧美国产电影| 成人高清视频在线观看| 亚洲综合精品自拍| 日韩一区二区三| 福利一区二区在线观看| 亚洲欧美一区二区三区国产精品| 在线观看欧美日本| 经典三级视频一区| 亚洲视频中文字幕| 日韩一区二区在线看片| 国产精品一区免费在线观看| 亚洲欧美另类久久久精品| 欧美高清性hdvideosex| 高清在线不卡av| 亚洲成av人片在线| 国产日韩影视精品| 欧美曰成人黄网| 国产一区二区三区蝌蚪| 亚洲最新视频在线播放| 精品国产伦理网| 色噜噜久久综合| 国内精品在线播放| 亚洲影视资源网| 久久综合网色—综合色88| 91激情五月电影| 国产一区二区三区久久久| 亚洲精品免费在线播放| 久久尤物电影视频在线观看| 欧洲一区二区三区在线| 成人网在线播放| 蜜臀av性久久久久蜜臀av麻豆| 最新欧美精品一区二区三区| 欧美tickle裸体挠脚心vk| 色综合中文综合网| 日韩欧美国产一区二区三区 | 亚洲国产一区在线观看| 欧美激情在线观看视频免费| 91精品福利在线一区二区三区 | 中文字幕一区二区三区在线不卡| 欧美一区二区福利视频| 一本高清dvd不卡在线观看| 久久er99热精品一区二区| 一区二区欧美国产| 中文字幕日韩欧美一区二区三区| 精品久久人人做人人爰| 欧美精品第一页| 欧美在线制服丝袜| 色综合久久综合网欧美综合网 | 99精品久久只有精品| 国产精品综合久久| 麻豆成人久久精品二区三区红 | 国产99精品国产| 狠狠狠色丁香婷婷综合激情| 日韩精品福利网| 亚洲国产精品嫩草影院| 亚洲综合在线五月| 亚洲视频免费观看| 国产精品高潮久久久久无| 国产欧美视频一区二区| 国产亚洲精品超碰| 久久久综合激的五月天| 久久午夜羞羞影院免费观看| 精品精品国产高清a毛片牛牛 | 91麻豆精品国产91久久久使用方法 | 青青草国产成人av片免费| 一二三四社区欧美黄| 亚洲一区二区三区中文字幕在线| 亚洲男同1069视频| 亚洲免费观看在线视频| 亚洲综合激情小说| 亚洲成av人综合在线观看| 日韩一区精品视频| 蜜臀国产一区二区三区在线播放| 青青国产91久久久久久| 久久99久久99精品免视看婷婷| 久久www免费人成看片高清| 久88久久88久久久| 国产成人av一区二区三区在线观看| 国产最新精品精品你懂的| 国产成人午夜视频| 99视频热这里只有精品免费| 日本韩国精品在线| 欧美美女黄视频| 精品盗摄一区二区三区| 国产欧美日本一区二区三区| 亚洲私人黄色宅男| 日本美女一区二区三区视频| 久久99久久99精品免视看婷婷| 国产成人午夜精品影院观看视频| 9久草视频在线视频精品| 91久久精品一区二区三区| 欧美一卡二卡三卡四卡| 久久色在线观看| 中文字幕日韩一区| 丝袜亚洲另类欧美综合| 国产曰批免费观看久久久| 99精品黄色片免费大全| 欧美精品久久99久久在免费线| 日韩一区二区在线观看视频| 中日韩免费视频中文字幕| 亚洲一区二区三区在线看| 另类调教123区| 91免费看`日韩一区二区| 337p亚洲精品色噜噜狠狠| 国产日韩精品一区二区三区在线| 亚洲免费观看高清完整版在线| 人人精品人人爱| 91美女片黄在线| 欧美sm极限捆绑bd| 夜夜精品视频一区二区| 国产伦精品一区二区三区免费迷| 色妹子一区二区| 久久夜色精品国产噜噜av| 一级中文字幕一区二区| 国产福利不卡视频| 91精品一区二区三区在线观看| 日本一区二区成人在线| 日本不卡在线视频| 97se亚洲国产综合在线| 久久婷婷国产综合精品青草| 亚洲777理论| 97国产精品videossex| 精品国产凹凸成av人导航| 亚洲一区二区三区四区中文字幕| 国产成人精品影视| 日韩一区二区视频| 亚洲国产日韩在线一区模特| 盗摄精品av一区二区三区| 日韩欧美综合一区| 香蕉成人啪国产精品视频综合网| 丰满少妇久久久久久久 | 久久久久久9999| 日韩av网站在线观看| 色欧美乱欧美15图片| 国产精品久久久久久久岛一牛影视 | 91精品国产91久久久久久一区二区 | 国模冰冰炮一区二区| 欧美一级一级性生活免费录像| 亚洲精品美国一| 99久久er热在这里只有精品15| 国产午夜精品久久久久久久| 久久超碰97中文字幕| 91精品国产91热久久久做人人| 一区二区三区鲁丝不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 久久免费美女视频| 极品美女销魂一区二区三区免费| 欧美一区2区视频在线观看| 亚洲va在线va天堂| 在线播放亚洲一区| 婷婷亚洲久悠悠色悠在线播放| 在线日韩国产精品| 亚洲精品国产视频| 欧美电影免费观看完整版| 麻豆一区二区在线| 日韩精品一区二区三区在线观看 | 亚洲精品一区二区三区99| 欧美aⅴ一区二区三区视频| 7777精品伊人久久久大香线蕉最新版| 亚洲国产一区视频| 欧美日韩大陆在线| 奇米777欧美一区二区| 欧美一区二区啪啪| 精品在线免费观看| 久久久久国产一区二区三区四区 | 日本中文字幕一区二区有限公司| 欧美一区午夜精品| 精品一区二区三区免费观看| 2023国产精品自拍| 99久久久久久99| 亚洲国产毛片aaaaa无费看| 欧美精品黑人性xxxx| 国内不卡的二区三区中文字幕| 久久免费视频一区| 91碰在线视频| 丝袜亚洲精品中文字幕一区| 日韩女优视频免费观看| 国产suv精品一区二区6| 最新高清无码专区| 欧美人牲a欧美精品| 国产最新精品免费| 亚洲精品久久久蜜桃| 91麻豆精品国产91久久久使用方法| 国产美女在线观看一区| 亚洲欧美偷拍三级| 91精品在线免费| 成人av影院在线| 亚洲成人av一区二区三区|