【发布时间】:2015-11-27 21:56:07
【问题描述】:
我已经创建了一个具有 1600 个输入的神经网络,一个具有不同数量神经元节点的隐藏层和 24 个输出神经元。 我的代码显示我可以减少每个时期的误差,但隐藏层的输出始终为 1。由于这个原因,调整后的权重总是为我的测试数据产生相同的结果。 我在 ANN 中尝试不同数量的神经元节点和学习率,并随机初始化我的初始权重。我使用 sigmoid 函数作为我的激活函数,因为我的输出在不同的输出中是 1 或 0。 我可以知道导致隐藏层输出始终为1的主要原因是什么,我应该如何解决? 我对这个神经网络的目的是识别 24 个字母的手形,我在项目的第一阶段尝试了强度数据。 我尝试了 30 个隐藏神经节点、100 个神经节点甚至 1000 个神经节点,但隐藏层的输出仍然是 1。由于这个原因,测试数据中的所有结果总是相似的。 我为我的网络添加了代码 谢谢
g = inline('logsig(x)');
[row, col] = size(input);
numofInputNeurons = col;
weight_input_hidden = rand(numofInputNeurons, numofFirstHiddenNeurons);
weight_hidden_output = rand(numofFirstHiddenNeurons, numofOutputNeurons);
epochs = 0;
errorMatrix = [];
while(true)
if(totalEpochs > 0 && epochs >= totalEpochs)
break;
end
totalError = 0;
epochs = epochs + 1;
for i = 1:row
targetRow = zeros(1, numofOutputNeurons);
targetRow(1, target(i)) = 1;
hidden_output = g(input(1, 1:end)*weight_input_hidden);
final_output = g(hidden_output*weight_hidden_output);
error = abs(targetRow - final_output);
error = sum(error);
totalError = totalError + error;
if(error ~= 0)
delta_final_output = learningRate * (targetRow - final_output) .* final_output .* (1 - final_output);
delta_hidden_output = learningRate * (hidden_output) .* (1-hidden_output) .* (delta_final_output * weight_hidden_output');
for m = 1:numofFirstHiddenNeurons
for n = 1:numofOutputNeurons
current_changes = delta_final_output(1, n) * hidden_output(1, m);
weight_hidden_output(m, n) = weight_hidden_output(m, n) + current_changes;
end
end
for m = 1:numofInputNeurons
for n = 1:numofFirstHiddenNeurons
current_changes = delta_hidden_output(1, n) * input(1, m);
weight_input_hidden(m, n) = weight_input_hidden(m, n) + current_changes;
end
end
end
end
totalError = totalError / (row);
errorMatrix(end + 1) = totalError;
if(errorThreshold > 0 && totalEpochs == 0 && totalError < errorThreshold)
break;
end
end
【问题讨论】:
-
请添加minimal reproducible example 详细说明您的代码。解释它为什么不起作用以及您希望它做什么。
-
您会得到“隐藏层的输出始终为 1”这样的结果的主要原因是代码中的错误。为了更好地分析可能导致错误的原因,您需要展示您的代码。
-
您好,感谢您的回复。我在帖子中添加了代码。
-
正如@NeilSlater 所说,通常是一个错误。您是否试图使网络输出值 > 1?
标签: matlab neural-network