根据你的描述和参考资料,问题可能出在以下几个方面:
数据归一化问题:神经网络在处理之前对输入数据进行归一化是很重要的,可以使用mapminmax
函数将数据归一化到0和1之间。如果没有进行归一化,大部分输入都会趋于1,导致输出都相同。
激活函数选择问题:你提到使用的是sigmoid激活函数,它的输出范围是0到1之间。如果希望输出只包含0和1,可以考虑使用阈值函数,将大于某个阈值的值视为1,小于阈值的值视为0。
现在我们来解决这个问题。首先,我们需要先对数据进行归一化处理。假设你的输入数据为X
,输出数据为y
,可以使用以下代码进行归一化处理:
% 将输入数据归一化到 [0,1] 范围内
[X_normalized, ~] = mapminmax(X);
% 将输出数据转换为行向量并归一化到 [0,1] 范围内
y_row = y';
[y_normalized, ~] = mapminmax(y_row);
这样你就得到了归一化后的输入数据 X_normalized
和输出数据 y_normalized
。
接下来,我们需要修改神经网络的输出处理方式,使其只包含0和1。我们可以选择使用阈值函数来实现这个功能。假设你使用的是feedforwardnet
函数创建的神经网络对象,你可以在训练之后进行如下操作:
% 在模型预测之前先对输出结果进行阈值处理
output = net(X_normalized); % 假设 net 是训练好的网络模型对象
output_thresholded = round(output); % 将输出结果四舍五入为 0 或 1
% 输出结果还原为初始范围
output_restored = mapminmax('reverse', output_thresholded, y_row);
这样,你就得到了还原后的输出结果 output_restored
,其中只包含0和1。
希望这些代码能帮到你解决问题!如果有更多的信息或者代码可以提供,我会尽力帮助你解决问题。
有报错的话发给我