用于设计径向基网络的 MATLAB newrb 的行为与文档不符。为什么?
MATLAB's newrb for designing radial basis networks does not behave in accordance to the documentation. Why?
我正在尝试使用径向基网络来近似各种信号。特别是,我使用了 MATLAB 的 newrb
.
我的问题是,如果我遵循 newrb
的 description,此函数似乎无法正常运行。据我了解,尽管有文档,但转置所有参数是有意义的。
下面的示例有望说明我的问题。
我用 100 个样本创建了一个正弦波周期。我想通过具有最多两个隐藏神经元的径向基网络来近似这个正弦波。我有一个输入向量 (t
) 和一个目标向量 (s
)。因此,根据文档,我应该用两个列向量调用 newrb
。然而,这个近似值太好了。事实上,均方误差为 0,仅使用两个神经元是不可能的。此外,如果我使用列向量,view(net)
的可视化不仅显示一个输入,而且显示 100 个输入。
在示例中,对应于 "correct"(根据文档)函数调用的向量由 _doc
表示,对应于 "incorrect" 调用的向量由 _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);
因为我自己也遇到了同样的问题,所以我会尽力为任何偶然发现相同问题的人提供答案post。
我认为问题不在于转置向量。您可以按原样使用您的数据,无需转置任何内容。
您使用向量 t
训练 RBF 网络,然后使用与训练网络相同的向量进行模拟,这就是您拥有如此完美近似值的原因。您使用您教给它的相同值来测试您的网络。
如果您真的想测试您的网络,您必须选择不同的向量进行测试。在你的例子中我使用了这个:
% simulate network
t_test = 2 * pi * ((1-Ts)/2:Ts:3-Ts);
approx_not_doc = sim( net_not_doc, t_test );
现在,当您绘制结果时,您可以观察到与训练向量中具有相同值的点几乎完美无缺。由于神经元数量较少(如您所料),其余部分的目标未知。
Plot of t_test with approx_not_doc.
现在,如果您添加更多神经元(在本例中我使用了 100 个),您会发现现在新网络可以使用相同的测试向量 t_test
预测函数的未知部分。 Plot t_test with approx_not_doc for 100 neurons. 当然,如果您尝试使用不同数量的神经元并展开,您的结果会有所不同。
希望这对遇到同样问题的人有所帮助。
我正在尝试使用径向基网络来近似各种信号。特别是,我使用了 MATLAB 的 newrb
.
我的问题是,如果我遵循 newrb
的 description,此函数似乎无法正常运行。据我了解,尽管有文档,但转置所有参数是有意义的。
下面的示例有望说明我的问题。
我用 100 个样本创建了一个正弦波周期。我想通过具有最多两个隐藏神经元的径向基网络来近似这个正弦波。我有一个输入向量 (t
) 和一个目标向量 (s
)。因此,根据文档,我应该用两个列向量调用 newrb
。然而,这个近似值太好了。事实上,均方误差为 0,仅使用两个神经元是不可能的。此外,如果我使用列向量,view(net)
的可视化不仅显示一个输入,而且显示 100 个输入。
在示例中,对应于 "correct"(根据文档)函数调用的向量由 _doc
表示,对应于 "incorrect" 调用的向量由 _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);
因为我自己也遇到了同样的问题,所以我会尽力为任何偶然发现相同问题的人提供答案post。
我认为问题不在于转置向量。您可以按原样使用您的数据,无需转置任何内容。
您使用向量 t
训练 RBF 网络,然后使用与训练网络相同的向量进行模拟,这就是您拥有如此完美近似值的原因。您使用您教给它的相同值来测试您的网络。
如果您真的想测试您的网络,您必须选择不同的向量进行测试。在你的例子中我使用了这个:
% simulate network
t_test = 2 * pi * ((1-Ts)/2:Ts:3-Ts);
approx_not_doc = sim( net_not_doc, t_test );
现在,当您绘制结果时,您可以观察到与训练向量中具有相同值的点几乎完美无缺。由于神经元数量较少(如您所料),其余部分的目标未知。 Plot of t_test with approx_not_doc.
现在,如果您添加更多神经元(在本例中我使用了 100 个),您会发现现在新网络可以使用相同的测试向量 t_test
预测函数的未知部分。 Plot t_test with approx_not_doc for 100 neurons. 当然,如果您尝试使用不同数量的神经元并展开,您的结果会有所不同。
希望这对遇到同样问题的人有所帮助。