我知道已经提出了大量这些问题,但我的问题是代码特定的。 出于这个原因,我不知道如何让它与大量人群相关。
我正在练习迭代以准备创建我的第一个神经网络(试图理解我可以编写它的可能结构)。 该计划旨在通过神经网络可能以类似的方式进行分配权重。这不使用数学,它仅用于迭代目的。因此,如果有任何可能的建议/建议如何最好写,我将不胜感激。
主要问题:
我能看到的第一个出界。然而,那个朝向底部的人我无法看到或理解我出错的地方。
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
答案 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)您明确要求的是什么。