2

我正在尝试使用径向基网络来近似各种信号。特别是,我使用了 MATLAB 的newrb.

我的问题是,如果按照. newrb据我了解,尽管有文档,但转置所有参数是有意义的。

下面的例子希望能说明我的问题。

我用 100 个样本创建一个周期的正弦波。我想通过具有最多两个隐藏神经元的径向基网络来近似这个正弦波。我有一个输入向量 ( t) 和一个目标向量 ( s)。因此,根据文档,我应该newrb使用两个列向量进行调用。但是,近似值太好了。事实上,均方误差为 0,仅使用两个神经元是不可能的。此外,view(net)如果我使用列向量,可视化不仅显示一个输入,而且显示 100 个输入。

在示例中,对应于“正确”(根据文档)函数调用的向量用 表示_doc,对应于“不正确”调用的向量用 表示_not_doc

任何人都可以解释这种行为吗?

% one period sine signal with
% carrier frequency = 1, sampling frequency = 100
Ts  = 1 / 100;
t   = 2 * pi * (0:Ts:1-Ts); % size(t) = 1 100
s   = sin(t);               % size(s) = 1 100

% design radial basis network
MSE_goal    = 0.0;  % mean squared error goal, default value
spread      = 1.0;  % spread of readial basis functions, default value
max_neurons = 2;    % maximum number of neurons, custom value
DF          = 25;   % number of neurons to add between displays, default value

net_not_doc     = newrb( t , s , MSE_goal, spread, max_neurons, DF );   % row vectors
net_doc         = newrb( t', s', MSE_goal, spread, max_neurons, DF );   % column vectors

% simulate network
approx_not_doc   = sim( net_not_doc, t );
approx_doc       = sim( net_doc, t' );

% plot
figure;
plot( t, s, 'DisplayName', 'Sine' );
hold on;
plot( t, approx_not_doc, 'r:', 'DisplayName', 'Approximation_{not doc}');
hold on;
plot( t, approx_doc', 'g:', 'DisplayName', 'Approximation_{doc}');
grid on;
legend show;

% view neural networks
view(net_not_doc);
view(net_doc);
4

1 回答 1

0

因为我自己也有同样的问题,所以我会尝试为任何偶然发现同一个帖子的人提供答案。

我认为问题不在于转置向量。您可以按原样使用您的数据,而无需转置任何内容。你用向量训练你的 RBF 网络,t然后用你训练你的网络的相同向量进行模拟,这就是你有如此完美近似的原因。你用你教给它的相同值来测试你的网络。

如果你真的想测试你的网络,你必须选择一个不同的向量进行测试。在您的示例中,我使用了这个:

    % simulate network
    t_test = 2 * pi * ((1-Ts)/2:Ts:3-Ts);
    approx_not_doc   = sim( net_not_doc, t_test );

现在,当您绘制结果时,您可以观察到与您的训练向量中具有相同值的点几乎完美无缺。由于神经元数量较少(如您所料),其余的目标未知。 带有 approx_not_doc 的 t_test 绘图。

现在,如果您添加更多神经元(在此示例中我使用了 100 个),您可以看到现在新网络可以使用相同的测试向量预测t_test函数的未知部分。用 approx_not_doc 绘制 100 个神经元的 t_test。当然,如果你尝试使用不同数量的神经元并传播你的结果会有所不同。

希望这会帮助任何有同样问题的人。

于 2016-10-27T12:29:54.060 回答