Esempio n. 1
0
        public unsafe TrainValInfo getInfo(void *param)
        {
            TrainValInfo info = new TrainValInfo();
            sbyte *      p    = (sbyte *)param;

            info.iterNum   = *(int *)p; p += 4;
            info.numOutput = *(int *)p; p += 4;

            float *values = *(float **)p; p += sizeof(void *);

            if (info.numOutput > 0)
            {
                info.values = new float[info.numOutput];
                for (int i = 0; i < info.numOutput; ++i)
                {
                    info.values[i] = values[i];
                }

                sbyte **names = *(sbyte ***)(p);
                info.outputNames = new string[info.numOutput];
                for (int i = 0; i < info.numOutput; ++i)
                {
                    info.outputNames[i] = new string(names[i]);
                }
            }
            return(info);
        }
Esempio n. 2
0
        //下面是训练的代码
        public unsafe int trainCallback(int eventFlag, int param1, float param2, void *param3)
        {
            if (eventFlag == 3 && param1 > 10)
            {
                return(2);
            }

            if (eventFlag == 7)
            {
                TrainValInfo info = getInfo(param3);
                Debug.WriteLine(info);
            }
            Debug.WriteLine("{0}, {1}, {2}", eventFlag, param1, param2);
            return(0);
        }
Esempio n. 3
0
        public unsafe int trainCallback(int eventFlag, int param1, float param2, void *param3)
        {
            /*
             * #训练事件_初始化网络 1
             * #训练事件_初始化网络完成 2
             * #训练事件_完成一次迭代 3
             * #训练事件_测试开始 6
             * #训练事件_测试完毕 7
             * #训练事件_快照完毕 5
             * #训练事件_训练完成 4
             * #控制信号_无操作 0
             * #控制信号_停止训练 2
             * #控制信号_快照 1
             *
             */

            try
            {
                switch (eventFlag)
                {
                case 1:
                    Log("初始化网络");
                    break;

                case 2:
                    Log("初始化网络完成");
                    break;

                case 3:
                    if (exit)
                    {
                        return(2);
                    }
                    if (param1 == interation)
                    {
                        interation += step;
                        Log($"完成一次迭代,次数:{param1}, 损失:{param2}");
                        return(1);
                    }
                    break;

                case 6:
                    Log("测试开始");
                    break;

                case 7:
                    TrainValInfo info = getInfo(param3);
                    if (info.values[0] > 0.99)
                    {
                        WriteLog($"高精度出现,第{info.iterNum}次迭代,{info.values[0] * 100}%,accuracy:{info.values[0]},ctc_loss = {info.values[1]} (* 1 = {info.values[1]} loss)");
                    }
                    Log($"测试完毕,accuracy:{info.values[0]},ctc_loss = {info.values[1]} (* 1 = {info.values[1]} loss)");
                    break;

                case 5:
                    Log("快照完毕");
                    break;

                case 4:
                    Log("训练完成");
                    break;
                }
                return(0);
            }
            catch (Exception ex)
            {
                WriteLog2(ex.ToString());
                return(0);
            }
        }