MATLAB中的神经网络

我在MATLAB中训练了一个异或神经网络,并得到了以下权重:

iw: [-2.162 2.1706; 2.1565 -2.1688]lw: [-3.9174 -3.9183]b{1} [2.001; 2.0033]b{2} [3.8093]

出于好奇,我尝试编写MATLAB代码来计算这个网络的输出(隐藏层有两个神经元,输出层有一个神经元,使用TANSIG激活函数)。

我编写的代码如下:

l1w = [-2.162 2.1706; 2.1565 -2.1688];l2w = [-3.9174 -3.9183];b1w = [2.001 2.0033];b2w = [3.8093];input = [1, 0];out1 = tansig (input(1)*l1w(1,1) + input(2)*l1w(1,2) + b1w(1));out2 = tansig (input(1)*l1w(2,1) + input(2)*l1w(2,2) + b1w(2));out3 = tansig (out1*l2w(1) + out2*l2w(2) + b2w(1))

问题是当输入为[1,1]时,输出为-0.9989,当输入为[0,1]时,输出为0.4902。而在MATLAB中生成的网络模拟输出应为0.000558750.99943

我哪里做错了?


回答:

我编写了一个简单的异或网络示例。我使用了newpr,它默认对隐藏层和输出层使用tansig传输函数。

input = [0 0 1 1; 0 1 0 1];               %# 每列是一个输入向量ouputActual = [0 1 1 0];net = newpr(input, ouputActual, 2);       %# 一个隐藏层,包含2个神经元net.divideFcn = '';                       %# 使用全部输入进行训练net = init(net);                          %# 初始化网络net = train(net, input, ouputActual);     %# 训练outputPredicted = sim(net, input);        %# 预测

然后我们通过自己计算输出结果来检查结果。重要的是要记住,默认情况下,输入/输出会被缩放到[-1,1]范围内:

scaledIn = (2*input - 1);           %# 从[0,1]转换到[-1,1]for i=1:size(input,2)    in = scaledIn(:,i);             %# 第i个输入向量    hidden(1) = tansig( net.IW{1}(1,1)*in(1) + net.IW{1}(1,2)*in(2) + net.b{1}(1) );    hidden(2) = tansig( net.IW{1}(2,1)*in(1) + net.IW{1}(2,2)*in(2) + net.b{1}(2) );    out(i) = tansig( hidden(1)*net.LW{2,1}(1) + hidden(2)*net.LW{2,1}(2) + net.b{2} );endscaledOut = (out+1)/2;              %# 从[-1,1]转换到[0,1]

或者更有效地用矩阵乘法在一行中表达:

scaledIn = (2*input - 1);           %# 从[0,1]转换到[-1,1]out = tansig( net.LW{2,1} * tansig( net.IW{1}*scaledIn + repmat(net.b{1},1,size(input,2)) ) + repmat(net.b{2},1,size(input,2)) );scaledOut = (1 + out)/2;            %# 从[-1,1]转换到[0,1]

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注