【问题标题】:Multilayered Perceptron Code Explanation多层感知器代码说明
【发布时间】:2017-04-30 11:00:42
【问题描述】:

解决方案:

生成训练集

traincol1 = linspace(0.1, 15, 40)';
eps = (0.2*rand(40,1)) - 0.1;
traincol2 = sin(traincol1)./traincol1 - eps;
train = [traincol1 traincol2];
save('snn_a.txt','train');
save('snn_a.mat','train');

生成测试集

testcol1 = linspace(0.1, 15, 400)';
eps = (0.2*rand(400,1)) - 0.1;
testcol2 = sin(testcol1)./testcol1 - eps;
test = [testcol1 testcol2];
save('snn_b.txt','test');
save('snn_b.mat','test');

训练神经网络

function net = train_net(trainingset, hidden_neurons)    
% Parameters:     
% train_set:      
% labels - y     
% hidden_neurons_count:      
% Return value:     
% net – object representing a neural network    
% initialization     
% hidden neuron activation function- tanh,     
% output neuron activation - linear     

net=newff(trainingset(:, 1)', trainingset(:, 2)',hidden_neurons,
{'tansig', 'purelin'},'trainlm'); 
rand('state',sum(100*clock));      %random numbers generator initialization     
net=init(net);                     %weights initialization     
net.trainParam.goal = 0.01;        %stop- mse criterion     
net.trainParam.epochs = 400;       %number of epochs iterations     
net=train(net,trainingset(:, 1)', trainingset(:, 2)'); %network training 

主程序

% input data area
load('snn_a.mat');
load('snn_b.mat');
hidden_neurons = 4;
% net training
net = train_net(train, hidden_neurons);
% assigning results
resulttrain = net(train(:, 1)')';
resulttest = net(test(:, 1)')';
% drawing
hold on
sn = @(x) sin(x) / x;
fplot(sn, [0, 15],'g');
plot(train(:, 1), resulttrain, 'r');
legend('Original function', ' Result')
hold off
% print mse results
mse(net, train(:, 2)', resulttrain')
mse(net, test(:, 2)', resulttest')

你能解释一下 train_net() 和主程序吗?

有什么办法可以改进吗?

【问题讨论】:

    标签: matlab neural-network octave perceptron


    【解决方案1】:

    不多解释。

    train_net 基本上使用函数newff 来创建具有给定参数(隐藏神经元数、时期数、错误目标...)的前馈反向传播网络,它使用您的训练数据集来训练神经元(调整神经元的权重)。

    然后您的主程序使用经过训练的神经网络来获取训练集和测试集的预测。

    它最终用训练集和测试集的结果绘制了完美的预期结果,以可视化网络的表现。

    最后是计算 mse 以对性能进行一些数值分析。

    【讨论】:

    • 有什么隐藏的bug吗?你觉得有什么需要改进的地方吗?
    • 我没有看到任何错误。改善什么?在net.trainParam.goal 中指定允许的最大错误。如果您想要更好的结果,请减少此数量并增加时期。如果它没有达到预期的目标,请尝试增加神经元的数量。但是您正在尝试学习 sinc 这是一个困难的功能,并且神经网络并不是“魔术”。可能是您不能低于某个错误级别。
    • 我在代码中没有看到任何sinc。你能澄清一下吗?
    • sin(x) / x 被称为sinc 函数。它在工程中非常有用。 en.wikipedia.org/wiki/Sinc_function
    • 我认为如果你的学校作业告诉你使用sinc 函数,你没有太多选择。我只是指出这是一个困难的功能。但是,如果您不知道,您是如何设法从 0.1 而不是 0 开始 traincol1 以避免 0/0 不确定形式的?这真的是你的代码吗?还是你只是在盲目地执行代码?
    猜你喜欢
    • 2011-07-01
    • 2012-10-31
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2011-11-15
    • 2017-09-09
    • 2013-12-14
    相关资源
    最近更新 更多