Winner-Take-All のプログラム例

py -3 test.py 入力ファイル名 出力ファイル名

と入力してやれば実行できます.出力ファイル名は,結果を出力するファイルの名前であり,省略すると画面に出力されます.また,入力ファイル名は,実行に必要なデータを記述したファイルの名前であり,たとえば以下のような形式で作成します.
最大試行回数 100 入力セルの数 2 出力セルの数 2 訓練例の数 4
入力データファイル or.dat		
  日本語で記述した部分(「最大試行回数」,「入力セルの数」等)は,次に続くデータの説明ですのでどのように修正しても構いませんが,削除したり,または,複数の文(間に半角のスペースを入れる)にするようなことはしないでください.各データの意味は以下に示す通りです.

最大試行回数

  学習回数を入力します.この例では 100 を与えています.

入力セルの数

  入力セル(入力ユニット)の数を入力します.この例では 2 となっています.

出力セルの数

  出力セル(出力ユニット)の数を入力します.この例では 2 となっています.

訓練例の数

  訓練例の数を入力します(この例では 4 ).訓練例は,「入力データファイル」の項に入力されたファイル(この例では,or.dat )に記述します.ファイル or.dat は,たとえば,以下のようになります.
	OR演算の訓練例.各行の最後の2つのデータが目標出力値
	-1 -1 -1 1
	-1  1  1 -1
	 1 -1  1 -1
	 1  1  1 -1			
  1 行目はこのファイルの説明であり,何を記述しても構いません.ただし,前と同様,削除したり複文にするようなことはしないでください.2 行目以下が 4 つの訓練例を表しています.各訓練例において,最初の 2 つの値が各入力ユニットに入力される値であり,3 番目および 4 番目の値が,そのときの 1 番目および 2 番目の出力ユニットに対する目標出力値になっています.たとえば,2 行目における「-1 1」とは,2 番目の出力ユニットが発火することを意味しています.

  上で説明したデータの元で実行すると,たとえば,以下のような出力が得られます.
重み
    1    1    1
   -1   -1   -1
分類結果
-1-1 Cor -1 1 Res  2
-1 1 Cor  1-1 Res  1
 1-1 Cor  1-1 Res  1
 1 1 Cor  1-1 Res  1
  !!すべてを分類(試行回数:6)		
  2 行目および 3 行目の 2 番目以降のデータが,各入力ユニットから各出力ユニット( 2 行目が 1 番目,3 行目が 2 番目の出力ユニットに対応)へ向かう枝に付けられた重みです.また,各行の 1 番目のデータはバイアスです.分類結果において,Cor の次に出力された値が,たとえば 5 行目においては,入力が「-1 -1」である時の目標出力値(「-1 1」で,2 番目の出力ユニットが発火すべきであることを示している)であり,また,Res の後の値が実際の計算(分類)結果です.この例では,目標通り,2 番目の出力ユニットが発火したことを意味しています.なお,0 は,分類の失敗を意味しています.