簡體   English   中英

卷積神經網絡訓練返回不合邏輯的價值觀

[英]Convolutional Neural Network training returns illogical values

我正在使用https://github.com/cbovar/ConvNetSharp在我的應用程序中使用卷積神經網絡。

不幸的是,圖書館根本沒有完整的文件記錄。 但無論如何,我對培訓過程有疑問:

我聲明了一個字典類型字符串和列表的位圖。

然后我在字典中添加了一些字母(例如a,b,c等等)及其相應的名稱。

在此之后,我創建神經網絡如下:

            Network.AddLayer(new InputLayer(Width, Height, 1));

        Network.AddLayer(new ConvLayer(5, 5, NumberFilters) { Stride = 1, Pad = 2 });
        Network.AddLayer(new ReluLayer());

        Network.AddLayer(new PoolLayer(2, 2) { Stride = 2 });

        Network.AddLayer(new ConvLayer(5, 5, NumberFilters * 2) { Stride = 1, Pad = 2 });
        Network.AddLayer(new ReluLayer());

        Network.AddLayer(new PoolLayer(3, 3) { Stride = 3 });

        Network.AddLayer(new FullyConnLayer(TrainingSet.Count));
        Network.AddLayer(new SoftmaxLayer(TrainingSet.Count));

如果我現在通過這種方法開始訓練過程:

        public void StartTraining()
    {
        _initializeLayers();
        _locked = true;
        int _increment = 0;

        Console.WriteLine("Training...");

        foreach (var data in TrainingSet)
        {     
            for (int i = 0; i < data.Value.Count; i++)
            {
                var map = MapBmpToDouble(data.Value[i]);
                var input = new Volume(map, new Shape(map.Length));
                var output = Network.Forward(input, true);
                for (int j = 0; j < Iterations; j++)
                {
                    var trainer = new SgdTrainer(Network) { LearningRate = Epsilon, L2Decay = Decay, Momentum = 0.9, BatchSize = TrainingSet.Count };
                    trainer.Train(input, new Volume(GetTrainingValues(_increment), new Shape(TrainingSet.Count)));
                }
            }
            _increment++;
        }



        Console.WriteLine("Done.");
    }

並測試結果例如字母a,我得到了非常不合邏輯的值。

網絡的最后一個項目/類別的概率總是最高的。 對於訓練部分,我只使用該方法

    public double[] GetTrainingValues(int index)
    {
        double[] values = new double[TrainingSet.Count];
        values[index] = 1.0;
        return values;
    }

定義哪個類位置必須是具有相應標簽Y的圖像X的最高位置。

此外,如果我為每個標簽使用相同的圖像,我得到相同的結果! 為什么?

你知道如何訓練最好的,或者你能推薦我一個更好的圖書館嗎?

非常感謝你 !

您應該在訓練循環之外僅對訓練器進行一次實例化。

var trainer = new SgdTrainer(Network) { 
                            LearningRate = Epsilon, 
                            L2Decay = Decay, 
                            Momentum = 0.9, 
                            BatchSize = TrainingSet.Count };

for (int j = 0; j < Iterations; j++)
{
    trainer.Train(input, 
                  new Volume(GetTrainingValues(_increment), 
                  new Shape(TrainingSet.Count)));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM