问题描述
我已经编写了一个简单的神经网络,目前正在测试XOR问题(我知道我的代码可能效率不高,但是我只是想了解NN的工作方式)。但是,用我的Trainstochastic方法进行训练后,网络为所有可能的输入输出了非常相似的结果。 例如
Input: [0f,0f],Output: 0.934f
Input: [0f,1f],Output: 0.938f
Input: [1f,Output: 0.931f
我正在训练的批次数量为5(随机选择5组可能的XOR输入),共200批次。我的激活功能是乙状结肠功能,我的学习率是0.05。我已经尝试过对所有这些进行调整,但神经网络似乎仍在继续这样做,这使我相信自己的训练方法有问题。方法是:
public void Trainstochastic(TrainingData inputBatches)
{
Matrix[] deltaBiasMatrices = new Matrix[biasMatrices.Length];
Matrix[] deltaWeightMatrices = new Matrix[weightMatrices.Length];
foreach ((Matrix input,Matrix desiredOutput)[] inputBatch in inputBatches.data)
{
for (int i = 0; i < errorMatrices.Length; i++)
{
deltaBiasMatrices[i] = new Matrix(biasMatrices[i].Rows,biasMatrices[i].Cols);
deltaBiasMatrices[i].InitializeWithValues(0f);
deltaWeightMatrices[i] = new Matrix(weightMatrices[i].Rows,weightMatrices[i].Cols);
deltaWeightMatrices[i].InitializeWithValues(0f);
}
foreach ((Matrix input,Matrix desiredOutput) trainingExample in inputBatch)
{
Matrix output = FeedForward(trainingExample.input);
// Output Error
errorMatrices[^1] = Matrix.HadamardProduct(Matrix.Subtract(trainingExample.desiredOutput,output),Matrix.Evaluate(preActivationMatrices[^1],dActivator));
// Backprop Error
for (int l = errorMatrices.Length - 2; l >= 0; l--)
{
errorMatrices[l] = Matrix.HadamardProduct(Matrix.Multiply(Matrix.Transpose(weightMatrices[l + 1]),errorMatrices[l + 1]),Matrix.Evaluate(preActivationMatrices[l],dActivator));
}
// Adjust weights and biases
deltaBiasMatrices[0].Add(errorMatrices[0]);
for (int i = 0; i < deltaWeightMatrices[0].Rows; i++)
{
for (int j = 0; j < deltaWeightMatrices[0].Cols; j++)
{
deltaWeightMatrices[0][i,j] += errorMatrices[0][i] * activator(trainingExample.input[j]);
}
}
for (int l = 1; l < errorMatrices.Length; L++)
{
deltaBiasMatrices[l].Add(errorMatrices[l]);
for (int i = 0; i < deltaWeightMatrices[l].Rows; i++)
{
for (int j = 0; j < deltaWeightMatrices[l].Cols; j++)
{
deltaWeightMatrices[l][i,j] += errorMatrices[l][i] * activationMatrices[l - 1][j];
}
}
}
}
for (int i = 0; i < deltaBiasMatrices.Length; i++)
{
deltaBiasMatrices[i].Scale(-LearningRate / inputBatch.Length);
deltaWeightMatrices[i].Scale(-LearningRate / inputBatch.Length);
biasMatrices[i].Add(deltaBiasMatrices[i]);
weightMatrices[i].Add(deltaWeightMatrices[i]);
}
}
}
}
训练数据被组织成一个由(Matrix input,Matrix desiredOutput)
元组组成的锯齿状数组,其中每个数组TrainingData.data[i]
是一批带标签的输入。我已经测试了Matrix
类,并且相当有信心该错误不在其中。
任何关于为什么它不起作用的想法将不胜感激,
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)