我是靠谱客的博主 开朗狗,最近开发中收集的这篇文章主要介绍自组织神经网络,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自组织神经网络

引用文本package 自组织神经网络;

import java.util.Random;
public class SOMMain {
	double eta = 0.1;
	public int findMinIndex(double x, double w[]) {
		double index[] = new double[w.length];
		for (int j = 0; j < w.length; j++) {
			index[j] = Math.abs(x - w[j]);
			// System.out.print("index=" + index[j]);
		}
		int min = 0;
		double minindex = index[0];
		for (int i = 0; i < w.length; i++) {
			if (minindex < index[i]) {
				minindex = index[i];
				min = i;
			}
		}
		w[min] = w[min] + eta * (x - w[min]);
		return min + 1;
	}

	public static void main(String[] args) {
		SOMMain somMain = new SOMMain();
		Random random = new Random();
		int clazzCount = 3;
		int sampleCount = 12;
		double w[] = new double[clazzCount];
		double x[] = new double[sampleCount];
		// ArrayList<Double> lists = new ArrayList<>();
		System.out.println("初始化权值:");
		for (int i = 0; i < x.length; i++) {
			x[i] = random.nextDouble() * 10;// 生成样本
			System.out.print(x[i] + " ");
		}
		System.out.println();
		for (int i = 0; i < w.length; i++) {
			w[i] = random.nextDouble() * 10;
			System.out.print(w[i] + " ");
		}
		System.out.println();
		System.out.println("归一化样本");
		double sum = 0;
		for (double d : x) {
			sum += d;
		}
		double normX[] = new double[sampleCount];
		for (int i = 0; i < x.length; i++) {
			normX[i] = x[i] / sum;
		}
		System.out.println("开始训练");

		int runMax = 100;
		// double err;
		// double minIndex;
		int num[] = new int[normX.length];
		while (runMax > 0) {
			runMax--;
			// minIndex = 0;
			// err = 1e3;
			for (int i = 0; i < normX.length; i++) {
				num[i] = somMain.findMinIndex(x[i], w);
			}
		}
		System.out.println("训练完毕,进行测试");
		for (int i = 0; i < x.length; i++) {

			System.out.println("样本" + (i + 1) + "的值是:" + x[i] + "属于第" + num[i] + "类");
		}

	}

}

最后

以上就是开朗狗为你收集整理的自组织神经网络的全部内容,希望文章能够帮你解决自组织神经网络所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部