ニューラル ネットワーク オブジェクトの作成
このトピックは、ニューラル ネットワーク設計のワークフローで説明されている設計ワークフローの一部です。
ニューラル ネットワークを作成する最も簡単な方法は、いずれかのネットワーク作成関数を使用することです。これがどのように行われるか調べるため、feedforwardnet コマンドを使用して、シンプルな 2 層フィードフォワード ネットワークを作成します。
net = feedforwardnet
net =
Neural Network
name: 'Feed-Forward Neural Network'
userdata: (your custom info)
dimensions:
numInputs: 1
numLayers: 2
numOutputs: 1
numInputDelays: 0
numLayerDelays: 0
numFeedbackDelays: 0
numWeightElements: 10
sampleTime: 1
connections:
biasConnect: [1; 1]
inputConnect: [1; 0]
layerConnect: [0 0; 1 0]
outputConnect: [0 1]
subobjects:
inputs: {1x1 cell array of 1 input}
layers: {2x1 cell array of 2 layers}
outputs: {1x2 cell array of 1 output}
biases: {2x1 cell array of 2 biases}
inputWeights: {2x1 cell array of 1 weight}
layerWeights: {2x2 cell array of 1 weight}
functions:
adaptFcn: 'adaptwb'
adaptParam: (none)
derivFcn: 'defaultderiv'
divideFcn: 'dividerand'
divideParam: .trainRatio, .valRatio, .testRatio
divideMode: 'sample'
initFcn: 'initlay'
performFcn: 'mse'
performParam: .regularization, .normalization
plotFcns: {'plotperform', plottrainstate, ploterrhist,
plotregression}
plotParams: {1x4 cell array of 4 params}
trainFcn: 'trainlm'
trainParam: .showWindow, .showCommandLine, .show, .epochs,
.time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
.mu_inc, .mu_max
weight and bias values:
IW: {2x1 cell} containing 1 input weight matrix
LW: {2x2 cell} containing 1 layer weight matrix
b: {2x1 cell} containing 2 bias vectors
methods:
adapt: Learn while in continuous use
configure: Configure inputs & outputs
gensim: Generate Simulink model
init: Initialize weights & biases
perform: Calculate performance
sim: Evaluate network outputs given inputs
train: Train network with examples
view: View diagram
unconfigure: Unconfigure inputs & outputs
evaluate: outputs = net(inputs)
この表示は、ニューラル ネットワークを定義するすべての情報を格納するために使用されるネットワーク オブジェクトの概要です。ここには詳細な項目が多数ありますが、ネットワーク オブジェクトがどのように配置されているかを理解するのに役立つ重要なセクションがいくつかあります。
dimensions セクションには、ネットワークの全体的な構造が格納されています。ここでは、ネットワークへの 1 つの入力 (ただし、1 つの入力が多数の要素を含むベクトルである場合もある)、1 つのネットワーク出力、および 2 つの層があることがわかります。
connections セクションには、ネットワークのコンポーネント間の結合が格納されています。たとえば、各層に結合されたバイアスがあり、入力が層 1 に結合され、層 2 から出力が得られます。また、層 1 が層 2 に結合されていることもわかります (net.layerConnect の行は結合先の層を表し、列はソース層を表します。この行列で 1 は結合を示し、0 は結合がないことを示します。この例では、行列の要素 2,1 に 1 が 1 つあります)。
ネットワーク オブジェクトの主要なサブオブジェクトは inputs、layers、outputs、biases、inputWeights、および layerWeights です。次のコマンドを使用して、最初の層の layers サブオブジェクトを表示します。
net.layers{1}
Neural Network Layer
name: 'Hidden'
dimensions: 10
distanceFcn: (none)
distanceParam: (none)
distances: []
initFcn: 'initnw'
netInputFcn: 'netsum'
netInputParam: (none)
positions: []
range: [10x2 double]
size: 10
topologyFcn: (none)
transferFcn: 'tansig'
transferParam: (none)
userdata: (your custom info)
層内のニューロンの数は、層の size プロパティで与えられます。この場合、この層には 10 個のニューロンがあります。これは、feedforwardnet コマンドの既定のサイズです。正味入力関数は netsum (加算) で、伝達関数は tansig です。たとえば、伝達関数を logsig に変更する場合、次のコマンドを実行します。
net.layers{1}.transferFcn = 'logsig';
層 1 と層 2 の間の重みの layerWeights サブオブジェクトを表示するには、次のコマンドを使用します。
net.layerWeights{2,1}
Neural Network Weight
delays: 0
initFcn: (none)
initConfig: .inputSize
learn: true
learnFcn: 'learngdm'
learnParam: .lr, .mc
size: [0 10]
weightFcn: 'dotprod'
weightParam: (none)
userdata: (your custom info)
重み関数は dotprod で、標準的な行列の乗算 (ドット積) に相当します。この層の重みのサイズは、0 行 10 列であることに注意してください。行数が 0 なのは、ネットワークがまだ特定のデータ セット用に構成されていないためです。出力ニューロンの数は、ターゲット ベクトルの行数に等しくなります。構成プロセス中に、入力とターゲットの例をネットワークに与えることで、出力ニューロン数が割り当てられます。
これにより、ネットワーク オブジェクトがどのように構成されているかをある程度理解できます。適用の多くにおいては、ネットワーク オブジェクトへの直接変更について気にする必要はありません、というのも、これはネットワーク生成関数によって処理されるためです。通常、ネットワーク オブジェクトに直接アクセスする必要があるのは、システムの既定の設定をオーバーライドする場合のみです。特定のネットワークおよび学習方法でこれを実行する方法については、他のトピックで説明します。
ネットワーク オブジェクトを詳しく調べる必要がある場合、上記のようなオブジェクトの一覧に、各サブオブジェクトのヘルプへのリンクが含まれていないか確認してください。リンクをクリックすると、オブジェクトの対象の部分を選択的に調べることができます。