Este artigo descreve um algoritmo de rede neural artificial simples baseado na implementação de Java. Compartilhe -o para sua referência, como segue:
Vamos dar uma olhada no diagrama do algoritmo que desenhei:
2. Categoria de dados
importar java.util.arrays; public class Data {Double [] vetor; Divisão int; tipo int; public Double [] getVector () {retornar vetor; } public void setVector (duplo [] vetor) {this.vector = vetor; } public int getDiment () {Divisão de retorno; } public void SetDimention (int Divisão) {this.dimention = division; } public int getType () {return type; } public void setType (int tipo) {this.type = type; } dados públicos (Vector Double [], Int Dimentação, Int Type) {super (); this.vector = vetor; this.dimentation = Dimentação; this.type = type; } public data () {} @Override public string tostring () {return data [vector = " + Arrays.toString (vetor) +", dimension = " + Dimentação +", tipo = " + tipo +"] "; }}3. Rede neural artificial simples
pacote cn.edu.hbut.chenjie; importar java.util.arraylist; importar java.util.list; importar java.util.random; importar org.jfree.chart.chartFree.jfart.jfart.jfart.jfree.Chart.ChartFrame; importação; org.jfree.data.xy.defaultxyDataset; importar org.jfree.ui.refineryutities; public class Ann2 {private ETA; // Taxa de aprendizado privado int n_iter; // vetor de peso Wh Theme [] Número de treinamento privado de treinamento; pesos; // vetor de peso, cujo comprimento é a dimensão dos dados de treinamento +1, neste caso os dados são 2 dimensões, portanto o comprimento é 3 privado int testSum = 0; // Número total de dados de teste private int error = 0; // número de erro defaultxydataset xydataseSet = new defaultxyDataSet (); / *** Adicione dados do mesmo tipo ao gráfico* @Param Type* @param a o primeiro componente de todos os dados* @param b O segundo componente de todos os dados*/ public void add (tipo de string, duplo [] a, duplo [] b) {duplo [] [] dados = novo [2] [A.Length]; for (int i = 0; i <A.Length; i ++) {data [0] [i] = a [i]; dados [1] [i] = b [i]; } xydataSet.addseries (tipo, dados); } / *** draw* / public void draw () {jfreechart jfreechart = ChartFactory.CreatesCatterPlot ("Exercício", "X1", "X2", Xydataset); Quadro de quadro de quadro = new ChartFrame ("Dados de treinamento", jfreechart); frame.pack (); Refineriluties.CenterFrameOnscreen (quadro); frame.setVisible (true); } public static void main (string [] args) {ann2 ann2 = new Ann2 (0,001.100); // Construa uma lista de rede neural artificial <Data> exercício = novo ArrayList <Data> (); // Construa um conjunto de treinamento // simulou manualmente 1.000 dados de treinamento, a linha de treinamento Is x2 = x1+0. 0. Aleatório(); duplo x1 = rd.nextDouble (); // gerar aleatório um componente duplo x2 = rd.nextdouble (); // gerar aleatório outro componente duplo [] da = {x1, x2}; // gera treinamento de dados de dados d = novos dados (da, 2, x2> x1+0,5? 1: -1); SUM1 = 0; // registro tipo 1 int sum2 = 0; // Registre o número do registro de treinamento do tipo 1 para (int i = 0; i <exercício.size (); i ++) {if (exercy.get (i) .getType () == 1) sum1 ++; caso contrário, if (exercy.get (i) .getType () ==-1) sum2 ++; } duplo [] x1 = novo duplo [SUM1]; duplo [] y1 = novo duplo [SUM1]; duplo [] x2 = novo duplo [SUM2]; duplo [] y2 = novo duplo [SUM2]; int index1 = 0; int index2 = 0; for (int i = 0; i <exercício.size (); i ++) {if (exercy.get (i) .getType () == 1) {x1 [index1] = exercício.get (i) .vetor [0]; y1 [index1 ++] = exercício.get (i) .vetor [1]; } else if (exercy.get (i) .getType () ==-1) {x2 [index2] = exercício.get (i) .vetor [0]; y2 [index2 ++] = exercício.get (i) .vetor [1]; }} Ann2.add ("1", x1, y1); Ann2.add ("-1", x2, y2); Ann2.Draw (); Ann2.Input (Exercício); // Digite o treinamento na rede neural artificial Ann2.fit (); // Treine Ann2.Showweigths (); // Mostra o vetor de peso // gerar manualmente mil dados de teste para (int i = 0; i <10000; i ++) {aleatória = novo aleatório (); duplo x1_ = rd.nextDouble (); duplo x2_ = rd.nextDouble (); duplo [] da = {x1_, x2_}; Teste de dados = novos dados (da, 2, x2_> x1_+0,5? 1: -1); Ann2.Predict (teste); // test} System.out.println ("TOTO TOTAL" + ANN2.TESTSUM + "dados de bits, com" + ann2.error + "erro de bit, taxa de erro:" + Ann2.error * 1.0 /ann2.testsum * 100 + "%"); } / ** * * @param eta taxa de aprendizagem * @param n_iter Peso Componente Tempos de aprendizagem * / public Ann2 (duplo eta, int n_iter) {this.eta = eta; this.n_iter = n_iter; }/*** Digite o conjunto de treinamento na rede neural artificial* @param Exercício*/entrada privada de vazio (List <Data> Exercício) {this.exercise = Exercício; // Salvar os pesos do conjunto de treinamento = novo duplo [Exercício.Get (0) .Dimention + 1]; // inicialize o vetor de peso, o seu comprimento é o primeiro dos dados do treinamento +1 [0) [0]; i = 1; = exercício.get (j) .type; // y int calcular_result = calculateesult (exercy.get (j)); // y 'Delta duplo0 = eta * (real_result - calcular_result); // calcular a atualização limite w0 += delta0; // thshold updines [0] = W0; W0; W0; exercício.get (j) .getDivision (); // Δw = η*(y-y ')*x pesos [k +1] += delta; // w = w+Δw}}}} private int calculateesult (dados de dados) {duplo z = w0 * x0; for (int i = 0; i <data.dimention; i ++) z+= data.vector [i] * pesos [i+1]; //z=W0X0+W1X1+...+wmxm // Função de ativação se (z> = 0) retornar 1; caso contrário, retorne -1; } private void showweigths () {for (duplo w: pesos) System.out.println (w); } private void previsto (dados de dados) {int tipo = calculateesult (dados); if (type == data.getType ()) {//system.out.println("precaution correto "); } else {//system.out.println("precaution error "); erro ++; } testSum ++; }}Resultados em execução:
-0.2200000000000000017-0.44168439828154530.44244420202054685 Um total de 10.000 dados foram testados, com 17 erros, taxa de erro: 0,169999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 posição
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.