我在玩matlab神经网络工具箱时遇到了一些我没想到的事情。我的问题尤其是没有隐藏层、只有 1 个输入和 tansig 传递函数的分类网络。所以我希望这个分类器在某个点划分一维数据集,该点由学习的输入权重和偏差定义。
首先,我认为计算给定输入 x 的输出 y 的公式是:y = f(x*w + b) 其中 w 是输入权重,b 是偏差。计算网络输出的正确公式是什么?
我还预计将整个数据集翻译某个值(+77)会对偏差和/或权重产生很大影响。但情况似乎并非如此。为什么数据集的翻译对偏差和权重没有太大影响?
这是我的代码:
% Generate data
p1 = randn(1, 1000);
t1(1:1000) = 1;
p2 = 3 + randn(1, 1000);
t2(1:1000) = -1;
% view data
figure, hist([p1', p2'], 100)
P = [p1 p2];
T = [t1 t2];
% train network without hidden layer
net1 = newff(P, T, [], {'tansig'}, 'trainlm');
[net1,tr] = train(net1, P, T);
% display weight and bias
w = net1.IW{1,1};
b = net1.b{1,1};
disp(w) % -6.8971
disp(b) % -0.2280
% make label decision
class_correct = 0;
outputs = net1(P);
for i = 1:length(outputs)
% choose between -1 and 1
if outputs(i) > 0
outputs(i) = 1;
else
outputs(i) = -1;
end
% compare
if T(i) == outputs(i)
class_correct = class_correct + 1;
end
end
% Calculate the correct classification rate (CCR)
CCR = (class_correct * 100) / length(outputs);
fprintf('CCR: %f \n', CCR);
% plot the errors
errors = gsubtract(T, outputs);
figure, plot(errors)
% I expect these to be equal and near 1
net1(0) % 0.9521
tansig(0*w + b) % -0.4680
% I expect these to be equal and near -1
net1(4) % -0.9991
tansig(4*w + b) % -1
% translate the dataset by +77
P2 = P + 77;
% train network without hidden layer
net2 = newff(P2, T, [], {'tansig'}, 'trainlm');
[net2,tr] = train(net2, P2, T);
% display weight and bias
w2 = net2.IW{1,1};
b2 = net2.b{1,1};
disp(w2) % -5.1132
disp(b2) % -0.1556
我生成了一个人工数据集,该数据集由具有不同均值的正态分布的 2 个总体组成。我在直方图中绘制了这些人口,并用它训练了网络。我计算了正确分类率,它是整个数据集正确分类实例的百分比。这大约是 92%,所以我知道分类器有效。
但是,我希望 net1(x) 和 tansig(x*w + b) 给出相同的输出,但事实并非如此。计算训练有素的网络输出的正确公式是什么?
我预计 net1 和 net2 具有不同的权重和/或偏差,因为 net2 是在 net1 训练的数据集的翻译版本 (+77) 上训练的。为什么数据集的翻译对偏差和权重没有太大影响?