⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsom.java

📁 VHDL制作的ann的code
💻 JAVA
字号:
package org.encog.neural.networks.layers;

import org.encog.matrix.Matrix;
import org.encog.neural.data.NeuralData;
import org.encog.neural.data.NeuralDataSet;
import org.encog.neural.data.basic.BasicNeuralData;
import org.encog.neural.data.basic.BasicNeuralDataSet;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.layers.SOMLayer;
import org.encog.neural.networks.training.som.TrainSelfOrganizingMap;
import org.encog.neural.networks.training.som.TrainSelfOrganizingMap.LearningMethod;
import org.encog.util.NormalizeInput.NormalizationType;

import junit.framework.TestCase;

public class TestSOM extends TestCase {
	
	public static final double MAX_ERROR = 0.05;
	
	public static final double untrainedData[][] = 
	{{0.6882551270881396, -0.9291471917702279, 0.9631574105879768, -0.6847023846227012, 0.6445001219615334},
	{0.2596121773799609, 0.20903647997830488, 0.44901788840545387, -0.8991254913211779, -0.4440569188207164}};
	
	public static final double trainedData[][] = {{0.48746847854732106, 0.5010119462167667, 0.5167202966276256, 0.4943294925693857, 0.0},
		{-0.49856939758003643, -0.5027761724685629, -0.5061504393638588, -0.49239862807111295, 0.0}};
				
	public void testTrainSOM()
	{
		Matrix matrix = new Matrix(TestSOM.untrainedData);
		double pattern1[] = { -0.5, -0.5, -0.5, -0.5 };
		double pattern2[] = {  0.5,  0.5,  0.5,  0.5 };
		
		NeuralData data1 = new BasicNeuralData(pattern1);
		NeuralData data2 = new BasicNeuralData(pattern2);
		
		SOMLayer layer;
		BasicNetwork network = new BasicNetwork();
		network.addLayer(layer = new SOMLayer(4,NormalizationType.MULTIPLICATIVE));
		network.addLayer(new BasicLayer(2));
		
		layer.setMatrix(matrix);
		
		NeuralDataSet trainingSet = new BasicNeuralDataSet();
		trainingSet.add(data1);
		trainingSet.add(data2);
		
		final TrainSelfOrganizingMap train = new TrainSelfOrganizingMap(
				network, trainingSet,LearningMethod.SUBTRACTIVE,0.5);
		

		train.iteration();
		double error1 = train.getTotalError();
		train.iteration();
		double error2 = train.getTotalError();
		
		double diff = (error2-error1)/error1;
		
		TestCase.assertTrue(diff<=0.0);		
	}
	
	public void testRunSOM()
	{
		Matrix matrix = new Matrix(TestSOM.trainedData);
		
		double pattern1[] = { -0.5, -0.5, -0.5, -0.5 };
		double pattern2[] = {  0.5,  0.5,  0.5,  0.5 };
		double pattern3[] = { -0.5, -0.5, -0.5,  0.5 };
		double pattern4[] = {  0.5,  0.5,  0.5, -0.5 };
		
		NeuralData data1 = new BasicNeuralData(pattern1);
		NeuralData data2 = new BasicNeuralData(pattern2);
		NeuralData data3 = new BasicNeuralData(pattern3);
		NeuralData data4 = new BasicNeuralData(pattern4);
		
		SOMLayer layer;
		BasicNetwork network = new BasicNetwork();
		network.addLayer(layer = new SOMLayer(4,NormalizationType.MULTIPLICATIVE));
		network.addLayer(new BasicLayer(2));
		
		layer.setMatrix(matrix);
		
		int data1Neuron = network.winner(data1);
		int data2Neuron = network.winner(data2);
		
		TestCase.assertTrue(data1Neuron!=data2Neuron);
		
		int data3Neuron = network.winner(data3);
		int data4Neuron = network.winner(data4);
		
		TestCase.assertTrue(data3Neuron==data1Neuron);
		TestCase.assertTrue(data4Neuron==data2Neuron);		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -