//Обучение нейронной сети
private void btnTraining_Click(object sender, EventArgs e)
{
//если ListBox пуст
if (listBoxPic.Items.Count == 0)
{
MessageBox.Show(
"Список файлов пуст",
"Внимание",
MessageBoxButtons.OK,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
return ;
}
StatusBar.Text = "Идет обучение!";
Application.DoEvents();
//блокируем элементы формы
OnOfElements(0);
//здесь храняться имена файлов
List<string> files = new List<string>();
for (int i = 0; i < listBoxPic.Items.Count; i++)
{
files.Add(listBoxPic.Items[i].ToString());
}
//здесь храняться все точки из изображений files
List<double[]> all_x = new List<double[]>();
BmpReadData(files, all_x);
//проводим обучение
n.Training(all_x, res);
//записываем весы в файлы
//файлы весов
string[] w_files = { "w1", "w2" };
n.SaveWToFile(w_files);
StatusBar.Text = "Обучение завершено!";
//разблокируем элементы формы
OnOfElements(1);
}
//определение четности цифры
private void btnRes_Click(object sender, EventArgs e)
{
//не выбран файл из списка
if (listBoxPic.SelectedIndex == -1)
{
MessageBox.Show(
"Не выбран файл для определения четности",
"Внимание",
MessageBoxButtons.OK,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
return ;
}
//проверка существования файлов весов w или являются ли они пустыми
try
{
//файлы весов
string[] w_files = { "w1", "w2" };
n.LoadWFromFile(w_files);
}
catch (Exception ex)
{
MessageBox.Show(
"Файлы весов w - не существуют либо пусты\n Нужно обучить нейронную сеть",
"Внимание",
MessageBoxButtons.OK,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
return ;
}
//читаем входы из изображения
n.ReadXFromBmp(listBoxPic.Items[listBoxPic.SelectedIndex].ToString());
//нечетное
double[] odd = { 0, 1, 0, 0, 0 };
//четное
double[] even = { 1, 0, 0, 0, 0 };
string mess = "";
if (n.Error(odd))
mess = "Цифра нечетная";
else if (n.Error(even))
mess = "Цифра четная";
else
mess = "Неизвестная цифра";
MessageBox.Show(
mess,
listBoxPic.Items[listBoxPic.SelectedIndex].ToString(),
MessageBoxButtons.OK,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button2);
}
//param = 0 - блокируем элементы формы, в противном разблокируем
private void OnOfElements(int param)
{
bool res = false;
if (param == 1)
res = true;
btnAdd.Enabled = res;
btnClear.Enabled = res;
btnDel.Enabled = res;
btnRes.Enabled = res;
btnTraining.Enabled = res;
listBoxPic.Enabled = res;
cmbBoxRes.Enabled = res;
Exit.Enabled = res;
}
}
}
Вывод: В ходе выполнения лабораторной работы была построена программа, использующая многослойную нейронную сеть.