пороговый персептрон

127
20 марта 2018, 01:05

Есть класс Перcептрон , для обучения использую данные из массива patterns и answers которые ввожу в ручную , все отлично работает. При считывании из файла Exel и добавлении в массив он начинает не правильно работать. Ругается что подставляемая мной точка не принадлежит прямой.

import java.io.IOException;
public class Perceptron {
Reader rd = new Reader();
double[][] patterns;
double[] answers;
double[] enters;
double[] hidden;
double outer;
double[][] wEH;
double[] wHO;
//double[][] patterns = {{-23,17},{-19,-34},{-42,-3},{-43,34},{-45,-21},
{41,-14},{27,-18},{19,34}};
//int[] answers = {0,1,1,0,1,0,0,0};
Perceptron(double[][] patterns, double[] answers ) throws IOException {
 this.patterns = patterns;
  this.answers = answers;
    enters = new double[patterns[0].length];
    hidden = new double[3];
    wEH = new double[enters.length][hidden.length];
    wHO = new double[hidden.length];
    initWeights();
    study();

    double[][] input ={ {-43,-45}};
    for (int p = 0; p < input.length; p++) {
        for (int i = 0; i < enters.length; i++)
            enters[i] = input[p][i];
        countOuter();

        if (outer==1){
            System.out.println("Точка принадлежит прямой");
        }
        else{
            System.out.println("Точка не принадлежит прямой");
        }
    }
}
public void initWeights() {
    for (int i = 0; i < enters.length; i++) {
        for (int j = 0; j < wEH.length; j++) {
            wEH[i][j] = Math.random() * 0.2 + 0.1;
        }
    }
    for (int i = 0; i < wHO.length; i++)
        wHO[i] = Math.random() * 0.2 + 0.1;
}
public void countOuter() {
    for (int i = 0; i < hidden.length; i++) {
        hidden[i] = 0;
        for (int j = 0; j < enters.length; j++) {
            hidden[i] += enters[j] * wEH[j][i];
        }
        if (hidden[i] > 0.5) hidden[i] = 1;
        else hidden[i] = 0;
    }
    outer = 0;
    for (int i = 0; i < hidden.length; i++) {
        outer += hidden[i] * wHO[i];
    }
    if (outer > 0.5) outer = 1;
    else outer = 0;
}
public void study() {
    double[] err = new double[hidden.length];
    double gError = 0;
    do {
        gError = 0;
        for (int p = 0; p < patterns.length; p++) {
            for (int i = 0; i < enters.length; i++)
                enters[i] = patterns[p][i];
            countOuter();
            double lErr = answers[p] - outer;
            gError += Math.abs(lErr);
            for (int i = 0; i < hidden.length; i++)
                err[i] = lErr * wHO[i];
            for (int i = 0; i < enters.length; i++) {
                for (int j = 0; j < hidden.length; j++) {
                    wEH[i][j] += 0.1 * err[j] * enters[i];
                }
            }
            for (int i = 0; i < hidden.length; i++)
                wHO[i] += 0.1 * lErr * hidden[i];
        }
    } while (gError != 0);
}
}

После считывания заменяю в классе персептрон две строчки с объявлением массивов на

 double[][] patterns =  reader.getInput();
 double[] answers = reader.getOutputs();
READ ALSO
PhantomJS, Selenium можно ли только часть действий визуализировать

PhantomJS, Selenium можно ли только часть действий визуализировать

Selenium я уже использовал, но мне не совсем подходит то, что я вижу все эти промежуточные страницы и тот факт, что это настолько же медленно, если...

130
Черно-белое изображение в Canvas

Черно-белое изображение в Canvas

Для отображения объектов на холсте использую следующий View:

141
Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Ошибка при сохранении данных с фонового процесса в базу данных SQLite

Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибкуError:(34, 41) error: incompatible...

168
Как исключить из обфускации пакет

Как исключить из обфускации пакет

Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?

148