ニューラル ネットワーク オブジェクトの作成
このトピックは、ニューラル ネットワーク設計のワークフローで説明されている設計ワークフローの一部です。
ニューラル ネットワークを作成する最も簡単な方法は、いずれかのネットワーク作成関数を使用することです。これがどのように行われるか調べるため、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 なのは、ネットワークがまだ特定のデータセット用に構成されていないためです。出力ニューロンの数は、ターゲット ベクトルの行数に等しくなります。構成プロセス中に、入力とターゲットの例をネットワークに与えることで、出力ニューロン数が割り当てられます。
これにより、ネットワーク オブジェクトがどのように構成されているかをある程度理解できます。適用の多くにおいては、ネットワーク オブジェクトへの直接変更について気にする必要はありません、というのも、これはネットワーク生成関数によって処理されるためです。通常、ネットワーク オブジェクトに直接アクセスする必要があるのは、システムの既定の設定をオーバーライドする場合のみです。特定のネットワークおよび学習方法でこれを実行する方法については、他のトピックで説明します。
ネットワーク オブジェクトを詳しく調べる必要がある場合、上記のようなオブジェクトの一覧に、各サブオブジェクトのヘルプへのリンクが含まれていないか確認してください。リンクをクリックすると、オブジェクトの対象の部分を選択的に調べることができます。