Реферат Сети адаптивного резонанса fuzzy ART
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Федеральное агентство по образованию
Государственное образовательное учреждение
Высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ Н.Э. БАУМАНА»
Калужский филиал
Лабораторная работа №4
по курсу: Нейрокомпьютеры
на тему: «
Сети адаптивного резонанса
fuzzy
ART
»
Выполнил: студент
Группы: ЭВМ-93
Новосельцев А.Е.
Приняла:
Комарцова Л.Г.
Калуга, 2010
Исследование алгоритма обучения нечеткой АРТ
Вход X сети является m-мерным вектором, каждая компонента которого xi принадлежит интервалу [0, 1]. Каждой категории, т.е. каждому нейрону в слое распознавания соответствует вектор Wj адаптивных весов. Этот вектор заменяет входные и выходные веса нейрона сети АРТ-1.
Основные этапы обучения:
1. Инициализация.
В начальном состоянии все нейроны слоя распознавания сети являются несвязанными. Все компоненты вектора адаптивных весов каждого нейрона инициализируются единичными значениями:
.
2. Выбор категории.
Вычисляется функция выбора Fj:
, (8)
где ε > 0 – константа. Оператор представляет собой t-норму:
.
Норма в числителе и знаменателе (8) вычисляется, как
.
Затем выбирается нейрон с номером j, для которого функция выбора имеет максимальное значение:
.
Если для нескольких нейронов значения функции выбора совпадают, берется нейрон с меньшим номером.
3. Определение момента резонанса.
Резонанс фиксируется в том случае, если значение функции соответствия выбранной категории j удовлетворяет критерию сходства ρ:
.
При резонансе поиск прекращается, и веса нейрона-победителя с номером j подстраиваются в соответствии с уравнением:
.
В выше приведенном уравнении параметр β представляет собой скорость обучения. Если β = 1, обучение называется быстрым, и уравнение принимает вид
.
Сброс происходит в случае, если
. (10)
Для категории j значение функции выбора Tj сбрасывается в -1 на время предъявления текущего входного вектора. Это действие гарантирует, что j-й нейрон не выиграет конкуренцию. Затем по формуле (9) выбирается новая категория j. Цикл повторяется до тех пор, пока не будет выполнено условие (10) или не будут сброшены все связанные нейроны и выделен новый нейрон, для которого функция сходства примет единичное значение.
Окно программы
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
int m = 10;
int n1 = 100;
public int[,] t= new int [100, 10];
public Form1()
{
InitializeComponent();
for (int j = 0; j < 10; j++)
{
for (int i = 0; i < 100; i++)
{
///инацилизация весов t
t[i, j] = 1;
}
}
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowCount = 10;
dataGridView1.ColumnCount = 10;
dataGridView1.RowHeadersWidth = 5;
dataGridView1.ColumnHeadersHeight = 5;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
dataGridView1.Rows[i].Cells[j].Style.BackColor = Color.White;
}
}
dataGridView2.RowCount = 1000;
dataGridView2.ColumnCount = 10;
for (int i = 0; i < 10; i++)
{
DataGridViewColumn column = dataGridView2.Columns[i];
column.Width = 25;
}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Brown;
}
private void button2_Click(object sender, EventArgs e)
{
for (int i=0; i < 10; i++)
{
for (int j=0; j < 10; j++)
{
dataGridView1.Rows[i].Cells[j].Style.BackColor = Color.White;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
///инацилизация приемника G1 и G2
int[] R = new int[10];
int[] G2 = new int[100];
for (int i = 0; i < m; i++)
{
G2[i] = 1;
}
double q = Convert.ToDouble(textBox1.Text);
bool bul = false;
/////получаем вектор х
int[] x = new int[100];
int[] XX = new int[100];
float[] FX = new float[10];
int index = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (dataGridView1.Rows[i].Cells[j].Style.BackColor == Color.White)
{
x[index] = 0;
}
else
{
x[index] = 1;
bul = true;
}
index++;
}
}
///////////////////////////////////////////////Вычисляется функция выбора
for (int j=0; j < 10; j++)
{
int intX=0;
int intT=0;
for (int i = 0; i < 100; i++)
{
if (x[i]*t[i,j]==1) intX++;
if (t[i,j]==1) intT++;
}
FX[j] =(intX*100)/(intT+1);
}
///////////////////////// поиск нейрона победителя
restert:
int neiron_pobeditel = -1;
float temp = 0;
for (int i = 0; i < 10; i++)
{
if ((temp < FX[i]) && (G2[i]==1))
{
temp = FX[i];
neiron_pobeditel = i;
}
}
if (neiron_pobeditel == -1) goto ennd;
/////////////////////////////////вычисляем норму
int ix=0;
for (int i = 0; i < 100; i++)
{
if (x[i]==1) ix++;
}
/*. Определение момента резонанса
Резонанс фиксируется в том случае, если значение функции
соответст-вия выбранной категории j удовлетворяет критерию сходства ρ: */
int schet = 0;
for (int i = 0; i < 100; i++)
{
XX[i] = t[i, neiron_pobeditel] * x[i];
if (XX[i] == 1)
schet++;
}
if ((schet / ix) >= q)
{
/*При резонансе поиск прекращается, и веса
* нейрона-победителя с номером j подстраиваются в соответствии
* с уравнением:*/
goto go;
}
else ///проводим сброс
{
G2[neiron_pobeditel] = -1;
goto restert;
}
/***************************************************************************************/
go:
for (int i = 0; i < 100; i++)
{
t[i, neiron_pobeditel] = t[i, neiron_pobeditel] * x[i];
}
ennd:;
}
private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void dataGridView2_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
button1.Enabled = false;
}
else
{
button1.Enabled = true;
}
}
private void button3_Click(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10; j++)
{
dataGridView2.Rows[i].Cells[j].Style.BackColor = Color.White;
}
}
int min = 0;
int max = 10;
for (int k = 0; k < 10; k++)
{
int index = 0;
for (int i = min; i < max; i++)
{
for (int j = 0; j < 10; j++)
{
if (t[index, k] == 1)
{
dataGridView2.Rows[i].Cells[j].Style.BackColor = Color.Maroon;
}
else
{
dataGridView2.Rows[i].Cells[j].Style.BackColor = Color.White;
}
index++;
}
}
min = min + 10;
max = max + 10;
}
}
}
}