Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 22.10.2012
Сообщений: 226
1

Использование нейросети fann на разных языках

24.10.2018, 19:31. Показов 879. Ответов 2
Метки нет (Все метки)

Добрый день, коллеги!

Задача: Создать систему, работы нейросети и БД. (выделил тему распознания языка текста)

Моё видение: есть программа которая создает файл выборки, обучает нейросеть и сохраняет её. и есть dll с UDF функцией по которая выполняет загрузку ранее сохраненной нейросети, выполняет работу по распознания языка текста, отдает результат

Я сделал следующие по программе(программа написана на C#):
1. Подключил fann
2. написал код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
            StringBuilder sb = new StringBuilder();
            int countstring = 0;
            for (int i = 0; i < tRAINING_DATADataGridView.Rows.Count; i++)
            {
                string date = Convert.ToString(tRAINING_DATADataGridView[2, i].Value);
 
                if (countstring < date.Distinct().Count())
                {
                    countstring = date.Distinct().Count();
                }
            }
 
            string numInput = tRAINING_DATADataGridView.RowCount.ToString();
            string numHidden = Convert.ToString(countstring);
            string numOutput = tRAINING_DATADataGridView.RowCount.ToString();
 
            string str = numInput + " " + numHidden + " " + numOutput;
            sb.AppendLine(str);
 
            string resultstr;
            for (int i = 0; i < tRAINING_DATADataGridView.Rows.Count; i++)
            {
                resultstr = "";
                // Удалим все кроме букв
                string strtable = Convert.ToString(tRAINING_DATADataGridView[2, i].Value);
                string s1 = Regex.Replace(strtable, "([^\\p{L}])", "");
                // вызов функции подсчета коэфициэнтов встречания букв в тексте
                resultstr = generate_frequencies(s1);
                //запись в файл обучающего файла
                sb.AppendLine(resultstr);
 
                resultstr = "";
                for (int j = 0; j < tRAINING_DATADataGridView.Rows.Count; j++)
                {
                    if (i == j)
                        resultstr += "1 ";
                    else
                        resultstr += "0 ";
 
                }
                sb.AppendLine(resultstr);
            }
 
            File.WriteAllText("xor.data", sb.ToString());
 
            MessageBox.Show("Сеть обучена");
 
 
            try
            {
                FbConnection connection = new FbConnection(Properties.Settings.Default.ConnectionString1);
                connection.Open();
                FbTransaction transaction = connection.BeginTransaction();
 
 
                FbCommand cmd = new FbCommand("", connection, transaction);
 
                for (int i = 0; i < tRAINING_DATADataGridView.Rows.Count; i++)
                {
                    cmd.CommandText = "INSERT INTO TABL_SAMPLING (DATATIME, ID_TRANING_DATA, SERIAL_NUMBER) values ((select current_timestamp from rdb$database), " + Convert.ToInt32(tRAINING_DATADataGridView[0, i].Value) + ", " + i + " )";
                    cmd.ExecuteNonQuery();
                }
 
                transaction.Commit();
                connection.Close();
 
                MessageBox.Show("Выборка успешно добавлена в БД.", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка ошибок! \n\n" + ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
 
 
            uint num_input = Convert.ToUInt32(Convert.ToInt32(numInput));
 
            uint num_output = Convert.ToUInt32(Convert.ToInt32(numOutput));
            int layerss = Convert.ToInt32(numOutput);
            uint num_layers = Convert.ToUInt32(layerss - 1);
            uint num_neurons_hidden = Convert.ToUInt32(Convert.ToInt32(numHidden));
 
            NeuralNet net = new NeuralNet(FANNCSharp.NetworkType.LAYER, num_layers, num_input, num_neurons_hidden, num_output);
 
            TrainingData data = new TrainingData();
            data.ReadTrainFromFile("xor.data");
 
            net.InitWeights(data);
 
            net.TrainOnData(data,
                    1000, // max iterations
                    10, // iterations between report
                    0 //desired error
                    );
 
            net.Save("xor.net");
            MessageBox.Show("Файл с нейросетью готов!", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Information);
Всё работает, файл с нейросетью создается.


Для dll я так же написал код (dll написана на c++):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
static char * u_delspace(char * str)
{
    int ptr=0;
    std::vector<double> list;
    char * strings, results;
    int total, variantPrav;
    fann_type *calc_out;
    fann_type input[59];
    int sizelist = list.size();
    std::string test1;
    struct fann *ann;
    double chislo, result, max;
    bool e;
    char temp;
    char * resultss;
 
 
        strings = str;
        std::regex r("/[^\p{L}]/iu");
        total = strlen(strings);
        
        for (int i = 0; i < total; i++){
            temp = strings[i];
            e = true;
            list.clear();
            for (int t = 0; t < sizelist; t++){
                if (temp == list[t]){
                    e = false;
                }
            }
            if (e == true){
                int count = 0;
                for (int j = 0; j < total; j++){
                    if (temp == strings[j]){
                        count++;
                    }
                }
 
                chislo = (count / total);
                result = floor(chislo*1000)/1000;
 
                input[i] = result;
 
                list.push_back(result);
            }
        }
 
        ann = fann_create_from_file("C:\\DB\\text.net");
        if(!ann)
        {
            return "Error creating ann \n";
        }
        calc_out = fann_run(ann, input);
        max = calc_out[0];
        variantPrav = 0;
 
 
 
        for (int i = 0; i < 10; ++i) {
            if (calc_out[i] > max) {
                max = calc_out[i];
                variantPrav = i;
            }
        }
        fann_destroy(ann);
        test1 = std::to_string(variantPrav);
        resultss = &test1[0u];
 
 
    
 
    return resultss;
}
но при запуске ошибка: "FANN Error 3: Wrong version of configuration file, aborting read of configuration file "xor.net""

Соответственно вопросы:
1. Возможно ли так использовать fann написать 1 часть на с# (FANNCSharp), а 2 часть на C++.
2. Если возможно: В чем может быть проблема? почему ошибка.

Добавлено через 42 минуты
дополню: в функцию в dll я подсовывал файлы с конфигурацией нейросети и не созданные мной, а из интернета..

Добавлено через 5 часов 51 минуту
Мне может в другой раздел нужно?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2018, 19:31
Ответы с готовыми решениями:

Библиотека FANN: нейросети
Добрый день. Недавно начал заниматься нейросетями. Нашел исходники библиотеки FANN . Разобрался с...

Сайт для разных регионов на разных языках!
Доброго время суток, подскажите пожалуйстя, я веб-дизайнер любитель и хотел бы сделать сайт на...

Сайт на разных языках
Подскажите пожалуйста! как сделать саит на нескольких языках? Чтоб был переключатль для выбора...

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

2
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
24.10.2018, 19:47 2
А если всё на C#, то работает?
0
2 / 2 / 1
Регистрация: 22.10.2012
Сообщений: 226
24.10.2018, 21:03  [ТС] 3
Можно закрыть. Проблема была в том что нужно было сохранять файл так:
C#
1
                    uint decimal_point = (uint)net.SaveToFixed("xor_fixed.net");
и использовать файл xor_fixed.net
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2018, 21:03

Строки на разных языках
Возникла такая проблема: нужно выгрузить все реквизиты и все синонимы всех объектов метаданных,...

Раскрутка блога на разных языках
Добрый день, посоветуйте как лучше поступить при создании сайта на двух языках, чтобы при этом...

Вывод текста на разных языках
Я в отчаянии и я нуб. В файле есть вот такие строки $levelLabels = array('Тип сервера',...

вывод статьи на разных языках
у меня двуязычный сайт. при вхождении на сайт - сайт на росс. языку если не подходит пользователь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.