close

Вход

Забыли?

вход по аккаунту

?

ДЗ№1

код для вставкиСкачать
 Министерство образования и науки Российской Федерации
Калужский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования
"Московский государственный технический университет имени Н.Э. Баумана"
(КФ МГТУ им. Н.Э. Баумана)
О Т Ч Е Т
Домашнее задание №1
ДИСЦИПЛИНА:"Нейрокомпьютеры"ТЕМА:" Метод покоординатного спуска в BP"
Выполнил: студент гр. ЭВМ-91Салтыков В.С. ____________________
Проверил:Комарцова Л.Г. ____________________
Дата сдачи (защиты) лабораторной работы:
Результаты сдачи (защиты):
Калуга, 2013 г.
Теория
Основная идея метода состояла в распространение сигналов ошибки от выходов НС к ее входам, в направлении, обратном прямому распространению сигналов в обычном режиме работы.
Метод обратного распространения ошибки (error back propagation - BP) это итеративный градиентный алгоритм обучения многослойных НС без обратных связей. При обучении ставится задача минимизации функции ошибки:
где
* yj - реальное значение j-того выхода НС;
* dj - идеальное (желаемое) значение j-того выхода НС.
Минимизация E ведется методом градиентного спуска. Подстройка весовых коэффициентов происходит следующим образом:
где
* ωij - весовой коэффициент синаптической связи, соединяющей i-ый и j-ый узлы НС;
* h∈(0,1) - коэффициент скорости обучения;
Полный алгоритм обучения НС с помощью процедуры обратного распространения ошибки строится следующим образом:
1. Инициализировать случайным образом все весовые коэф. НС.
2. Последовательно подать на вход HC все примеры из учебной выборки. Для каждого входа:
2.1. Фаза прямого распространения сигнала: Вычислить выход каждого нейрона НС.
2.2. Фаза обратного распространения сигнала: Для выходного слоя вычислить изменения весов Δω[N] . Для всех остальных слоев вычислить Δω[n] , n = (N-1),...,1.
2.3. Скорректировать все веса НС:
3. Если ошибка НС существенна, перейти на шаг 2, иначе - конец работы.
Программа.
В данном домашем задании необходимо распознать букву Д.
В начале обручам Персептрон 5 раз., русую букву Д и нажимаю кнопку "Обучить". При этом вычисляются веса. Рисунок 1. Обучение Персептрона.
Далее рисуем букву, которую хоти распознать. При этом также вычисляются веса и сравниваются с весами обучающей выборкой. Если они лежат в заданном диапазоне то буква распознается, иначе- нет.
Рисунок 2. Распознавание буквы Д.
Вывод:
Исходный код:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Персептрон
{
class Perceptron
{
private double[,] _weightsMatrix;
private int _size;
private double _threshold = double.MaxValue;
private bool _firstExample = true;
public double[,] Weights
{
get { return _weightsMatrix; }
}
public double Threshold
{
get { return _threshold; }
}
public Perceptron(int size)
{
_size = size;
_weightsMatrix = new double[size, size];
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
_weightsMatrix[i, j] = 0.01;
}
}
}
public void Teach(bool[,] sample)
{
double val = 0;
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
if (sample[i, j])
{
_weightsMatrix[i, j] += 1;
val += _weightsMatrix[i, j];
}
else
_weightsMatrix[i, j] -= 0.2;
}
}
if (_firstExample)
_threshold = val;
else
_threshold = Math.Min(_threshold, val);
_firstExample = false;
}
public void Teach(SimpleCell[,] sample)
{
double val = 0;
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
if (sample[i, j].Selected)
{
_weightsMatrix[i, j] += 1;
val += _weightsMatrix[i, j];
}
else
_weightsMatrix[i, j] -= 0.2;
}
}
if (_firstExample)
_threshold = val;
else
_threshold = (_threshold + val)/2;
_firstExample = false;
}
public void Save()
{
if (!Directory.Exists("Samples"))
Directory.CreateDirectory("Samples");
using (var writer = new BinaryWriter(
File.Create(string.Format("Samples\\Weights.nt"))))
{
writer.Write(_threshold);
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
writer.Write(_weightsMatrix[i, j]);
}
}
writer.Flush();
}
}
public void Load()
{
using (var writer = new BinaryReader(
File.Create(string.Format("Samples\\Weights.nt"))))
{
_threshold = writer.ReadDouble();
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
_weightsMatrix[i, j] = writer.ReadDouble();
}
}
}
}
public bool Check(SimpleCell[,] sample)
{
double val = 0;
for (int i = 0; i < _size; i++)
{
for (int j = 0; j < _size; j++)
{
if (sample[i, j].Selected)
val += _weightsMatrix[i, j];
}
}
System.Windows.MessageBox.Show(string.Format("Набрали {0} из {1}", val, _threshold));
return val > _threshold;
}
}
}
.
Документ
Категория
Рефераты
Просмотров
70
Размер файла
217 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа