神经网络代码

时间:2015-08-07 20:24:59

标签: c# arrays iteration neural-network

我知道已经提出了大量这些问题,但我的问题是代码特定的。 出于这个原因,我不知道如何让它与大量人群相关。

我正在练习迭代以准备创建我的第一个神经网络(试图理解我可以编写它的可能结构)。 该计划旨在通过神经网络可能以类似的方式进行分配权重。这不使用数学,它仅用于迭代目的。因此,如果有任何可能的建议/建议如何最好写,我将不胜感激。

主要问题:

我能看到的第一个出界。然而,那个朝向底部的人我无法看到或理解我出错的地方。

using System;

namespace Layers
{
    class Program
    {
        private static Random Rand = new Random();
        public static void Main(string[] args)
        {
            // NOTE: The first hidden layer (0) will be the input layer.
            // Initialize Layers.
            Console.WriteLine("How many layers?");
            int[][] HiddenLayers = new int[Convert.ToInt32(Console.ReadLine())][];

            for (int HLCount = 0; HLCount < HiddenLayers.Length; HLCount++)
            {
                // Make the first layer the input.
                if (HLCount == 0)
                {
                    Console.WriteLine("How many inputs?");
                } else
                {
                    Console.WriteLine("How many cells in Hidden Layer " + HLCount + "?");
                }
                HiddenLayers[HLCount] = new int[Convert.ToInt32(Console.ReadLine())];
            }

            // Set the values for the inputs.
            for (int InputCount = 0; InputCount < HiddenLayers[0].Length; InputCount++)
            {
                Console.WriteLine("Enter the value for input " + (InputCount + 1) + ":");
                HiddenLayers[0][InputCount] = Convert.ToInt32(Console.ReadLine());
            }

            // Initialize the weights.
            int[][] Weights = new int[HiddenLayers.Length][]; // Set of weights for each layer.

            for (int WeightCount = 0; WeightCount < Weights.Length; WeightCount++)
            {
                try
                {
                    // Create weights for the layers underneath. +1 attaches it to the layer below but would exceed the array.
                    Weights[WeightCount] = new int[HiddenLayers[WeightCount +1].Length]; 
                } catch (Exception ex)
                {

                }
            }

            for (int inputCount = 0; inputCount < Weights[0].Length; inputCount++)
            {
                Weights[0][inputCount] = Rand.Next(10); // Set first layers weights.
            }

            int intCount = 0;
            for (int LayerIndex = 1; LayerIndex < HiddenLayers.Length; LayerIndex++)
            {
                // Re-calculate weights. Go through layer and change weights.
                if (intCount < Weights[LayerIndex-1].Length)
                {
                    Weights[LayerIndex][intCount] = Rand.Next(1, 10);
                    intCount++;
                }

                Console.WriteLine("Layer: " + Convert.ToString(LayerIndex));

                // Go through the cells on the Layer.
                for (int CellIndex = 0; CellIndex < HiddenLayers[LayerIndex].Length; CellIndex++)
                {
                    // Out of bounds exception. Catching it affects the overall performance of the outcome.
                    HiddenLayers[LayerIndex][CellIndex] += (Convert.ToInt32(HiddenLayers[LayerIndex - 1][CellIndex]) + Convert.ToInt32(Weights[LayerIndex][CellIndex]));
                }
            }

            Console.ReadLine();
        }

        static void getWeights()
        {

        }
    }
}

以下是有关我要做的事情的更多信息。通过一些修改,例如用户能够确定图层大小,输入等。

http://i.stack.imgur.com/x9cN3.png

我使用的输入是: 3层 3输入 隐藏层1:3 隐藏层2:3 输入1:12 输入2:13

1 个答案:

答案 0 :(得分:1)

最重要的是 永远不会使用try / catch来“解决”IndexOutOfRangeException问题。就此而言,不要使用它来解决您不希望得到的任何异常。这样做肯定是错误的做法,总是如此。如果发生了您未预料到的异常,那么您有一个错误,您需要修复该错误,而不是尝试使用try / catch在地毯下扫描它。

至于问题的其余部分......


当我运行你的代码时,由于未初始化的数组成员,我得到NullReferenceException(因为你捕获了先前的异常而不是修复代码)。这是在代码到达您声明IndexOutOfRangeException的行之前发生的。

只要查看您询问的程序语句,我认为没有理由抛出异常。但是很难肯定地说,因为代码的编写方式不能重现你所描述的问题。

请注意,因为您强制我们输入数据来运行程序,所以我们无法知道您是否使用相同的数据运行。因此,您没有提供可靠地重现问题的a good, minimal, complete code example

当我更改代码时,第一个计算循环如下所示:

for (int WeightCount = 0; WeightCount < Weights.Length; WeightCount++)
{
    // Create weights for the layers underneath (caught out of bounds exception which doesn't seem to matter).
    Weights[WeightCount] = new int[HiddenLayers[WeightCount].Length];
}

......我能够重现的两个例外都消失了,代码运行完成。这是否真的是你想要的,我不知道。这似乎是一件合理的事情,但如果没有关于你想要实现的实际算法的更多细节,那么肯定不可能知道。


如果上述内容似乎没有以有用的方式解决您的问题,请改进问题,以便a)您包含一个好的代码示例,以及b)您明确要求的是什么。