- •Содержание
- •Техническое задание
- •Введение
- •Разработка алгоритма
- •Математический алгоритм
- •Разработка схем алгоритмов
- •2. Разработка программы
- •2.1 Разработка программы на пк.
- •2.2 Разработка программы на микроконтроллер.
- •Вычислительный эксперимент
- •3.1 Программа разработанная на языке с#.
- •4.3 Обращение к программе
- •Входные и выходные данные
- •Руководство пользователя
- •Заключение
- •Список литературы
- •Приложение а Текст программы на пк.
- •Приложение б Текст программы на микроконтоллер.
Вычислительный эксперимент
3.1 Программа разработанная на языке с#.
При запуске вызываем Windows окно. Ознакомившись, вводим данные с клавиатуры, требуемые программой. Вычислительный эксперимент представлен на рисунке 5.
Рисунок 5 - Результат работы программы, представленный в Windows окне
При неправильном использовании возникают ошибки, представленные на рисунках 6, 7.
Рисунок 6 – Ошибки при вводе данных
Рисунок 7 – Ошибки при вводе данных
3.2 Программа разработанная на микроконтроллер.
На микроконтроллер, с заранее установленной прошивкой, требуется только лишь подать питание, подключив USB-кабель к отладочной плате, и наблюдать за результатом, так как основное управление происходит с ПК.
Вычислительный эксперимент представлен на рисунках 8, 9.
Рисунок 8 – Результат вычислительного эксперимента.
Рисунок 9 – Результат вычислительного эксперимента.
Руководство программиста
4.1 Назначение и условия применения программы
Программа предназначена для распознавания двух классов чисел.
Для запуска этой программы необходимо иметь на компьютере установленную версию Windows XP/Vista/7. Данная программа разрабатывалась в среде MSVisualC# 2010(Microsoft .NET Framework 4.0).
4.2 Характеристика программы
4.2.1 Программа для ПК.
Для написания программы нам понадобились следующие команды:
Получение числовых значений из текстовых полей:
neyr1 = Convert.ToInt32(textBox1.Text); (cм. Приложение А)
Вывод окошка:
MessageBox.Show("Введите количество нейронов первого слоя");
(cм. Приложение А)
Чтение содержимого файла:
text = File.ReadAllLines("1-1.txt"); (cм. Приложение А)
Сброс текстбокса:
textBox1.Clear(); (cм. Приложение А)
В данной программе был создан класс - class Neyro, с помощью которого создается нейросеть, и затем ведется работа с ней.
Класс содержит следующие переменные:
public double[] prom, vvod;
public double[,] w1, w2;
public double[] rez;
public int count1=0, count2=0;
public int neyr1, neyr2;
public int[] ogid;
public bool[] ogid1, ogid2;
public double k, skor;
public double[] err_m = new double[100]; (cм. Приложение А)
Значениям переменных neyr1, neyr2 присваивается значение количества нейронов в первом и втором слоях нейросети соответственно.
Массив vvod заполняется из файла с входными данными. Далее вычисляются значения массивов prom и rez. Массив prom – это результаты выходов нейронов первого слоя. А массив rez – результаты выходов нейросети.
Так же в классе используются методы:
public int[] Vihod(int kol, int kl) - метод, формирующий целевой вектор.
public void Korekt() - метод, коректирующий синапсы.
public void Rez() – метод вычисления результата нейросети.
public void CreateNS() – метод, создающий нейросеть.
public void Obuchenie(string file, StreamWriter sw1) – метод, обучающий нейросеть определенному классу чисел.
Для установки соединения по интерфейсу RS-232 использовался класс SerialPort и в частности следующие методы:
Open() - установление соединения.
Close() – завершение соединения.
ReadLine() – чтение данных, пришедших по интерфейсу RS-232.
WriteLine(string ) – отправка данных по интерфейсу RS-232.
Текст программы класса представлен в Приложении А.
Правильность работы класса и программы в целом подтверждена вычислительным экспериментом. (см. рисунки 5-9).
4.2.2 Программа для микроконтроллера.
Программа для микроконтроллера написана на языке С. В этом языке программирования нет классов, поэтому для создания модели нейросети использовалась структура:
typedef struct
{
double vvod[Amount_Vvod];
double prom[Neyr1];
double rez[Neyr2];
double w1[Amount_Vvod][Neyr1];
double w2[Neyr1][Neyr2];
double k;
int ogid1[Neyr2];
int ogid2[Neyr2];
}Neyro;
vvod – массив входных значений нейросети.
prom – массив выходных значений первого слоя нейросети.
rez – массив выходных значений нейросети.
w1 – матрица весовых коэффициентов первого слоя.
w2 – матрица весовых коэффициентов второго слоя.
k – коэффициент активационной функции (сигмоид).
ogid1 – массив значений, ожидаемых на выходе, при подаче на вход чисел первого класса.
ogid2 – массив значений, ожидаемых на выходе, при подаче на вход чисел второго класса.