СТАРООСКОЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
им. А. А. УГАРОВА
(филиал) федерального государственного автономного
образовательного учреждения высшего профессионального образования
«Национальный исследовательский технологический университет «МИСиС»
Кафедра АИСУ
ЛАБОРАТОРНАЯ РАБОТА №3
по дисциплине: «Интеллектуальные системы и технологии»
на тему:
«Знакомство с нейронными сетями»
Выполнил:
ст. гр. ИП-11-1д
Проверил:
Старый Оскол, 2014
Лабораторная работа № 3
Знакомство с нейронными сетями
3.1 Цель работы
Ознакомление со структурой нейронных сетей. Получение навыка программирования нейронных сетей.
Порядок выполнения лабораторной работы
Написать программу на С++ моделирующую двухслойную нейронную сеть структуры согласно варианту.
№ варианта Количество входов Количество скрытых нейронов Количество выходов
Функция активации в скрытом слое Функция активации в выходном слое
6 3 4 3 Сигмоидная Линейная
x1y1
x2y2
x3y3
Входной слой Выходной слой
Промежуточный слой
Код программы:
#include"stdafx.h"
#include"iostream"
#include"math.h"
#include"stdlib.h"
usingnamespacestd;
doublefsigmoid(double s) {
doublef,a;
a = 1;
f = 1/(1 + exp(-a*s));
return f;
}
doublefline(double s) {
doublef,k;
k = 10;
f = k*s;
return f;
}
int main()
{
setlocale(LC_ALL, "Russian");
double a[1][3],b[3][4],c[1][4],d[1][4],e[4][3],f[1][3],sum;
doublemin,max;
min = -1.00; max = 1.00;
cout<<"Введите первый входной сигнал (значения от 1 до 10):"<<endl;
for (inti = 1; i<= 3 ; i++) {
cout<<"x"<<i<<"= ";
cin>> a[1][i];
}
cout<<endl;
cout<<"Рандомные значения весовых коэффициентов:"<<endl;
for (inti = 1; i<= 3 ; i++) {
for (int j = 1; j <= 4 ; j++) {
b[i][j] = (double)rand()/(double)RAND_MAX*(max-min)+min;
cout<<"b["<<i<<"]["<< j <<"]= "<< b[i][j] <<endl;
}
cout<<endl;
}
cout<<"Взвешенные суммы для нейронов скрытого слоя:"<<endl;
for (inti = 1; i<= 1; i++) {
for(int j = 1; j <= 4; j++){
c[i][j] = 0;
for (int k = 1; k <= 3; k++)
c[i][j] += a[i][k] * b[k][j];
cout<<"c["<<i<<"]["<< j <<"]= "<< c[i][j] <<endl;
}
cout<<endl;
}
cout<<"Активация скрытого слоя:"<<endl;
for (inti = 1; i<= 4 ; i++) {
d[1][i] = c[1][i] + ((double)rand()/(double)RAND_MAX*(max-min)+min);
fsigmoid(d[1][i]);
cout<<"d[1]["<<i<<"]= "<< d[1][i] <<endl;
}
cout<<endl;
cout<<"Рандомные значения весовых коэффициентов для второго слоя:"<<endl;
for (inti = 1; i<= 4 ; i++) {
for (int j = 1; j <= 3 ; j++) {
e[i][j] = (double)rand()/(double)RAND_MAX*(max-min)+min;
cout<<"e["<<i<<"]["<< j <<"]= "<< e[i][j] <<endl;
}
cout<<endl;
}
cout<<"Взвешенные суммы для нейронов второго слоя:"<<endl;
for (inti = 1; i<= 1; i++) {
for(int j = 1; j <= 3; j++){
f[i][j] = 0;
for (int k = 1; k <= 4; k++)
f[i][j] += d[i][k] * e[k][j];
cout<<"f["<<i<<"]["<< j <<"]= "<< f[i][j] <<endl;
}
cout<<endl;
}
cout<<"Активациявторогослоя:"<<endl;
for (inti = 1; i<= 3 ; i++) {
f[1][i] += (double)rand()/(double)RAND_MAX*(max-min)+min;
fline(f[1][i]);
cout<<"y"<<i<<"= "<< f[1][i] <<endl;
}
system("pause");
}
Графики:
С увеличением суммы:
Лабораторная: Знакомство с нейронными сетями
Лабораторная работа по предмету «Коммуникации»