Main Content

ニューラル ネットワーク オブジェクトの作成

このトピックは、ニューラル ネットワーク設計のワークフローで説明されている設計ワークフローの一部です。

ニューラル ネットワークを作成する最も簡単な方法は、いずれかのネットワーク作成関数を使用することです。これがどのように行われるか調べるため、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 つあります)。

ネットワーク オブジェクトの主要なサブオブジェクトは inputslayersoutputsbiasesinputWeights、および 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 なのは、ネットワークがまだ特定のデータセット用に構成されていないためです。出力ニューロンの数は、ターゲット ベクトルの行数に等しくなります。構成プロセス中に、入力とターゲットの例をネットワークに与えることで、出力ニューロン数が割り当てられます。

これにより、ネットワーク オブジェクトがどのように構成されているかをある程度理解できます。適用の多くにおいては、ネットワーク オブジェクトへの直接変更について気にする必要はありません、というのも、これはネットワーク生成関数によって処理されるためです。通常、ネットワーク オブジェクトに直接アクセスする必要があるのは、システムの既定の設定をオーバーライドする場合のみです。特定のネットワークおよび学習方法でこれを実行する方法については、他のトピックで説明します。

ネットワーク オブジェクトを詳しく調べる必要がある場合、上記のようなオブジェクトの一覧に、各サブオブジェクトのヘルプへのリンクが含まれていないか確認してください。リンクをクリックすると、オブジェクトの対象の部分を選択的に調べることができます。