Борис Животное,
private Task NetworkEfficiency()
{
return new Task(() =>
{
try
{
Console.WriteLine("NetworkEfficiency : Start");
List result = new List();
List mix = new List();
if(cuurModeNumber)
result = Enumerable.Range(0, 10).Select(x => new NeuralNetwork.ResultEffect() { labl = x }).ToList();
else
result = Enumerable.Range(0, NeuralNetwork.alf.Length).Select(x => new NeuralNetwork.ResultEffect() { labl = x }).ToList();
Stopwatch time = new Stopwatch();
time.Start();
for (int i = 0; i < mix.Count; i++)
{
result = NeuralNetwork.EfficiencyEvaluation(mix[i].pixels,
mix[i].width, mix[i].height,
mix[i].label, result);
edit = true;
for (int i = 0; i < result[0].neurons.Length; i++)
{
Invoke((MethodInvoker)(()=>
{
(flowLayoutPanel1.Controls[i] as OutNeuron).Value = result[0].neurons[i].Value;
}));
}
У меня описан метод обратного распространения ошибки. Иначе бы распознавание из 60000 изображений MNIST было бы на уровне как повезет. А так все присутствует, что надо нейронки. Скорость обучения стоит 0.15. Если я вас правильно понял.
private Task NetworkEfficiency()
{
return new Task(() =>
{
try
{
Console.WriteLine("NetworkEfficiency : Start");
List result = new List();
List mix = new List();
if(cuurModeNumber)
result = Enumerable.Range(0, 10).Select(x => new NeuralNetwork.ResultEffect() { labl = x }).ToList();
else
result = Enumerable.Range(0, NeuralNetwork.alf.Length).Select(x => new NeuralNetwork.ResultEffect() { labl = x }).ToList();
if (rb_numbers.Checked)
mix = MixArray(mNIST.digitImages.ToList(), mNIST.imagesNumbersPackeg.myImages);
else
mix = mix = MixArray(mNIST.imagesLettersPackeg.myImages);
Invoke((MethodInvoker)(()=>
{
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = mix.Count();
}));
Stopwatch time = new Stopwatch();
time.Start();
for (int i = 0; i < mix.Count; i++)
{
result = NeuralNetwork.EfficiencyEvaluation(mix[i].pixels,
mix[i].width, mix[i].height,
mix[i].label, result);
edit = true;
int pers = (int)((i / (float)mix.Count) * 100f);
string str = $"{i} / {mix.Count} : ({pers}%)";
if(time.Elapsed.Milliseconds > 50)
{
Invoke((MethodInvoker)(() =>
{
progressBar1.Value = i;
labelCountMNIST.Text = str;
}));
time.Reset();
time.Start();
}
}
int sum_true = 0;
int count = 0;
foreach (var item in result)
{
count += item.False + item.True;
sum_true += item.True;
}
double percent_true = ((double)sum_true / count) * 100;
MessageBox.Show($"Успешных распознаваний: {percent_true.ToString("#.##")}%", "Результат");
Invoke((MethodInvoker)(() => { progressBar1.Value = 0; }));
Invoke((MethodInvoker)(() => { labelCountMNIST.Text = $"{0} / {0}"; }));
for (int i = 0; i < result[0].neurons.Length; i++)
{
Invoke((MethodInvoker)(()=>
{
(flowLayoutPanel1.Controls[i] as OutNeuron).Value = result[0].neurons[i].Value;
}));
}
Console.WriteLine("NetworkEfficiency : End");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Сообщение");
}
});
}