0

バックプロパゲーションアルゴリズムを使用した多層ニューラルネットワークを使用して、3つのクラスの分類問題を解決したいと思います。matlab2012aを使用しています。newff関数で問題が発生しています。1つの隠れ層を持つネットワークを構築したいのですが、出力層にはクラスごとに1つずつ、合計3つのニューロンがあります。例を挙げて教えてください。

これが私のコードです

clc

%parameters
nodesInHL=7;
nodesInOutput=3;
iteration=1000;
HLtranfer='tansig';
outputTranser='tansig';
trainFunc='traingd';
learnRate=0.05;
performanceFunc='mse';


%rand('seed',0);
%randn('seed',0);
rng('shuffle');

net=newff(trainX,trainY,[nodesInHL],{HLtranfer,outputTranser},trainFunc,'learngd',performanceFunc);
net=init(net);

%setting parameters
net.trainParam.epochs=iteration;
net.trainParam.lr=learnRate;

%training
[net,tr]=train(net,trainX,trainY);

ありがとう。

4

1 に答える 1

1

このnewff機能は廃止されました。推奨される関数はfeedforwardnet、またはあなたの場合 (分類) は を使用しますpatternnet

の GUI を使用することもできます。この GUI はnprtool、ネットワークを構築するための手順をガイドするウィザードのようなツールを提供します。実験の最後にコードを生成することもできます。

次に例を示します。

%# load sample dataset
%#   simpleclassInputs: 2x1000 matrix (1000 points of 2-dimensions)
%#   simpleclassTargets: 4x1000 matrix (4 possible classes)
load simpleclass_dataset

%# create ANN of one hidden layer with 7 nodes
net = patternnet(7);

%# set params
net.trainFcn = 'traingd';            %# training function
net.trainParam.epochs = 1000;        %# max number of iterations
net.trainParam.lr = 0.05;            %# learning rate
net.performFcn = 'mse';              %# mean-squared error function
net.divideFcn = 'dividerand';        %# how to divide data
net.divideParam.trainRatio = 70/100; %# training set
net.divideParam.valRatio = 15/100;   %# validation set
net.divideParam.testRatio = 15/100;  %# testing set

%# training
net = init(net);
[net,tr] = train(net, simpleclassInputs, simpleclassTargets);

%# testing
y_hat = net(simpleclassInputs);
perf = perform(net, simpleclassTargets, y_hat);
err = gsubtract(simpleclassTargets, y_hat);

view(net)

NN は出力層のノード数を自動的に設定することに注意してください (ターゲット クラスの行列サイズに基づいて)。

スクリーンショット

于 2012-07-30T18:40:14.337 に答える