Main Content

learnlv1

LVQ1 重み学習関数

構文

[dW,LS] = learnlv1(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
info = learnlv1('code')

説明

learnlv1 は、LVQ1 重み学習関数です。

[dW,LS] = learnlv1(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) は、いくつかの入力を取ります。

W

SR 列の重み行列 (または、S1 列のバイアス ベクトル)

P

RQ 列の入力ベクトル (または ones(1,Q))

Z

SQ 列の重み付き入力ベクトル

N

SQ 列の正味入力ベクトル

A

SQ 列の出力ベクトル

T

SQ 列の層のターゲット ベクトル

E

SQ 列の層の誤差ベクトル

gW

性能に関する SR 列の勾配

gA

性能に関する SQ 列の出力勾配

D

SS 列のニューロン距離

LP

学習パラメーター。なし。LP = []

LS

学習状態。初期値は []

これは、以下を返します。

dW

SR 列の重み (またはバイアス) 変更行列

LS

新しい学習状態

学習は learnlv1 の学習パラメーター (以下に既定値を示す) に従って行われます。

LP.lr - 0.01

学習率

info = learnlv1('code') は、次の各 code 文字ベクトルに関する有用な情報を返します。

'pnames'

学習パラメーターの名前

'pdefaults'

既定の学習パラメーター

'needg'

この関数が gW または gA を使用すると 1 が返される

ここでは、1 つの 2 要素入力と 3 つのニューロンをもつ層に対し、ランダムな入力 P、出力 A、重み行列 W、および出力勾配 gA を定義します。また、学習率 LR も定義します。

p = rand(2,1);
w = rand(3,2);
a = compet(negdist(w,p));
gA = [-1;1; 1];
lp.lr = 0.5;

learnlv1 は、重みの変化の計算でこれらの値のみを必要とするため (下の「アルゴリズム」を参照)、これらをそのように使用します。

dW = learnlv1(w,p,[],[],a,[],[],[],gA,[],lp,[])

ネットワークの利用

lvqnetlearnlv1 を使用する標準的なネットワークを作成できます。learnlv1 を使用して学習させるため、カスタム ネットワークの層 i の重みを準備するには、次のようにします。

  1. net.trainFcn'trainr' に設定します。(net.trainParam は自動的に trainr の既定のパラメーターになります。)

  2. net.adaptFcn'trains' に設定します。(net.adaptParam は自動的に trains の既定のパラメーターになります。)

  3. net.inputWeights{i,j}.learnFcn'learnlv1' に設定します。

  4. net.layerWeights{i,j}.learnFcn'learnlv1' に設定します。(各重みの学習パラメーターのプロパティが、自動的に learnlv1 の既定のパラメーターに設定されます。)

ネットワークに学習させるには (またはネットワークが適応できるようにするには)、次のようにします。

  1. 目的に合わせて net.trainParam (または net.adaptParam) プロパティを設定します。

  2. train (または adapt) を呼び出します。

アルゴリズム

learnlv1 は、指定されたニューロンについて、ニューロンの入力 P、出力 A、出力勾配 gA、および学習率 LR に基づき、LVQ1 規則に従って重みの変化 dW を計算します。ここで、i は、出力 a(i) が 1 であるニューロンのインデックスです。

dw(i,:) = +lr*(p-w(i,:)) (gA(i) = 0; の場合)、= -lr*(p-w(i,:)) (gA(i) = -1 の場合)

バージョン履歴

R2006a より前に導入

参考

| |