close

Вход

Забыли?

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

?

отчет лаба 2(Николай 4 слоя)

код для вставкиСкачать
Министерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
"Ижевский государственный технический университет
имени М. Т. Калашникова"
Кафедра "Мехатронные системы"
Лабораторная работа № 2
Дисциплина: "ИТиПЗ"
Тема: "Искусственные нейронные сети. Разработка и исследование искусственного нейрона"
Выполнил:студент гр. 7-05-3
Скоробогатов Н.А.
Проверил: преподаватель
Решетова Е.А.
Ижевск 2012
Содержание
Задание на лабораторную работу3
Разработка схемы алгоритма решения задачи4
Разработка программы7
Результаты вычислительного эксперимента 12
Выводы 13
Список литературы 13
Задание на лабораторную работу
Исследовать характеристики искусственной нейронной сети (ИНС).
Разработать алгоритм и программу, имитирующую модель n-слойной ИНС.
Исследовать влияние входного образа на отклик сети.
Функция активации выбрана в соответствии с предложенным вариантом в таблице 1.
Таблица 1 - Вариант задания
Функция активацииРаспределение весовых коэффициентов W(k), k=[0;1], шаг 0,2Кол-во слоев nЛинейная y=λS4
1. Разработка алгоритма
Схема алгоритма программы, имитирующей модель искусственного порогового нейрона, представлена на рисунке 2.
Рисунок 2 - Схема алгоритма программы
Рисунок 2 - Продолжение
2. Разработка программы
В соответствии с алгоритмом разработана программа. Текст программы представлен на рисунке 3.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace neuron
{
public class Neuron1
{
public const int n = 64;
public double lyambda;
public double[] input;
public double[] weight;
public double output;
public Neuron1()
{
this.weight = new double[n];
this.input = new double[n];
this.lyambda = 1;
}
public void Activate()
{
double sum = 0;
for (int i = 0; i < n; i++)
{
sum += input[i] * weight[i];
}
output = lyambda * sum;
output = Math.Floor(output * 10000) / 10000;
}
/// <summary>
/// Получение выхода нейрона.
/// </summary>
/// <returns></returns>
public double getOutput()
{
return output;
}
/// <summary>
/// Установка весов
/// </summary>
/// <param name="temp"></param>
public void setWeight(double[] temp)
{
for (int i = 0; i < n; i++)
{
if (temp[i] < 0.5)
{
weight[i] = lyambda * temp[i];
}
else
{
weight[i] = lyambda * temp[i] * -1;
}
Рисунок 3 - Содержание файла Neuron1.cs
}
}
public void setInput(double[] temp)
{
for (int i = 0; i < n; i++)
{
input[i] = temp[i];
}
}
}
}
weight[i] = lyambda * temp[i] * -1;
}
}
}
public void setInput(double[] temp)
{
for (int i = 0; i < n; i++)
{
input[i] = temp[i];
}
}
}
}
Рисунок 3 - Продолжение
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;
using System.Drawing.Drawing2D;
using neuron;
namespace neuron_network
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Shapes = new List<GraphicsPath>();
Points = new List<Point>();
pictureBox1.Image = new Bitmap("Clean512.bmp");
}
List<GraphicsPath> Shapes;
List<Point> Points;
Neuron1[] Sloy1, Sloy2, Sloy3, Sloy4;
byte[,] TmpPattern = new byte[8, 8];
Рисунок 4 - Содержание файла Form1.cs
/*byte[,] Pattern = new byte[32, 32];
byte[,] TmpLearn = new byte[32, 32];*/
public Point TopLeft, BottomRight;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
Points.Add(e.Location);
pictureBox1.Refresh();
}
else
{
if (Shapes.Any(x => x.IsVisible(e.Location)))
pictureBox1.Refresh();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (this.Points.Count > 2)
{
var gp = new GraphicsPath();
gp.AddCurve(this.Points.ToArray());
Shapes.Add(gp);
Points = new List<Point>();
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = Graphics.FromImage(pictureBox1.Image);
//g.SmoothingMode = SmoothingMode.AntiAlias;
if (Points.Count > 2)
{
using (var p = new Pen(Color.Black, 20))
g.DrawCurve(p, Points.ToArray());
}
foreach (var gp in Shapes)
{
//var c = gp.IsVisible(PointToClient(Control.MousePosition)) ? Color.Blue : Color.Silver;
Pen p = new Pen(Color.Black, 20);
g.DrawPath(p, gp);
}
}
private void button1_Click(object sender, EventArgs e)
{
TopLeft = new Point();
BottomRight = new Point();
Bitmap bmp = new Bitmap(pictureBox1.Image);
Color backcolor = new Color();
TmpPattern = new byte[8, 8];
backcolor = Color.FromArgb(255, 255, 255, 255);
double percent = 0;
for (int x = 0; x < pictureBox1.Width; x++)
{
Рисунок 4 - Продолжение
for (int y = 0; y < pictureBox1.Height; y++)
{
if (backcolor != bmp.GetPixel(x, y))
percent++;
}
}
percent = 0.99 * percent / (pictureBox1.Height * pictureBox1.Width);
int deltaX = pictureBox1.Width / 8;
int deltaY = pictureBox1.Height / 8;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
double temp = 0;
for (int x = i * deltaX; x < (i + 1) * deltaX; x++)
{
for (int y = j * deltaY; y < (j + 1) * deltaY; y++)
{
if (bmp.GetPixel(x, y) != backcolor)
temp++;
}
}
temp = temp / (deltaX * deltaY);
if (temp > percent)
{
int Num = 8 * j + i + 2;
string PicName = "pictureBox" + Num;
var TmP = Controls.Find(PicName, false)[0];
TmP.BackColor = Color.Black;
TmpPattern[i, j] = 1;
}
else
{
int Num = 8 * j + i + 2;
string PicName = "pictureBox" + Num;
var TmP = Controls.Find(PicName, false)[0];
TmP.BackColor = Color.White;
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
#region Создание слоев и установка весов
Sloy1 = new Neuron1[64];
Sloy2 = new Neuron1[64];
Sloy3 = new Neuron1[64];
Sloy4 = new Neuron1[64];
Random rnd = new Random();
double[] temp = new double[64];
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
temp[j] = rnd.NextDouble();
Рисунок 4 - Продолжение
}
Sloy1[i] = new Neuron1();
Sloy1[i].setWeight(temp);
}
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
temp[j] = rnd.NextDouble();
}
Sloy2[i] = new Neuron1();
Sloy2[i].setWeight(temp);
}
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
temp[j] = rnd.NextDouble();
}
Sloy3[i] = new Neuron1();
Sloy3[i].setWeight(temp);
}
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
temp[j] = rnd.NextDouble();
}
Sloy4[i] = new Neuron1();
Sloy4[i].setWeight(temp);
}
#endregion
#region Обработка массива
for (int i = 0; i < 64; i++)
{
int Num = i + 2;
string PicName = "pictureBox" + Num;
var TmP = Controls.Find(PicName, false)[0];
if (TmP.BackColor == Color.Black) temp[i] = 1.0;
else temp[i] = 0.0;
}
for (int i = 0; i < 64; i++)
{
Sloy1[i].setInput(temp);
Sloy1[i].Activate();
}
for (int i = 0; i < 64; i++)
{
temp[i] = Sloy1[i].getOutput();
}
for (int i = 0; i < 64; i++)
{
Sloy2[i].setInput(temp);
Sloy2[i].Activate();
}
for (int i = 0; i < 64; i++)
Рисунок 4 - Продолжение
{
temp[i] = Sloy2[i].getOutput();
}
for (int i = 0; i < 64; i++)
{
Sloy3[i].setInput(temp);
Sloy3[i].Activate();
}
for (int i = 0; i < 64; i++)
{
temp[i] = Sloy3[i].getOutput();
}
for (int i = 0; i < 64; i++)
{
Sloy4[i].setInput(temp);
Sloy4[i].Activate();
}
string stroka = "";
#endregion
for (int i = 0; i < 64; i++)
{
stroka = stroka + Sloy4[i].getOutput().ToString()/*("F")*/ + " ";
}
MessageBox.Show(stroka);
}
}
}
Рисунок 4 - Содержание файла Form1.cs
3. Вычислительный эксперимент
Рисунок 4 - Модель искусственного нейрона
Вывод
В результате выполнения лабораторной работы закрепили навыки программирования на языке C#. Создали имитацию работы нейрона, похожего на работу нейрона человека. При выполнении вычислительного эксперимента убедились в правильности работы программы. Список литературы
1. П.В. Лекомцев: Искусственные нейронные сети. Разработка и исследование искусственного нейрона: Методическое пособие к выполнению лабораторной работы №2
по дисциплине "ИТиПЗ"- Ижевск, ИжГТУ, 2009. - 5 с.
4
Документ
Категория
Без категории
Просмотров
19
Размер файла
176 Кб
Теги
слоя, лаба, отчет, николай
1/--страниц
Пожаловаться на содержимое документа