Библиотека нейронной сети - невозможно преобразовать COM-объект типа - PullRequest
0 голосов
/ 17 июня 2020
  • Я загрузил библиотеку нейронной сети OLSOFT с вашего веб-сайта.
  • Я преобразовал часть «Пример SOFM (VB. NET)» в «NN_LIB_COM6.chm» в C# коды.
  • Я запустил Register.bat
  • Я сделал "Обзор" в "NN_LIB_COM6.chm". => regsvr32.exe "путь и имя файла к файлу DLL библиотеки"
  • Все процессы выполнены успешно.
  • Я создал новое консольное приложение в Visual Studio 2019, добавил .dll в список ссылок и запустил коды.
  • Я получил некоторую ошибку, как показано ниже. Я не могу найти решение в inte rnet. В кодах есть серийник.
  • Вкратце, я хочу запустить нейронную сеть с кодами C#, как в надстройке Excel.

изображение ошибки

    static void Main(string[] args)
    {
        // countries list. Countries and their characteristics.
        object[,] countries = new object[,] {
            { "Algeria", 3.9, 31193917, 1.74, 2381740, 0, 5550 },
            { "Argentina", -3, 36955182, 1.16, 2736690, 30200, 17000 },
            { "Australia", 4.3, 19169083, 1.02, 7617930, 68920, 21070 },
            { "Brazil", 0.8, 172860370, 0.94, 8456510, 55455, 28000 },
            { "Canada", 3.6, 31281092, 1.02, 9220970, 755170, 7100 },
            { "China", 7, 1261832482, 0.9, 9326410, 270550, 498720 },
            { "India", 5.5, 1014003817, 1.58, 2973190, 314400, 480000 },
            { "Indonesia", 0, 224784210, 1.63, 1826440, 93000, 45970 },
            { "Iran", 1, 65619636, 0.83, 1636000, 12000, 94000 },
            { "Kazakhstan", 1.7, 16733227, -0.05, 2669800, 47500, 22000 },
            { "Libya", 2, 5115450, 2.42, 1759540, 0, 4700 },
            { "Mexico", 3.7, 100349766, 1.53, 1923040, 49510, 61000 },
            { "Mongolia", 3.5, 2650952, 1.54, 1565000, 0, 800 },
            { "Niger", 2, 10075511, 2.75, 1266700, 300, 660 },
            { "Peru", 2.4, 27012899, 1.75, 1280000, 5220, 12800 },
            { "Russia", 3.2, 146001176, -0.38, 16995800, 79400, 40000 },
            { "Saudi Arabia", 1.6, 22023506, 3.28, 1960582, 0, 4350 },
            { "Sudan", 3, 35079814, 2.84, 2376000, 129810, 19460 },
            { "United States", 4.1, 275562673, 0.91, 9158960, 470131, 207000 } };

        // create new NNLib object
        NN_LIB_COM6Lib.NeuralNetwork nn = new NN_LIB_COM6Lib.NeuralNetwork();
        string serial = "NNAHI-99XB5-RZOTR-FRFTN-DPBX5";

        try
        {
            // network layout definition. 1 layer, 6 inputs, 3 outputs, Exponent activation function.
            int[] LayerNeuronsCount = new int[] { 3 };
            nn.CreateNetworkEx(serial, 1, 6, LayerNeuronsCount, 0.5, 3);
            // initialize synapses with Convex Combination method
            nn.InitSynapsesConvex();
            // set learning parameters
            nn.SetNju(0.1);
            nn.SetLearnRadius(2);

            // show network layout on Console
            Console.WriteLine(nn.ExportSynapses());
        }
        catch (Exception e2)
        {
            nn.DeleteNetwork();
            nn = null/* TODO Change to default(_) if this is not a reference type */;
            Console.WriteLine("Exception: " + e2.Message);
            return;
        }

        // Iterate 300 times (epoches)
        for (int cnt = 0; cnt <= 300; cnt++)
        {
            for (int i = countries.GetLowerBound(0); i <= countries.GetUpperBound(0); i++)
            {
                // prepare input values array
                double[] InputValues = new double[] { 
                    (double)countries[i, 1], 
                    (double)countries[i, 2],
                    (double)countries[i, 3],
                    (double)countries[i, 4],
                    (double)countries[i, 5],
                    (double)countries[i, 6] };

                // set learning parameters. They can vary during learning process.
                // nn.SetLearnRadius(CInt(3 * ((300 - cnt) / 350)))
                // nn.SetLearnRate(0.6 * ((300 - cnt) / 300))
                nn.SetLearnRadius(1);
                nn.SetLearnRate(0.6);

                // set input values for SOFM
                nn.SetInputValues(InputValues);

                // alternate variant that uses Convex Combination method.
                // nn.SetInputValuesConvex(InputValues, (cnt * countries.Length + i) / (101 * countries.Length))

                // additional modifications can be applied to input values and synapsys
                // nn.NormalizeInputValues()
                // nn.NormalizeSynapsys()

                // propagate input values and learn SOFM
                nn.PropagateSOFM();
                nn.LearnSOFM();
            }
        }

        // show trained network layout on Console
        Console.WriteLine(nn.ExportSynapses());

        // now we can classify countries list. This procedure is the same as above except we do not 
        // call LearnSOFM() but instead call GetClosestNeuron() to obtain classified cluster number
        for (int i = countries.GetLowerBound(0); i <= countries.GetUpperBound(0); i++)
        {
            double[] InputValues = new double[] {
                (double)countries[i, 1],
                (double)countries[i, 2],
                (double)countries[i, 3],
                (double)countries[i, 4],
                (double)countries[i, 5],
                (double)countries[i, 6] };

            nn.SetInputValues(InputValues);
            nn.PropagateSOFM();

            Console.WriteLine(countries[i, 0] + " - " + nn.GetClosestNeuron());
        }

        // delete network after use
        nn.DeleteNetwork();

        // delete NNLib object
        nn = null/* TODO Change to default(_) if this is not a reference type */;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...