Нейросетевой механизм

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 24.02.2015
Размер файла 3,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

в) По идентификатору города:

api.openweathermap.org/data/2.5/weather?id= 2172797

Пример выдаваемого ответа в JSON формате:

{"coord":{"lon":-0.13,"lat":51.51},"sys": {"message":0.0038,"country":"GB","sunrise":1400213168,"sunset":1400269657},"weather":[{"id":800,"main":"Clear","description":"Sky is Clear","icon":"01d"}],"base": "cmcstations","main":{"temp":282.38,"pressure":1034,"humidity":87,"temp_min":279.26,"temp_max":284.82},"wind":{"speed":1.5,"deg":60},"clouds":{"all":0},"dt":1400218487,"id":2643743,"name":"London","cod":200}

В некоторых запросах поддерживается выдача результата в XML формате, для этого достаточно добавить к запросу параметр «mode=xml».

Получение прогноза погоды на 5 дней за каждые три часа:

api.openweathermap.org/data/2.5/forecast?q=London,us&mode=xml

Прогноз на 10 дней, с одним наблюдением за день:

api.openweathermap.org/data/2.5/forecast/daily?lat=35&lon=139&cnt=10&mode=json

Получение истории наблюдений за определённый промежуток времени:

api.openweathermap.org/data/2.5/history/city?id=2885679&type=hour&start=1369728000&end=1369789200,

Здесь поиск города идёт по его идентификатору, промежуток времени указывается с использованием UNIX-времени [9].

3.2 JSON и возможности фреймворка JSON-Simple

JSON (англ. JavaScript Object Notation) -- текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.

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

Пусть text это строковая переменная хранящая представленный в предыдущем пункте JSON текст. Приведём пример простой программы иллюстрирующей работу фреймворка [10]:

JSONParser parser = new JSONParser();

Object obj = parser.parse(text);

JSONObject jsonObject = (JSONObject) obj;

String name = (String) jsonObject.get("name");

JSONArray weather = (JSONArray) jsonObject.get("main");

Iterator<String> iterator = weather.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

Здесь все классы имеющие приставку JSON являются классами фреймворка.

В программе создаётся парсер, который парсит JSON текст в объект класса Object. На его основе формируется объект класса JSONObject. Теперь из этого объекта можно извлекать необходимую информацию - в программе в строковую переменную «name» помещается имя города. Далее создаётся объект «weather» класса JSONArray, являющийся аналогом java.util.List в Java, хранящий сведения о температуре, давлении, влажности и т.п. После этого создаётя итератор, с помощью которого осуществляется проход по всем полям «weather» с выводом значений этих полей на экран.

3.3 Библиотека Leaflet

Leaflet -- библиотека с открытым исходным кодом, написанная российским разработчиком Владимиром Агафонкиным на JavaScript, предназначенная для отображения карт на веб-сайтах.

Библиотека пользуется очень большой популярностью, так например библиотека используется на сайтах Flickr, Foursquare, Craigslist, Data.gov, IGN, проектах Викимедиа, OpenStreetMap, Meetup, WSJ, MapBox, CloudMade, CartoDB и других.

Приведём пример простой программы иллюстрирующей работу с библиотекой [11]:

// создаётся карта в заданном месте и определённой степенью приближения

var map = L.map('map').setView([51.505, -0.09], 13);

// добавляется OpenStreetMap слой

L.tileLayer(

'http://{s}.tile.osm.org/{z}/{x}/{y}.png', {

attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'

}).addTo(map);

// к карте добавляется маркер в заданной позиции и привязывается текст сообщения для отображения

L.marker([51.5, -0.09]).addTo(map)

.bindPopup('Отображаемый <br> текст.')

.openPopup();

3.4 Программная реализация

Программная система состоит из двух Java проектов и одного веб проекта:

- JBPNet - Java проект, являющийся реализацией нейронной сети, содержит методы для обучения и тестирования сети.

- NetApproximation - Java проект, осуществляющий получение, обработку данных, вызов методов нейронной сети и формирование матрицы аппроксимации.

- WebWeatherView - JavaServer Faces проект реализующий веб представление температурных данных.

3.4.1 Описание проекта JBPNet

Основными классами JBPNeuralNetwork являются:

- class NeuronBP - модель нейрона

Его основные поля - output - выход нейрона, weights - вектор весов.

Основными методами являются - computeOutput - вычислить выход нейрона, establishWeights - установить веса.

- class LayerBP - модель слоя

Основные поля этого класса - neurons - коллекция нейронов слоя, neuronQwt - число нейронов в слое.

Основные методы - assign - создать нейрон, getNeuron - получить нейрон.

- class NeuralNetBP - модель сети. Является самым большим и значимым классом в проекте.

Содержит такие поля как - layers - коллекция слоёв сети, patternsInput - коллекция обучающих примеров, identError - максимально допустимая величина ошибки alpha - коэффициент крутизны сигмоидальной функции.

Наиболее значимыми методами являются - init - инициализировать сеть, teachOffLine - обучить сеть, adjustWeights - скорректировать веса, activationF - вычисление функции активации, compute - вычисляет выход нейросети соответственно представленных входных данных.

Опишем основные аспекты программной реализации нейронной сети с приведением примеров программного кода для иллюстрации работы программы.

Для изменения конфигурации сети и её последующей инициализации применялась следующая последовательность команд:

int neurInLayers[] = {50,3,4};

net.init(3, neurInLayers);

То есть создаётся одномерный массив, элементы которого это число нейронов во входном, скрытом и выходном слое соответственно. Затем neurInLayers передаётся методу init, который инициализирует сеть. То есть создаёт все необходимые для работы программы компоненты, такие как массивы для хранения весов, которые заполняет произвольными значениями от 0 до 1, путём вызова соответствующего метода.

net представляет собой экземпляр класса NeuralNetBP, собственно реализующего нейронную сеть.

Затем задаём данные для обучения сети:

net.addPattern(patternIn, patternOut);

Здесь patternIn это массив со следующим содержимым:

latNorm, lonNorm, latNorm0, lonNorm0, TNorm0, latNorm1, lonNorm1, TNorm1,…, latNorm24, lonNorm24, TNorm24.

А patternOut состоит из одного элемента - TNorm - нормализованная температура в точке с координатами lat, lon в этот же момент времени.

Для каждого набора patternIn, patternOut вызывается метод addPattern(), заполняющий соответствующие поля сети входными образцами.

Вызываем методы, задающие параметры необходимые для работы сети. Приведём некоторые из них:

net.setEpochCount(5000);

net.setMomentum(0.9);

net.setTeachRate(0.1);

net.setIdentError(0.001);

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

В моей сети реализован алгоритм импульса, применяющийся для повышения устойчивости сети, метод setMomentum() задаёт коэффициент инерционности необходимый для работы алгоритма.

Одним из параметров в методе обучения нейросети путём обратного распространения ошибки является коэффициент скорости обучения. Он задаётся с помощью метода setTeachRate().

Параметром метода setIdentError() является величина ошибки. Если величина ошибки сети станет меньше этого значения, то обучение останавливается, и считается, что сеть успешно обучена. Ошибка вычисляется по следующей формуле:

(20)

Где - реальное выходное состояние нейрона j-го выходного слоя нейронной сети при подаче на её входы k-го образа, - требуемое выходное состояние этого нейрона.

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

net.teachOffLine();

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

Затем, уже обученной сети предъявляются неоцененные тесты следующим образом:

net.compute(patternIn);

Метод compute() вычисляет «выход» сети на подаваемый тестовый экземпляр. А конкретно он вычисляет и помещает «реакцию» нейронной сети - число от 0 до 1, в поле output каждого выходного нейрона.

net.getOutput(i);

Приведённая выше конструкция, считывает значение поля output.

3.4.2 Описание проекта NetApproximation

Java проект, осуществляющий получение, обработку данных, вызов методов нейронной сети и формирование матрицы аппроксимации.

Проект обладает следующей структурой пакетов:

netapproximation

netapproximation.dao

netapproximation.domain

netapproximation.errors

netapproximation.log

netapproximation.service

netapproximation - состоит из одного класса Main, содержащего точку в входа в приложение - метод main(). Не содержит в себе какой-либо иной функциональности.

Перед тем как описывать пакет netapproximation.dao напишем о том, что означает аббревиатура DAO:

В программном обеспечении data access object (DAO) -- это объект, который предоставляет абстрактный интерфейс к какому-либо типу базы данных или механизму хранения. Определённые возможности предоставляются независимо от того, какой механизм хранения используется и без необходимости специальным образом соответствовать этому механизму хранения. Этот шаблон проектирования применим ко множеству языков программирования, большинству программного обеспечения, нуждающемуся в хранении информации и к большей части баз данных, но традиционно этот шаблон связывают с приложениями на платформе Java Enterprise Edition, взаимодействующими с реляционными базами данных через интерфейс JDBC, потому что он появился в рекомендациях от фирмы Sun Microsystems.

Таким образом netapproximation.dao содержит класс для взаимодействия с источниками хранения информации. В моём случае в качестве таковых выступают файлы. Класс называется CommonDao. Все его методы статические. Они реализуют помещение списков, множеств и хеш-таблиц в файл, а также извлечение списков и хеш-таблиц из файлов.

netapproximation.domain - цель этого пакета - содержать в себе классы представляющие объекты рассматриваемой предметной области. Содержит один класс Coordinates, соответствующий объекту «географические координаты».

netapproximation.errors - содержит определённые мною классы исключений. То есть определив эти исключения я могу где-либо в коде вызвать их. Например можно обработать какое-либо общее исключение и взамен него вызвать своё, точно поясняющее что произошло:

try {

// код разбора JSON объекта

} catch (ParseException e) {

throw new JSONParseError("Ошибка разбора JSON объекта: " + e.toString(), e);

}

Вместо достаточно общего ParseException будет получено JSONParseError, что может облегчить поиск и устранение неполадок.

netapproximation.log - отвечает за логирование. Содержит класс Log.

netapproximation.service - этот пакет обладает основной функциональностью пакета. Содержит 4 класса:

- GetDataService

- NormalizeMinMaxService

- NormalizeMxDxService

- TeachService

GetDataService - содержит методы для получения данных с сервиса OpenWeatherMap и их обработку.

NormalizeMinMaxService - отвечает за нормализацию данных для подачи на вход нейронной сети с использованием минимаксной функции.

NormalizeMxDxService - отвечает за нормализацию данных для подачи на вход нейронной сети с использованием математического ожидания и дисперсии.

TeachService - содержит методы для запуска обучения, тестирования, инициализации нейронной сети. Также отвечает за формирование матрицы аппроксимации на основе обученной нейросети.

3.4.3 Описание проекта WebWeatherView

JavaServer Faces проект реализующий веб представление температурных данных.

С помощью возможностей Javascript библиотеки Leaflet отрисовывается карта. С помощью неё же организована возможность получения температурных данных в некоторой точке путём щелчка по карте. Происходит обращение к серверу, он по координатам вычисляет результат и возвращает его клиенту. Происходит отрисовка маркера с аппроксимированной температурой в этой точке.

Также с использованием JSF компонент, организована возможность поиска температуры в конкретном городе или по конкретным координатам. После введения данных и нажатия кнопки «Поиск» происходит обращение к серверу за температурой. Получив данные программа отрисовывает маркер используя Leaflet API.

4 ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ

Для отображения температурных данных полученных путём аппроксимации нейронной сетью было разработано веб-представление.

Рисунок 4.1 - Графический интерфейс

В возможности пользователя входит получение температуры путём:

- нажатия мышкой на карте

- указания интересующего города

- указания интересующих координат

Данные пользователю отображаются с помощью маркера, отображающегося на карте в интересующей точке и содержащего в себе аппроксимированную текущую температуру в этой точке.

ЗАКЛЮЧЕНИЕ

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

Также были изучены и применены такие технологии как формат представления данных JSON, библиотека для работы с этим форматом в Java, API погодного сервиса OpenWeatherMap. Для разработки программной системы был успешно применён объектно-ориентированный язык Java, изученный ранее. Также в ходе работы был получен опыт разработки веб приложений.

Была разработана нейронная сеть. В дипломной работе сеть применялась для аппроксимации температурных данных и показала достаточно неплохие результаты - ошибка всего около 1.4 градуса Цельсия.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Саймон Хайкин Нейронные сети: полный курс, 2-е издание. Пер. с англ. - М.: Издательский дом «Вильямс», 2006. - 1104 с.: ил.

2. Круглов В.В., Борисов В. В. Искусственные нейронные сети. Теория и практика. - 2-е изд., стереотип. - М.: Горячая линия - Телеком, 2002. - 382 с.: ил.

3. Яхъяева Г.Э. Нечёткие множества и нейронные сети: Учебное пособие. М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2006. - 316с.: ил.

4. Эрмитова интерполяция [Электронный ресурс] / Статья - Электрон. дан. http://dic.academic.ru/dic.nsf/ruwiki/1896283 - Режим доступа: свободный - Загл. с экрана - Яз. рус. (дата обращения 18.05.2014)

5. Хортсманн К.С., Корнелл Г. Библиотека профессионала. Java 2.

Том 1. Основы.: Пер. с англ. -- М.: Издательский дом "Вильямc", 2003. -- 848 с: ил.

6. Гери Д. М., Хортсманн К.С. JavaServer Faces. Библиотека профессионала, 3-е изд.: Пер. с англ. - М.: ООО «И,Д, Вильямс», 2011. - 544 c.: ил. - Парал. тит. англ.

7. OpenWeatherMap - как энтузиасты делают погоду [Электронный ресурс] / Статья - Электрон. дан. http://habrahabr.ru/post/164045/ - Режим доступа: свободный - Загл. с экрана - Яз. рус. (дата обращения 15.02.2014)

8. Т.В. Филатова Применение нейронных сетей для аппроксимации данных API [Электронный ресурс] / Статья - Электрон. Дан. http://sun.tsu.ru/mminfo/000063105/284/image/284_121-125.pdf - Режим доступа: свободный - Загл. с экрана - Яз. рус. (дата обращения 20.03.2014)

9. OpenWeatherMap API [Электронный ресурс] / Статья - Электрон. дан. http://openweathermap.org/API - Режим доступа: свободный - Загл. с экрана - Яз. англ. (дата обращения 18.02.2014)

10. JSON.simple example - Read and write JSON [Электронный ресурс] / Статья - Электрон. Дан. http://www.mkyong.com/java/json-simple-example-read-and-write-json/ - Режим доступа: свободный - Загл. с экрана - Яз. англ. (дата обращения 02.03.2014)

11. Leaflet Quick Start Guide [Электронный ресурс] / Статья - Электрон. дан. http://leafletjs.com/examples/quick-start.html#leaflet-quick-start-guide - Режим доступа: свободный - Загл. с экрана - Яз. англ. (дата обращения 25.03.2014)

Размещено на Allbest.ru


Подобные документы

  • Схематическое представление сигмоидной функции. Слой как группа нейронов, на которые входной сигнал приходит одновременно. Характеристика специфических особенностей кохоненоподобной нейросетевой модели. Описание модели работы самоорганизующихся карт.

    курсовая работа [1,6 M], добавлен 30.06.2017

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

    дипломная работа [1,3 M], добавлен 20.12.2013

  • Описание мониторинга выбросов случайных процессов контролируемых параметров. Основные принципы обработки статистических данных в базисе аддитивной аппроксимации стандартными распределениями. Разработка методов аппроксимирующих вкладов значений выборки.

    контрольная работа [308,2 K], добавлен 19.08.2015

  • Правовое применение детектора лжи. Алгоритм обратного распространения ошибки. Процент правильного определения результата. Корректировка параметров и поднятие процента правильного определения результатов. Направления развития нейросетевого детектора лжи.

    презентация [176,6 K], добавлен 14.08.2013

  • Описание функциональных возможностей технологии Data Mining как процессов обнаружения неизвестных данных. Изучение систем вывода ассоциативных правил и механизмов нейросетевых алгоритмов. Описание алгоритмов кластеризации и сфер применения Data Mining.

    контрольная работа [208,4 K], добавлен 14.06.2013

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

    курсовая работа [700,0 K], добавлен 14.01.2015

  • Реализация приложения, которое выполняет считывание, обработку, визуализацию и аппроксимацию экспериментальных данных полиномиальной функции. Блок схема алгоритма аппроксимации методом наименьших квадратов. Разработка интерфейса и листинга программы.

    курсовая работа [1,1 M], добавлен 07.07.2013

  • Подбор средствами MS Excel подходящего варианта аппроксимации (линейной, логарифмической, степенной, полиномиальной) по заданным данным. Доказательство оптимальности выбора путем сравнения коэффициентов достоверности и аппроксимации для каждого варианта.

    контрольная работа [1,3 M], добавлен 19.08.2010

  • Автоматизированная информационная система домашней фонотеки. Формирование реляционной модели данных, взаимосвязей между таблицами. Создание запросов для формирования условий отбора интересующей пользователя информации, форм для ввода данных и отчетов.

    контрольная работа [590,2 K], добавлен 15.08.2009

  • Обзор методов и подходов решения поставленной задачи аппроксимации логического вывода экспертной системы. Разработка и описание метода сетевого оператора для решения данной задачи. Разработка алгоритма решения. Проведение вычислительного эксперимента.

    дипломная работа [1,5 M], добавлен 23.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.