Нейронные сети. Описание. Обучение. Реализация.

Общие сведения и виды искусственного интеллекта | Методы обучения нейронных сетей | Реализация

Для реализации работы нейронной сети необходимо подготовить базу для работы с матрицами и векторами. Естесственно во многих средах программирования уже есть соответствующие классы. Но мы Не будем лезть в дебри и создадим свои классы, имеющие необходимые функции.

Перед компиляцией стоит добавить в соответствующие места кода символ "<" так как html код "съедает" его.

Класс работы с матрицами

Matrix.h
#include "stdafx.h"
#pragma once
template
class Vector;

// Begining of Matrix!!!
#include "stdafx.h"
#include 
template
class Matrix
{
	int stroka,stolbec;
	T**mat;
public:
	int getStroka(); //возвращает число строк
	int getStolbec(); //возвращает число столбцов
	void SS(int,int); //переопределяет число строк и столбцов в матрице,
			  //инициализирует  матрицу нулями
	void Freemem(int); // освобождениме памяти
	void RandomInit(); // инициализирует матрицу случайными значениями от 0 до 1 
	void Init(); // ручной ввод значений элементов матрицы
	void Print(); // вывод матрицы на экран
	void Transpon(); // транспонирование
	void toEMatrix(); // переводит матрицу в еденичную (при stroka=stolbec)
	void setIJ(int,int,T); // ввод ij элемента матрицы
	void FermiInit(Vector,double,double); // инициализация функцией Ферми
	T getIJ(int,int); // возвращает ij элемент
	T*operator[](int);
	Matrix&operator*(T);
	Matrix&operator*(Matrix&);
	Matrix&operator=(Matrix&);
	Matrix&operator+(Matrix&);
	Matrix&operator-(Matrix&);
	Matrix();
	Matrix(int,int);
	~Matrix();
};
// Matrix.cpp
template
Matrix::Matrix()
{
	this->stroka=1;
	this->stolbec=1;
	mat=new T*[1];
	mat[0]=new T[1];
	mat[0][0]=0;
}
template
Matrix::Matrix(int a,int b)
{
	this->stroka=a;
	this->stolbec=b;
	mat=new T*[a];
	for(int i=0;i
Matrix::~Matrix()
{
	for(int i=0;i
void Matrix::SS(int a,int b)
{
	for(int i=0;istroka=a;
	this->stolbec=b;
	mat=new T*[a];
	for(int i=0;i
void Matrix::setIJ(int i,int j,T e)
{
	mat[i][j]=e;
}
template
T Matrix::getIJ(int i,int j)
{
	return mat[i][j];
}
template
void Matrix::Init()
{
	cout<<"Enter elements of Matrix:"<stroka;i++)
	{
		for(int j=0;jstolbec;j++)
		{
			cout<<"Element of ["<>this->mat[i][j];
		}
		cout<
void Matrix::RandomInit()
{
	float z=100;
	double tmp;
	for(int i=0;istroka;i++)
	{
		for(int j=0;jstolbec;j++)
		{
		tmp=(rand()%100)/z;
		if(tmp==0)
			tmp=0.01;
		this->mat[i][j]=tmp;
		}
	}
}
template
void Matrix::Print()
{
	cout<<"Matrix is:\n";
	for(int i=0;istroka;i++)
	{
		for(int j=0;jstolbec;j++)
			cout<<"\t"<mat[i][j];
		cout<
void Matrix::toEMatrix()
{
	if(this->stroka!=this->stolbec)
		cout<<"Can not convert matrix to EMatrix!\n";
	else
	{
		for(int i=0;istroka;i++)
		{
			for(int j=0;jstolbec;j++)
			{
				if(i==j)
					this->mat[i][j]=1;
				else
					this->mat[i][j]=0;
			}
		}
	}
}
template
void Matrix::Transpon()
{
     T**tmp=new T*[stolbec];
     for(int i=0;i
int Matrix::getStroka()
{
	return stroka;
}
template
void Matrix::FermiInit(Vector v,double alpha, double beta)
{
	for(int i=0;i
int Matrix::getStolbec()
{
	return stolbec;
}
template
void Matrix::Freemem(int n)
{
	for(int i=0;i
T*Matrix::operator[](int idx)
{
	return mat[idx];
}
template
Matrix&Matrix::operator=(Matrix&b)
{
	for(int i=0;istroka=b.stroka;
	this->stolbec=b.stolbec;
	mat=new T*[stroka];
	for(int i=0;i
Matrix&Matrix::operator+(Matrix&b)
{
	Matrix*tmp=new Matrix(b.stroka,b.stolbec);
	if(this->stolbec!=b.stolbec||this->stroka!=b.stroka)
	{
		cout<<"Error! '+' is bad operation for Matrixs!\n";
		return*tmp;
	}
	for(int i=0;i
Matrix&Matrix::operator-(Matrix&b)
{
	Matrix*tmp=new Matrix(b.stroka,b.stolbec);
	if(this->stolbec!=b.stolbec||this->stroka!=b.stroka)
	{
		cout<<"Error! '-' is bad operation for Matrix!\n";
		return*tmp;
	}
	for(int i=0;i
Matrix&Matrix::operator*(Matrix&b)
{
	Matrix*tmp=new Matrix(this->stroka,b.stolbec);
	if(this->stolbec!=b.stroka)
	{
		cout<<"Error! '*' is bad operation for Matrix!\n";
		return*tmp;
	}
	for(int i=0;istroka;i++)
		for(int j=0;j
Matrix&Matrix::operator*(T b)
{
	Matrix*tmp=new Matrix(this->stroka,this->stolbec);
	for(int i=0;istroka;i++)
		for(int j=0;jstolbec;j++)
			(*tmp)[i][j]=(*this)[i][j]*b;
	return*tmp;
}
 

Страницы: 1 | 2 | 3

СГУ.clan - в помощь студентам
|

Хостинг от uCoz