【问题标题】:Getting the Neuron Weights for a Neural Network in Matlab在 Matlab 中获取神经网络的神经元权重
【发布时间】:2015-06-29 17:04:33
【问题描述】:

我已经训练了一个神经网络,如下所示:

net.b 返回两个值:

<25x1 double>
0.124136217326482

net.IW 返回两个值:

<25x16 double>
[]

net.LW 返回以下内容:

[]  []
<1x25 double>   []

我假设 new.LW 返回单个隐藏层中 25 个神经元的权重。

我不明白 net.IW 返回什么以及他们从哪里得到数字 16。

请帮忙!

编辑:添加了培训代码

netJan = newff(trainX', trainY', networkConfigJan, {'tansig','purelin'},'trainlm');
netJan.trainParam.goal = 1e-9;
netJan.trainFcn = 'traingda';
netJan = train(netJan, trainX', trainY');

尺寸

  • trainX 有 10 列,2153 行
  • trainY 有 1 列,2153 行

在这段代码之后,我只使用 10 个输入列执行预测,所以其他 6 个完全是内部的。

我的期望:

25x1 数组告诉我隐藏层中每个神经元的值。

10x25 数组告诉我从输入层到隐藏层的每条“线”的权重。

25x1 数组告诉我从隐藏层到输出层的每条“线”的权重。

编辑 2:

net = feedforwardnet( [25] );
net = train( net, trainX', trainY' );
size( net.IW{1}' ) % 10 x 25 , Yay!
net = newff(trainX', trainY', [25]);
net = train(net, trainX', trainY');
size( net.IW{1}' ) % 16 x 25, How is this possible?

【问题讨论】:

  • 你知道隐藏层有多少层吗?这些层中的每一层有多少个神经元?顺便说一句,我假设“IW”表示 inputWeights,“LW”表示 layerWeights,对吧?
  • @scmg 隐藏层有 25 个神经元。输入层有 10 个神经元,输出层有 1 个神经元。因此,我需要一个 10x25 数组作为输入权重,而 25x1 数组告诉我从隐藏层到输出层的每条“线”的权重。

标签: matlab neural-network


【解决方案1】:

你隐藏的问题

您的数据只是在列 1、2、3、8、9 和 10 中有 NaN 值。

>> sum( isnan( trainX ) )
ans =
     3     3     3     0     0     0     0     1     1     1

我过滤了结果并得到了有意义的结果。

>> goodX = trainX( sum( ~isnan( trainX ), 2 ), : );
>> goodY = trainY( sum( ~isnan( trainX ), 2 ), : );
>> netJan = newff(goodX', goodY', [25], {'tansig','purelin'},'trainlm');
>> size( netJan.IW{1}' )
ans =
    10    25
>> size( netJan.LW{2,1}' )
ans =
    25     1

针对有效数据查看者的解决方案

假设你像这样设置一个神经网络。

% Dummy NN
trainX = rand(2153,10);
trainY = rand(2153,1);
net = feedforwardnet( [25] );
net = train( net, trainX', trainY' );

您应该使用feedforwardnet 而不是newff

在 R2010b NNET 7.0 中已废弃。最后在 R2010a NNET 6.0.4 中使用。

推荐的函数是前馈网络。

请注意,我的调用会生成与以下 NN 初始化调用类似​​的 NN。

netJan = newff(trainX', trainY', [25], {'tansig','purelin'},'trainlm');
netJan.trainParam.goal = 1e-9;
netJan.trainFcn = 'traingda';
netJan = train(netJan, trainX', trainY');

25x1 数组告诉我隐藏层中每个神经元的值。

您只需传播输入/神经元值即可获得此信息

10x25 数组告诉我从输入层到隐藏层的每条“线”的权重。

net.IW{1}

25x1 数组告诉我从隐藏层到输出层的每条“线”的权重。

net.LW{2,1}'

要测试尺寸:

>> size( trainX )
ans =
        2153          10
>> size( trainY )
ans =
        2153           1
>> size( net.IW{1}' )
ans =
    10    25
>> size( net.LW{2,1}' )
ans =
    25     1

培训窗口

网络视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2011-12-09
    • 1970-01-01
    • 2015-12-03
    • 2011-08-23
    • 1970-01-01
    • 2019-05-05
    相关资源
    最近更新 更多