• 締切済み

階層型NNの複数INPUTパターンへの対応

現在、階層型(3層)ニューラルネットワークを利用して、システムパラメタのメモリとして活用しようと考えております。 現在、良く分からない問題点が、複数のINPUTパターンに対してNNの出力がうまく教師信号に対応することができないことです。もちろん、ひとつのINPUTパターンではうまくいきます。 この問題点を例を挙げて説明します。 (1)複数のINPUTパターンとそれに対応する教師信号を乱数で生成します。 -*-*-*-*- INPUT -*-*-*-*- | -*-*-*-*- 教師信号 -*-*-*-*- 0.015 0.845 0.112 | 0.551 0.456 0.121 0.225 0.365 0.555 | 0.841 0.453 0.231 0.199 0.846 0.745 | 0.715 0.166 0.011 (2)back propagationを用いてNNの学習 もちろんだと思いますがここが一番重要で、現在使用しているアルゴリズムの方法論を以下にmatlab形式の擬似言語で流れを書きました。 For 1:loopNUM % 複数INPUTパターンの繰り返し学習ループ dataNUM = 1; % INPUTパターンの初期化 For 1:dataNUM % INPUTパターンの変更ループ For 1:learningNUM % 各INPUTパターンの学習回数 NNOUTPUT = NN(INPUT(dataNUM,:)); % NNの出力 ERROR = ERROR_BP(NNOUTPUT,TEACH(dataNUM,:)); % このときの出力と教師信号との誤差(hidden layer, output layer) WEIGHT = weightUPDATE(ERROR); % 誤差から重み係数(閾値も)を学習。更新 end end end という感じでプログラムを進行させ、この後複数のINPUTをNNに順番に入力したところ、上手くいきませんでした。HIDDEN層の数を変えてみたり(だいたい10個前後)しましたが、だめでした。 ふがいない説明で申し訳ありませんが、どなたかご教授お願い致します。

みんなの回答

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

階層型(3層)ニューラルネットワークで「学習」できるのは、 1) 入力と出力の関係に「法則」がある 2) 入力および出力に「連続性」、つまり教師信号に近い値の入力は、教師信号の出力に近い値になる、こと が基本です。基本といったのは、こうでな場合も「学習」できないことはないのですが、難しくなりますし、学習できない場合もあります。 ということで、教師信号を乱数で生成した場合、学習できない事があっても仕方がないかと思います。

関連するQ&A

  • プログラミングの問題

    1.皮膚感覚における情報処理機構及び機能に関する神経細胞の働きにはどういったことがありますか? 2.3層階層型ニューラルネットに誤差逆伝搬学習アルゴリズム適用して符号化問題の機能を実現するプログラムを自作し実行するやり方を教えて下さい。プログラムを自作したら、学習パターンと教師信号の組をランダムに入力して学習し、学習終了後の結合荷重を用いて学習入力、学習出力、教師信号を対比して示してほしいです。また、学習後の結合荷重としきい値は機能を実現するための内部表現になっているのでその特徴を教えてほしいです。 符号化問題 入力ユニット数:8、隠れユニット数:3、出力ユニット数:8として、入力信号と教師信号が同じになるように、それぞれ下記の8つの信号を学習させる情報圧縮ニューラルネット・学習終了後の入力パターンに対する出力ユニット及び隠れユニットの出力値の示して下さい。 入力信号(1,0,0,0,0,0,0,0),(0,1,0,0,0,0,0,0),・・・(0,0,0,0,0,0,0,1)         ↓          ↓             ↓ 教師信号(1,0,0,0,0,0,0,0),(0,1,0,0,0,0,0,0),・・・(0,0,0,0,0,0,0,1) どうかよろしくお願いします。

  • バックプロパゲーションでの学習について

    こんばんは。 現在私はバックプロパゲーションを用いて、あるパターン入力に対して理想の出力となる教師データを用意して、コンピュータに学習させるということを行なっています。 しかし、学習させて得られた重みを用いて実際にパターン認識させると、あらゆるパターンに対して教師データに近い値を出力してしまうという現象が起こっています。 原因がよく分からず困っています。アドバイスなどありましたら、よろしくお願い致します。

  • バックプロパゲーションによる学習について

    こんばんは。 現在私はバックプロパゲーションを用いて、あるパターン入力に対して理想の出力となる教師データを用意して、コンピュータに学習させるということを行なっています。 しかし、学習させて得られた重みを用いて実際にパターン認識させると、あらゆるパターンに対して教師データに近い値を出力してしまうという現象が起こっています。 原因がよく分からず困っています。アドバイスなどありましたら、よろしくお願い致します。

  • dsPIC33E でのインプットキャプチャについて

    問題点 概要: インプットキャプチャを用いて、ラインカメラの出力の幅を計測しようと考えています。 しかし、カメラ出力が無い場合でも、キャプチャをしてしまいます。 SHOEISHAの「組込みマルチタスクプログラミング」等の書籍でも勉強していますが 分かりません。 何かアルゴリズムのお勧めの書籍等も教えて頂けると幸いです。 添付画像のような信号図になります。 仕様: ラインカメラ:投光器を用いて、物体を検知すると信号が「L」になる。 そのエッジをキャプチャし、パルス幅を計測する。 ※但し、現状はエッジを検出すると、あるピンを反転させてキャプチャしたかの点検をしています。(オシロにて確認) 動作詳細: ・動作は120MHzです。 ・カメラはPICからクロックパルスを送り、それに応じて出力を返す。 1MHzのクロック(T=1[us])で129発。 その後は出力はOFFになり、リセットパルスが入力させるまで、信号を出力しない。 ・タイマ2にて上記クロックパルスをカウントし、130回目で、割込み。 (後にデータ送信等を行う) ・タイマ3にて500[us]毎にリセットパルスを送信を、割込みにて行う。 これでカメラがリセットされる。 上記のタイマ2での割込み後です。 ・メインループ内では、インプットキャプチャフラグを見ており、フラグONで RB13ピンを反転させる。 (後に、タイマ1を用いたキャプチャ値の計算を実装予定) 問題点 詳細: カメラの前に物体が無いと、信号は「H」です。 しかし、129回クロックパルスを与えると、カメラ出力は「L」になります。 この部分も検知してしまい、冒頭に述べたように、「カメラ出力が無い場合でもキャプチャをする」事態になっています。 (1)物体を検知していない状態のカメラ出力   ここでは、本来であればキャプチャは行わない ____________|¯¯¯¯¯¯¯¯¯|_________________ (2)物体を検知した状態 ____________|¯¯¯|___|¯¯¯¯ |_________________ 現状のプログラムでは、(1)の場合のエッジを検知してしまいます。 目的は(2)の状態の中央部のエッジ2つのみをキャプチしたいのです。 考察 調査した点: (1)main内のwhile(1)内で、無限にキャプチャのフラグを見ていますので タイマ2の値でのifを付けた。 TMR2が、1<TMR2<129の間のみキャプチャフラグを見る ! (1-1)上記の改良で、キャプチャフラグ検知後に、TRM2の条件分岐 (2)キャプチャを行うタイミングでのみ、インプットキャプチャをONにする。 リセットパルス後、インプットキャプチャON、クロックパルス130回目でインプットキャプチャOFF いずれも、うまくいきませんでした。(カメラが物体を検知していないのに、キャプチャをすると出力反転するピンが反転している) 要約は、 mainの無限ループ内でインプットキャプチャを行っており、それを条件に合わせてON/OFFしたいのですが、上手く行きません。 長文になりましたが宜しくお願い致します。 参考文献等の案内でも大歓迎ですのでお願いします。

  • HTMLのinputタグ数が変わる場合のjavascript処理

    パターンA ~HTML~ <input type='text' name='a[]'> <input type='text' name='a[]'> ~JavaScript~ var n = document.form1.elements["a"][0].value ; var n = document.form1.elements["a"][1].value ; パターンB ~HTML~ <input type='text' name='a[]'> ~JavaScript~ var n = document.form1.elements["a"][0].value ; ---(1) パターンAではエラーが出ないのですが、パターンBでは(1)のところでエラーになってしまいます。 【elements["a"][0]】の部分を【elements["a"]】とすればエラーは出ません。 どうやら、inputタグが1つしかない場合は、Javascriptでは配列として認識しないようです。 できれば、inputタグが1つの場合でも複数の場合でも、同じJavascriptコードを使いたいのですが、何か良い方法はありますか?

  • jQueryで複数の要素オブジェクトを取得したあと

    jQueryで複数の要素オブジェクト(というの?)を取得するケースで、jQueryオブジェクトとして扱えなくなっていることが気持ち悪く、ここをどうにかできないかという話です。 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <input type="text" id="ii1" name="nn" value="マツコ"> <input type="text" id="ii2" name="nn" value="竹田"> <input type="text" id="ii3" name="nn" value="小梅太夫"> <script> jQuery(function ($) {   alert($("#ii1").val()); // (0)   alert($("[name=nn]:eq(1)").val()); // (1)   alert($("[name=nn]:first-child").val()); // (2)   alert($("[name=nn]")[2].value); // (3)   alert($("[name=nn]").get(1).value); // (4) }); </script> このソースで、(0)はいいとして、(1)(2)のようにオブジェクトが一つしか返らないような場合には、「.val()」メソッドが使えます。しかし(3)(4)の場合には、少なくともこのままでは「.val()」メソッドが使えないため、Elementオブジェクトのvalueプロパティを使用しています。 値を取得するコードで「.val()」「value」が混在しているのが気持ち悪く、「value」に統一したいです。ちなみに実際には「$("[name=nn]")」のように取得したあと、for文でまわして処理するケースが多いです。 「$("[name=nn]")」で取得し、オブジェクトの件数をカウントしたあと苦肉の策で、for文の中で「$("[name=nn]:eq(" + i + ")").val()」等と書いたこともありますが、むしろ読みにくくなってしまっています。これだったらまだvalueプロパティを使う方がいいかと思います。 「$("[name=nn]")」で複数のオブジェクトを取得した後で、それぞれのオブジェクトに「.val()」を使う方法はありますでしょうか?あるのなら具体的に教えてください。 よろしくお願いします。

  • VB6 「Line Input」でのリークについて

    VB6での「Line Input」命令使用時のメモリリークについて教えて下さい。 1分毎に3600行のCSVファイルを読み込むプログラムを作成しています。  (CSVファイルは1行500文字程度) 以下の【パターン1】は作成したプログラムの1部ですが、 (1)を3600回ループ時にパフォーマンスモニタでの「Private Bytes」が増加してしまいます。   (1ループ毎に増加せず、数十回ループする毎に増加します。) 試しに【パターン2】を作成し、CSVファイルはオープンのみ行い、 読み込みは行わずに、500文字の文字列が入った変数をコピーした場合は、 「Private Bytes」は増加しません。 基本的に違いは(1)と(2)の箇所だけなのですが、 「Line Input」命令の使用方法などで間違っている箇所があるのでしょうか? ご存知の方、教えて下さい。お願いします。 【パターン1】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim FP As Integer 'ファイル番号 (省略) : FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) Line Input #FP, CsvDataBuf(i)     ←(1) i = i + 1 Loop Close #FP : (省略) 【パターン2】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim tempBuf As String Dim FP As Integer 'ファイル番号 (省略) : tempBuf = "~500文字の文字列~" FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) CsvDataBuf(i) = tempBuf       ←(2) i = i + 1 Loop Close #FP : (省略)

  • ニューラルネットの教師あり学習について質問です。

    最近誤差逆伝搬法を用いたニューラルネットについて プログラムを組んで実装してみようと思ったのですが あまり理解できていない部分があるのでよろしくお願いします。 私が作りたいのはフォントの違う数字画像の認識を 3つの特徴量(a,b,c)、3層のニューラルネット、 閾値関数にシグモイド関数、教師有り学習で作りたいのですが、 私の理解があっているかわからないのでご指摘をお願いします。 ・入力層は特徴量が3つなのでニューロンは3つ(a,b,cを入力)。 ・中間層は任意でいいということなので10つ。 ・出力層は数字が0~9までなので10つ。 教師ベクトルの与え方なのですが 出力層(0~9番とします)において各数字に対応する番号のニューロンは1、それ以外は0、 つまり 出力層の0番の教師ベクトルは{1,0,0,0,0,0,0,0,0,0} 1番目の教師ベクトルは{0,1,0,0,0,0,0,0,0,0} 9番目の教師ベクトルは{0,0,0,0,0,0,0,0,0,1} (シグモイド関数のため正確には0、1にはなりませんが・・) とあらかじめ決めておき、 教師ベクトルの学習の際は 0の画像ならば出力層は{1,0,0,0,0,0,0,0,0,0}^T となるように誤差逆伝搬を用いて中間層・出力層の重みの修正を行い、 同様に1~9の教師画像も対応する出力の番号以外0となるように 学習を行い、 識別を行いたい画像の特徴量を入力した際は 重みの修正は行わず 10この出力の誤差が最小となる教師ベクトルが第一候補、 誤差が最大となる教師ベクトルが第10候補 ということでよろしいのでしょうか? でもそうすると重みの値が一番最後に学習した教師ベクトルに 対応する重みになっているから ニューラルネット自体を10個つ用意する必要が ありますよね・・・? いま一つ理解できていないのでよろしくお願いします。

  • hiddenとなっているのは、VBAではキャッチで

    VBAのie操作で ソースが <input type="hidden" name="name" value="name"> のようにhiddenとなっているのは、VBAではキャッチできないのでしょうか? For Each myObj In objIE.document.all.tags("input") If myObj.Name = "name" Then End If Next が出来ないのは、hiddenだからでしょうか?

  • 複数のファイルを結合するバッチファイルについて

    複数のテキストファイルを1つにまとめたいと思います。 テキストファイルの内容は以下の通りです。 (Input_1.txt) 出身県,性別 神奈川,男 埼玉,男 千葉,女 End (Input_2.txt) 出身県,性別 群馬,女 茨城,男 栃木,女 End これを以下のようにまとめたいと思います。 タイトルは先頭のみにしたい。最終行のEndを削除したい。 (Merge.txt) 出身県,性別 神奈川,男 埼玉,男 千葉,女 群馬,女 茨城,男 栃木,女 Echo.出身県,性別> Merge.txt For %%i In (Input*.txt) Do @More +1 %%i>> Merge.txt では、最終行のEndが出力されてしまいます。 どのようにすれば良いか教えて下さい。

専門家に質問してみよう