Краткое описание
С быстрой разработкой Интернета A (AI) B (Bigdata) C (облако) стал основным направлением разработки в настоящее время. Если эти три глубоко объединены, ИИ является наиболее основной его частью. Поэтому, если каждый должен изучать программирование в будущем обществе, то для программистов искусственный интеллект - это технология, которую они должны освоить (разработка технологий действительно быстро).
Эта статья вводит и использует Java для внедрения самой простой сети персептрона, не запутавшись с деривацией формулы, стремясь предоставить вам идеи для обучения нейронным сетям и иметь грубое понимание нейронных сетей.
Анализ модели сети Pesptron
Сначала посмотрите на картинку
Если вы немного заинтересованы в нейронных сетях, вы должны быть знакомы с этой картиной. Эта картина представляет собой структурную диаграмму нейронов
X1 ~ xm представляет вход, W1 ~ WM представляет синаптический вес, σ представляет суммирующий узел, функция активации представляет функцию активации, а затем выводит результат. Конкретный процесс
Когда нейрон получает вход, каждый вход будет умножен на вес на его относительный путь. При достижении суммирующего узла результат суммирующего узла устанавливается на z:
z = x1 * w1 + x2 * w2 + x3 * w3 + ...... + xm * wm
Затем пропустите z в функцию активации (здесь мы называем функцию активации f) для распознавания двоичного рисунка:
Если f (x)> e, y = 1else y = -1e -порог y -результат классификации
Здесь можно увидеть, что если значение f (x) больше порога, получается классификация y = 1, и наоборот = -1 = -1
ПРИМЕЧАНИЕ. По сравнению с ответом, указанным стимуляцией биологических нейронов, если стимуляция находится в пределах приемлемого диапазона, нейрон будет ингибировать стимуляцию (y = -1), и если она превышает диапазон, он будет возбужден (y = 1), а водораздел этого диапазона является порогом (E)
изучать
Мы обнаружили, что если вес и порог исправлены, то эта нейронная сеть не имеет никакого значения. Поэтому мы представили концепцию обучения и позволили нейронной сети изменять вес и порог посредством обучения, чтобы точность распознавания шаблонов могла быть динамически исправлена. Это суть машинного обучения.
Так как учиться? Прежде чем мы его используем, нам необходимо предоставить набор образцов данных в эту сеть (которая принимается здесь для обучения в режиме учителя), образец данных включает в себя входные данные x и правильный результат идентификации y '.
Когда мы вводим учебные данные x и получаем распознавание шаблонов y, если y! = Y ', вес и порог этой сети будут скорректированы. Пожалуйста, обратитесь к формуле для корректировки. μ представляет скорость обучения (скорость коррекции), а обновление представляет необходимость исправить:
Update = μ * (yi - y ') update = (f (x) - y') mς wi += update * xii = 1e += обновление
Когда результат классификации персептрона равен правильной классификации, Update = 0, а сеть не скорректирована; Если он не равен правильной классификации, все веса (w) и пороговые значения (e) будут скорректированы
Вышеуказанное - самый простой процесс обучения для персептронов, которые я ввел:
Введите данные -> суммируйте, чтобы получить z-> a Wait way Function Function, чтобы ждать результатов классификации -> Результаты классификации не соответствуют правильным результатам, отрегулируйте сеть
Давайте внедрим эту простую нейронную сеть
Реализация кода Java
То, что я реализовал здесь, это научиться распознавать позитивные и негативные целые числа через нейронные сети. Во -первых, определите класс, который сначала определяет персептрон.
/*** Создано Cimzzz 22.12.17. **/public Class Perceptron {/*** Скорость обучения*/private final float Learnrate; / *** Количество времени обучения*/ private final int studialCount; / *** Порог*/ private float E; / *** Вес* Поскольку требуется только один вход для определения положительного и отрицательного целого числа, здесь есть только один вес, и несколько входов могут быть установлены на массив*/ private float w; / *** Правильная скорость для каждого обучения*/ private float [] Corecrtate; /// ** * Конструктор инициализирует скорость обучения, количество времени обучения, вес и порог инициализируется до 0 * @param Learnrate STEMP обучения (диапазон значений 0 <LearnRate <1) * @param Исследование. this.StuDyCount = studyCount; this.e = 0; this.w = 0; this.crecrectrate = new Float [studyCount]; } / *** Функция обучения, образцы-это двумерный массив, содержащий входные данные и результаты классификации,* образцы [] [0] представляет входные данные* образцы [] [1] представляет правильные результаты классификации* @param Образцы. for (int i = 0; i <assecualCount; i ++) {int errorCount = 0; для (int [] образец: образцы) {float upply = learnrate * (sample [1] -credict (sample [0])); // Обновление веса и порога w += обновление * образец [0]; e += обновление; // Вычислять номер ошибки if (update! = 0) errorcount ++; } // Рассчитайте правильность этого обучения правильно }} / *** Функция SUM, смоделировать операцию суммирования узла входные данные* Вес* @param num входные данные* @return sum result z* / private float sum (int num) {return num* w + e; } / *** Активировать функцию, судья, суммируя результат z и пороговое значение e* @param num входные данные* @return classification result* / public int predict (int num) {return sum (num)> = 0? 1: -1; }/*** Точность печати*/public void printCorrectrate () {for (int i = 0; i <assevercount; i ++) System.out.printf ("Результат обучения при %d-> %.2f %%/n", i +1, corecrtrate [i]* 100); }}Затем напишите функцию, которая генерирует учебные данные
/*** Сгенерировать данные обучения* @return Training Data*/private static int [] [] genStudyData () {// Здесь мы принимаем целое число между -100 и 100, и если больше 0, установите их в режим y = 1, в противном случае y = -1 int [] [] data = new int [201] [2]; for (int i = -100, j = 0; i <= 100; i ++, j ++) {data [j] [0] = i; Данные [j] [1] = i> = 0? 1: -1; } вернуть данные; } /*** Сгенерировать учебные данные* @return Data* /private static int [] [] genStudyData2 () {// Здесь мы принимаем целое число между 1 ~ 250, и если больше 125, установите его в режим y = 1, в противном случае y = -1 int [] [] data = new Int [250] [2]; for (int i = 1, j = 0; i <= 250; i ++, j ++) {data [j] [0] = i; Данные [J] [1] = i> = 125? 1: -1; } вернуть данные; }Наконец, основная функция
public static void main (string [] args) {// Скорость обучения и время обучения здесь можно скорректировать вручную в зависимости от ситуации Perceptron pesptron = new Perceptron (0,4F, 500); PERCEPTRON.FIT (GenStudyData ()); eppttron.printcorrectrate (); System.out.println (Perceptron.predict (-1)); System.out.println (Perceptron.predict (126)); }Вы можете проверить это
ограничение
Эта нейронная сеть персептрона относительно проста и подходит для линейно разделенных данных, таких как положительные и отрицательные числа в одномерной и двумерной классификации координат; Данные, которые нельзя правильно классифицировать, не могут быть классифицированы, например, поиск основных чисел и т. Д.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.