Нейронные сети примеры java

Создание простой нейронной сети с Eclipse Deeplearning4j

Глубокое обучение включает в себя как глубокие нейронные сети, так и глубокое обучение с подкреплением, которые являются подмножеством машинного обучения, которое само по себе является подмножеством искусственного интеллекта. Вообще говоря, глубокие нейронные сети выполняют машинное восприятие, которое извлекает важные функции из необработанных данных и делает своего рода прогноз относительно каждого наблюдения. Примеры включают в себя идентификацию объектов, представленных на изображениях, сопоставление аналоговой речи с письменными транскрипциями, категоризацию текста по настроениям и прогнозирование данных временных рядов.

Хотя нейронные сети были изобретены в прошлом веке, только недавно они вызвали больше волнений. Теперь, когда вычислительная способность использовать в своих интересах идею нейронных сетей существует, они были использованы для установки новых, самых современных результатов в таких областях, как компьютерное зрение, обработка естественного языка и обучение с подкреплением. Одно из известных достижений глубокого обучения было достигнуто учеными из DeepMind, которые создали компьютерную программу под названием AlphaGo, которая побила как бывшего чемпиона мира по Го, так и действующего чемпиона в 2016 и 2017 годах соответственно. Многие эксперты предсказывали, что это достижение не придет еще на десятилетие.

Существует много разных видов нейронных сетей, но основная идея их работы проста. Они основаны на человеческом мозге и состоят из одного или нескольких слоев «нейронов», которые являются просто математическими операциями, передающими сигнал от предыдущего слоя. На каждом уровне вычисления применяются к входу нейронов предыдущего уровня, а затем выход передается на следующий уровень. Выходные данные последнего слоя сети будут представлять некоторый прогноз о входных данных, в зависимости от задачи. Задача построения успешной нейронной сети – найти правильные вычисления для применения на каждом уровне.

Нейронные сети могут обрабатывать многомерные числовые и категорические данные и выполнять такие задачи, как регрессия, классификация, кластеризация и извлечение признаков. Нейронная сеть создается путем первоначальной настройки ее архитектуры на основе данных и задачи, а затем путем настройки ее гиперпараметров для оптимизации производительности нейронной сети. После того, как нейронная сеть будет достаточно обучена и настроена, ее можно использовать для обработки новых наборов данных и получения достаточно надежных прогнозов.

Читайте также:  Html цвет дерева код

Где Eclipse DeepLearning4j подходит

Eclipse Deeplearning4j (DL4J) – это основанный на JVM инструментарий с открытым исходным кодом для построения, обучения и развертывания нейронных сетей. Он был создан для обслуживания сообществ Java и Scala и является удобным, стабильным и хорошо интегрированным с такими технологиями, как Spark, CUDA и cuDNN. Deeplearning4j также интегрируется с инструментами Python, такими как Keras и TensorFlow, для развертывания их моделей в производственной среде на JVM. Он также поставляется с группой библиотек с открытым исходным кодом, которые Skymind объединяет в корпоративный дистрибутив, называемый Skymind Intelligence Layer (SKIL) . Эти библиотеки:

  • Deeplearning4j : нейронная сеть DSL (облегчает построение нейронных сетей, интегрированных с конвейерами данных и Spark)
  • ND4J : N-мерные массивы для Java, тензорная библиотека: «Затмение января с кодом C и более широкой областью применения». Цель состоит в том, чтобы обеспечить тензорные операции и оптимизированную поддержку для различных аппаратных платформ.
  • DataVec : библиотека ETL, которая векторизует и «тензорирует» данные. Извлечение нагрузки преобразования с поддержкой подключения к различным источникам данных и вывода n-мерных массивов через серию преобразований данных
  • libnd4j : Pure C ++ библиотека для тензорных операций, которая тесно работает с библиотекой открытого кода JavaCPP (JavaCPP была создана и поддерживается инженером Skymind, но она не является частью этого проекта).
  • RL4J : обучение усилению на JVM, интегрированное с Deeplearning4j. Включает глубокое обучение, используемое в AlphaGo и A3C.
  • Jumpy : интерфейс Python для библиотеки ND4J, интегрирующийся с Numpy
  • Арбитр : Автоматическая настройка нейронных сетей с помощью поиска гиперпараметров. Оптимизация гиперпараметров с использованием поиска по сетке, случайного поиска и байесовских методов.
  • ScalNet : Scala API для Deeplearning4j, похожий на Torch или Keras по внешнему виду.
  • ND4S : N-мерные массивы для Scala, основанные на ND4J.

Вот несколько причин использовать DeepLearning4j.

Вы являетесь специалистом по данным в этой области или студентом проекта Java, Scala или Python, и вам необходимо интегрироваться со стеком JVM (Hadoop, Spark, Kafka, ElasticSearch, Cassandra); Например, вы хотите масштабировать обучение нейронной сети на Spark через несколько графических процессоров . Вам необходимо исследовать данные, проводить и контролировать эксперименты, которые применяют к данным различные алгоритмы, и проводить обучение на кластерах, чтобы быстро получить точную модель для этих данных.

Вы – инженер данных или разработчик программного обеспечения в корпоративной среде, которому нужны стабильные, многократно используемые конвейеры данных и масштабируемые и точные прогнозы относительно данных. В данном случае используется программная и автоматическая обработка и анализ данных для определения назначенного результата с использованием простых и понятных API.

Читайте также:  Сортировка массива компаратором java

Пример: построение сети прямой связи

Сеть прямой связи является самой простой формой нейронных сетей, а также одной из первых в мире. Здесь мы опишем пример нейронной сети с прямой связью на основе примера, расположенного здесь, с использованием данных Луны . Данные находятся здесь .

Необработанные данные состоят из файлов CSV с двумя числовыми характеристиками и двумя метками. Обучающие и тестовые наборы находятся в разных файлах CSV с 2000 наблюдениями в обучающем наборе и 1000 наблюдениями в тестовом наборе. Цель задачи – предсказать метку с учетом двух входных функций. Таким образом, мы заинтересованы в классификации.

Сначала мы инициализируем переменные, необходимые для построения нейронной сети с прямой связью. Мы устанавливаем гиперпараметры нейронной сети, такие как скорость обучения и размер пакета, а также переменные, связанные с ее архитектурой, например количество скрытых узлов.

Источник

Быстрая нейронная сеть для каждого

Данная статья продемонстрирует возможность легко написать свою нейронную сеть на языке Javа. Дабы не изобретать велосипед, возьмем уже хорошо проработанную библиотеку Fast Artificial Neural Network. Использование нейронных сетей в своих Java-проектах — реально. Часто можно услышать упреки в адрес Java касательно скорости выполнения. Хотя разница не так велика — подробно об этом можно узнать в публикации «Производительность C++ vs. Java vs. PHP vs. Python. Тест «в лоб»». Мы будем использовать обертку вокруг библиотеки FANN.

Задача

Подготовка

Первое, что нужно сделать — собрать и установить libfann.
Затем скачать fannj и jna.

Сделаем файл, который будет содержать набор «уроков»:

11 3 4 0.5 1 1 1 0 0 0 0.9 1 2 1 0 0 0 0.8 0 1 1 0 0 0 0.3 1 1 0 1 0 0 0.6 1 2 0 1 0 0 0.4 0 1 0 1 0 0 0.9 1 7 0 0 1 0 0.5 1 4 0 0 1 0 0.1 0 1 0 0 1 0 0.6 1 0 0 0 0 1 1.0 0 0 0 0 0 1 

Теперь обучим нашу ИНС и сохраним ее в файл:

 public static void main(String[] args) < //Для сборки новой ИНС необходимо создасть список слоев ListlayerList = new ArrayList(); layerList.add(Layer.create(3, ActivationFunction.FANN_SIGMOID_SYMMETRIC, 0.01f)); layerList.add(Layer.create(16, ActivationFunction.FANN_SIGMOID_SYMMETRIC, 0.01f)); layerList.add(Layer.create(4, ActivationFunction.FANN_SIGMOID_SYMMETRIC, 0.01f)); Fann fann = new Fann(layerList); //Создаем тренера и определяем алгоритм обучения Trainer trainer = new Trainer(fann); trainer.setTrainingAlgorithm(TrainingAlgorithm.FANN_TRAIN_RPROP); /* Проведем обучение взяв уроки из файла, с максимальным колличеством циклов 100000, показывая отчет каждую 100ю итерацию и добиваемся ошибки меньше 0.0001 */ trainer.train(new File("train.data").getAbsolutePath(), 100000, 100, 0.0001f); fann.save("ann"); > 

Пояснение

Layer

ИНС состоит из слоев нейронов. Первый слой — это нейроны «рецепторы» или нейроны входных данных. Последний слой нейронов выходных данных. Все остальные — это скрытые слои. В нашем случае первый слой имеет 3 нейрона:

Читайте также:  Web страница html word

уровень здоровья (0.1-1.0);
наличие оружия (1-есть, 0-нету);
количество врагов.

Fann

Объект класса Fann это и есть нейронная сеть, которая создается на основе созданных ранее слоев.

Trainer

Объект класса тренер инкапсулирует алгоритмы обучения нейронной сети переданной при создании тренера. После обучения не забываем сохранить ее в файл.

Проверка результатов

Для проверки нашего обучения воспользуемся следующим кодом:

 public static void main(String[] args) < Fann fann = new Fann("ann"); float[][] tests = < , , , , , >; for (float[] test:tests) < System.out.println(getAction(fann.run(test))); >> private static String getAction(float[] out) < int i = 0; for (int j = 1; j < 4; j++) < if(out[i]> switch (i) < case 0:return "атаковать"; case 1:return "прятаться"; case 2:return "бежать"; case 3:return "ничего не делать"; >return ""; > 

У меня получились такие результаты:

Здоровье пистолет Враги Действие
100% Нет 1 Атаковать
90% Есть 3 Прятаться
30% нет 8 Бежать
100% Есть 8 Бежать
10% Нет 0 Ничего не делать

Буду рад услышать конструктивную критику.

Источник

Нейронные сети на Java. Библиотека Neuroph.

Реализуем искуственный интеллект в виде нейронной сети на Java.

Проект Neuroph по-сути имеет две реализации:

  1. Программа с графическим интерфейсом для наглядного отображения работы нейронной сети, ее обучения и тестирования.
  2. Набор классов для интегрирования в приложение Java

Neuroph studio

Для того, чтобы создать и обучить нейронную сеть с помощью Neuroph Studio, необходимо выполнить следующие шаги:

  1. Create Neuroph Project
  2. Create Perceptron network
  3. Create training set (Training -> New Training Set)
  4. Train network
  5. Test trained network

Интеграция нейронной сети в Java приложение

Пример создания небольшой нейронной сети на Neuroph:

import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.nnet.Perceptron;
import org.neuroph.nnet.learning.HopfieldLearning;
import org.neuroph.util.TransferFunctionType;

public static void main(String[] args) // TODO Auto-generated method stub
NeuralNetwork&lt;HopfieldLearning&gt; nNetwork = new Perceptron(2, 1);

DataSet trainingSet =
new DataSet(2, 1);

trainingSet. addRow (new DataSetRow (new double[],
new double[]));
trainingSet. addRow (new DataSetRow (new double[],
new double[]));
trainingSet. addRow (new DataSetRow (new double[],
new double[]));
trainingSet. addRow (new DataSetRow (new double[],
new double[]));
// learn the training set
nNetwork.learn(trainingSet);
// save the trained network into file
nNetwork.save(«or_perceptron.nnet»);
System.out.println(«end»);

// set network input
nNetwork.setInput(0, 0);
// calculate network
nNetwork.calculate();
// get network output
double[] networkOutput = nNetwork.getOutput();

for (double i : networkOutput)
System.out.println(i);

Источник

Оцените статью