} // конструктор для инициализации объекта DenseStructure по полям объекта ConvolutionalNetwork

        public void MutateLayersNumb(DenseRandomParams drp, int mutateRate)
        {
            if (random.Next(100) < mutateRate)
            {
                denseLayersNumb = random.Next(1, drp.denseLayersNumbRange);
            }
            if (denseLayersNumb >= denseLayers.Count)
            {
                denseLayers.Capacity = denseLayersNumb;
                int powIndex = Support.GetPow2(denseLayers[denseLayers.Count - 1].neurons);
                while (denseLayers.Count != denseLayers.Capacity)
                {
                    powIndex += random.Next(0, 2);
                    int neurons = (int)Math.Pow(2, powIndex);
                    denseLayers.Insert(0, new DenseLayer(drp, random, neurons));
                    if (sameActivations)
                    {
                        denseLayers[0].activationIndex = denseLayers[1].activationIndex;
                    }
                }
            }
            else
            {
                denseLayers.RemoveRange(0, denseLayers.Capacity - denseLayersNumb); // перепроверить!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                denseLayers.Capacity = denseLayersNumb;
            }
        }
示例#2
0
        public void MutateLayersNumb(ConvRandomParams crp, int mutateRate)
        {
            if (random.Next(100) < mutateRate)
            {
                convLayersNumb = random.Next(1, crp.convLayersNumbRange);
                if (convLayersNumb >= convLayers.Count)
                {
                    convLayers.Capacity = convLayersNumb;
                    int powIndex = Support.GetPow2(convLayers[convLayers.Count - 1].filters);
                    while (convLayers.Count != convLayers.Capacity) // проверить условие!!
                    {
                        powIndex += random.Next(0, 2);
                        //int filters = random.Next(crp.firstConvPowFilters, crp.firstConvPowFilters + crp.firstConvPowFilters * convLayers.Count); //переделать!?
                        int filters = (int)Math.Pow(2, powIndex);
                        convLayers.Add(new ConvLayer(crp, random, filters));

                        if (sameSlidingWindowsSize)
                        {
                            convLayers[convLayers.Count - 1].slidingWindow = convLayers[0].slidingWindow;
                        }
                        if (sameActivations)
                        {
                            convLayers[convLayers.Count - 1].activationIndex = convLayers[0].activationIndex;
                        }
                        if (allSquareSlidingWindows)
                        {
                            if (convLayers[convLayers.Count - 1].slidingWindow[0] > 1)
                            {
                                convLayers[convLayers.Count - 1].slidingWindow[1] = convLayers[convLayers.Count - 1].slidingWindow[0];
                            }
                            else
                            {
                                convLayers[convLayers.Count - 1].slidingWindow[0] = convLayers[convLayers.Count - 1].slidingWindow[1];
                            }
                        }
                    }
                }
                else
                {
                    convLayers.RemoveRange(convLayersNumb, convLayers.Capacity - convLayersNumb);
                    convLayers.Capacity = convLayersNumb;
                }
            }
        }
        public DenseStructure(NetworkRandomParams nrp, DenseRandomParams drp, Random random)
        {
            this.nrp    = nrp;
            this.drp    = drp;
            this.random = random;

            sameActivations = random.Next(100) < 10 ? true : false;
            int absorber = 0;

            if (sameActivations)
            {
                absorber = random.Next(drp.denseActIndexesRange);
            }

            denseLayersNumb = random.Next(1, drp.denseLayersNumbRange);
            denseLayers     = new List <DenseLayer>(denseLayersNumb);

            int powIndex = 0;

            for (int i = 0; i < denseLayers.Capacity; i++)
            {
                int neurons = 0;

                if (i == 0)
                {
                    powIndex = random.Next(Support.GetPow2(nrp.networkOutputNumb), drp.firstDenseNeuronsRange);
                }
                else
                {
                    powIndex += random.Next(0, 2);
                }
                neurons = (int)Math.Pow(2, powIndex);
                denseLayers.Insert(0, new DenseLayer(drp, random, neurons));

                if (sameActivations)
                {
                    denseLayers[0].activationIndex = absorber;
                }
            }
        }
 public void MutateNeurons(DenseRandomParams drp, int mutateRate) // проверить
 {
     if (random.Next(100) < mutateRate)
     {
         int mutateIndex = random.Next(0, denseLayers.Count);
         int powIndex    = 0;
         while (mutateIndex != -1)
         {
             if (mutateIndex != (denseLayers.Count - 1))
             {
                 powIndex = Support.GetPow2(denseLayers[mutateIndex + 1].neurons);
             }
             else
             {
                 powIndex = drp.firstDenseNeuronsRange;
             }
             powIndex += random.Next(0, 2);
             denseLayers[mutateIndex].neurons = (int)Math.Pow(2, powIndex);
             mutateIndex--;
         }
     }
 }
示例#5
0
        } // создание объекта по ConvolutionalNetwork

        public void MutateFilters(ConvRandomParams crp, int mutateRate)
        {
            if (random.Next(100) < mutateRate)
            {
                int mutateIndex = random.Next(0, convLayers.Count);
                int powIndex    = 0;

                while (mutateIndex != convLayers.Count)
                {
                    if (mutateIndex != 0)
                    {
                        powIndex = Support.GetPow2(convLayers[mutateIndex - 1].filters);
                    }
                    else
                    {
                        powIndex = crp.firstConvPowFilters;
                    }
                    powIndex += random.Next(0, 2);
                    convLayers[mutateIndex].filters = (int)Math.Pow(2, powIndex);
                    mutateIndex++;
                }
            }
        }