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

📄 annmod.java

📁 通用神经元模型的java代码
💻 JAVA
字号:
/**
 * <p>神经元网络模型</p>
 *
 * <p>BP算法</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
//9-12-12-13-1
//9个输入,1个输出

import java.lang.*;
import java.util.*;
class AnnNode{
    double yz;
    double[] w;
    int wLength;
    double outNum =0;
    double wuChaNum = 0;
    AnnNode(int wNum)
    {   wLength = wNum;
        w = new double[wNum];
        for(int i=0; i<wNum; i++)
        w[i] = AnnMod.random();
        yz = AnnMod.random();}
    AnnNode()
    {yz = 0;}
    double out(double sample){
    outNum = AnnMod.inspirit(sample - yz);
     return outNum;}
    double out(double[] outPre){
        for(int i=0; i<wLength; i++){
            outNum = outNum + w[i]*outPre[i];}
        outNum = AnnMod.inspirit(outNum - yz);
        return outNum;}
   boolean setyz(double yzNew){
       yz = yzNew;
        return true;}
    boolean setw(double[] wNew){
        w = wNew;
        return true;}
    double getyz(){
        return yz;}
    double[] getw(){
        return w;}
    double wuChaBP(double qw){
        wuChaNum = -2*(qw-outNum)*(outNum)*(1-outNum);
        return wuChaNum;
    }
    double wuChaBP(AnnNode[] annLayPre,int j)
    {   double ls =0;
        for(int i=0; i<annLayPre.length; i++){
            ls = ls + annLayPre[i].wuChaNum*annLayPre[i].w[j];}
        wuChaNum = outNum*(1-outNum)*ls;
        return wuChaNum;}
    void changeBP(AnnNode[] annLayAft,double a,double b){
        yz = yz + b* wuChaNum;
        for(int j=0; j<w.length; j++){
        w[j] = w[j] - a*wuChaNum*annLayAft[j].outNum;  }}
    public void showMyself(){
        System.out.print("阈值"+yz+"(");
        for(int i=0; i<wLength; i++)
        System.out.print(w[i]+",");
    System.out.print(")本节点输出"+outNum+"\n");}}
public class AnnMod {
    int annLayNum;
    int[] annLayNodeNum;
    public static double E=2.7182818284590452354;
    Vector annLayer;
    Vector output;
  double[][] sample ={ {0.0103,0.3369,0.5293,15260,6000,0.3932,0.42,0.08,32.15,42.77/1500},
  {0.0308,0.4526,0.1519,11500,3000,0.2609,0.36,0.38,21.59,57.35/1500},{0.0306,0.2819,0.2723,17588,5500,0.3127,0.45,0.49,22.26,22.88/1500},{0.0306,0.2819,0.2723,10589,4000,0.3778,0.66,0.53,46.17,63.55/1500},
  {0.0379,0.1911,0.3173,11600,3100,0.2672,0.36,0.11,31.06,35.24/1500},{0.0565,0.0617,0.5894,10500,5500,0.5238,0.54,0.02,31.29,40.37/1500},{-0.015,0.0142,0.1935,27000,8000,0.2963,0.57,0.9,33.23,28.45/1500},
  {-0.009,-0.0045,0.0892,10000,2500,0.25,0.53,0.13,47.76,92/1500},{-0.009,-0.0045,0.0892,7286,3500,0.4804,0.33,0.14,15.31,35/1500},{0,0,0,0,0,0,0,0,0,0/1500},};
    public AnnMod(int[] sjycNodeNum) {
        annLayNodeNum = sjycNodeNum; annLayNum = annLayNodeNum.length;
        annLayer = new Vector(annLayNum); double[] p = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01};
        for(int j=0; j<annLayNum; j++)
        {AnnNode [] annNodeArr = new AnnNode[annLayNodeNum[j]] ;
        for(int i=0; i<annLayNodeNum[j]; i++)
        {AnnNode annNode;
        if(j == 0)  annNode = new AnnNode();
            else  annNode = new AnnNode(annLayNodeNum[j-1]);
        annNodeArr[i] = annNode;}
        annLayer.add(j,annNodeArr); rdongI(p);}  }
    public void rdong1(double[] Maint){
        int i,j;
        for( j=0; j<9; j++)
        for( i=0; i<9; i++)
        sample[j][i] = Main.t[i]+ AnnMod.random()/10000000; }
    public boolean trainBP()
    {   int count = 0;
        double a = 0.4, b =0.3;
        double totalWuCha=0;
        output = new Vector(annLayNum);
        for(int i =0; i<annLayNum; i++)
        {double[] out = new double[annLayNodeNum[i]]; output.add(i,out);
        }
        int sampleNum = 0;
        while(count<3000){
        computeOutput(output,sampleNum);
        sampleNum = (sampleNum +1)%9;
        for(int i=annLayNum-1; i>0; i--){
           AnnNode[] annNodeArray = (AnnNode[])annLayer.elementAt(i);
            for(int j=0; j<annNodeArray.length; j++){
                count++;  System.out.println("训练次数"+count);
            if(i==annLayNum-1)annNodeArray[j].wuChaBP(sample[sampleNum][9]);
                else annNodeArray[j].wuChaBP( (AnnNode[]) annLayer.elementAt(i+1),j);
                annNodeArray[j].changeBP((AnnNode[]) annLayer.elementAt(i-1),a,b);}}
        totalWuCha = 0;
        for(int t=0; t<9; t++){
        double ls = computeOutput(output,t);
        totalWuCha = totalWuCha + 0.5*(sample[t][9]-ls) * (sample[t][9]-ls);}
       if(totalWuCha < 0.0001) break;}
    System.out.println("一共循环次数"+count);
    return true;}
    void yc(){
    System.out.println("训练结束,开始预测");
    System.out.println("baidu的股票预测是"+computeOutput(output,0)*1500+"美元");}
    double computeOutput(Vector output,int sampleNum){
        double[] out;
        double outAll = 0;
        int j=0;
        for(int i=0; i<annLayNum; i++){
        out = (double[]) output.elementAt(i);
        for( j=0; j<annLayNodeNum[i]; j++){
            AnnNode annNode =((AnnNode[]) annLayer.elementAt(i))[j];
            if (i==0) out[j] = annNode.out(sample[sampleNum][j]);
            else out[j] = annNode.out((double[] )output.elementAt(i-1));}
        outAll = out[j-1];
        } return outAll;}
    public void rdongI(double[] Maint){
        int i,j;
        for( j=0; j<9; j++)
        for( i=0; i<10; i++)
        sample[j][i] = Main.t[i]+ AnnMod.random()/10000000;}
    public static double inspirit(double x)
    {return 1/(1+Math.pow(E,-x));}
    public static  double random()
    {Random random = new Random();
       double ran = random.nextDouble();
       ran = (int)(ran * 1000);
       ran = ran/1000.0;
       if(random.nextDouble()<0.5)ran = ran * -1;
       return ran;}
}

⌨️ 快捷键说明

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