0

私は、ニューラル ネットワークを使用した文字認識 (およびその後の指紋認識) に取り組んでいます。一連の流れに戸惑います。私は26文字でネットを訓練しています。後でこれを増やして、26 個のきれいな文字と 26 個のノイズのある文字を含めます。「A」という 1 文字を認識したい場合、これを行う正しい方法は何ですか? これが私が今していることです。

1) 26x100 マトリックスでネットワークをトレーニングします。各行には、bmp (10x10) のセグメンテーションからの文字が含まれています。2) ただし、テスト ターゲットについては、"A" に入力行列を使用します。入力行列がターゲット行列と同じサイズになるように、最初の行の後に 25 行のゼロがありました。3) perform(net, testTargets,outputs) を実行します。出力は、26x100 マトリックスでトレーニングされたネットからの出力です。testTargets は "A" のマトリックスです。

しかし、これは正しくないようです。トレーニングはキャラクターの認識とは別に想定されていますか? 私がしたいことは次のとおりです。

1)選択した画像ファイルのネットワークをトレーニングします(画像を論理配列に処理した後)。

2) この訓練されたネットワークを使用して、別の画像ファイル内の文字を認識します。

A から Z までを認識するようにネットワークをトレーニングします。次に、画像を選択し、ネットワークを実行して、選択した画像からどの文字が認識されるかを確認します。

4

1 に答える 1

0

さて、ここでの質問は、「ニューラル ネットワークを作成するにはどうすればよいか」という方針に沿っているように思われます。基本的な手順をここで概説して、アイデアを頭の中で固めることができますが、実際に実装する限りは、自分次第です。個人的には、プロプライエタリ言語 (MATLAB) は忌まわしいものだと思いますが、知的熱意にはいつも感謝しています。

ニューラル ネットワークの基本的な概念は、一連のノードがレイヤーにあり、それらを接続する重みがあることです (何をしたいかによって、各ノードを上下のレイヤーに接続するか、すべてのノードを接続するか、またはその間のどこでも。) 各ノードには、特定のノードまたはニューロンが「オン」または 1 と評価される可能性を表す「仕事関数」または確率関数があります。

一般的なワークフローは、取得した最上位層のニューロン/ノードから始まり、それらをデータの値に初期化します (あなたの場合、バイナリに正規化された画像のピクセル値としてこれらのそれぞれを開始することになるでしょう)最も単純であること)。次に、これらのノードのそれぞれに重みが乗算され、2 番目のレイヤーにフィード ダウンされます。このレイヤーは、合計 (実装に応じて、幾何学的または算術的な合計) に応じて「隠しレイヤー」と見なされます。仕事関数を使用して、隠れ層の状態を決定します。

最後のポイントは少し理論的で理解しにくいので、ここに例を示します。最初の行に 3 つのノード([1,0,1])があり、それらの 3 つのノードを 2 番目のレイヤーの最初のノードに接続する重みが のようなものであるとします([0.5, 2.0, 0.6])。算術合計を行っている場合、それは「隠しレイヤー」の最初のノードの重み付けが次のようになることを意味します

1*0.5 + 0*2.0 + 1*0.6 = 1.1

仕事関数としてロジスティック関数を使用している場合 (非常に一般的な選択ですが、tanh も一般的です)、そのノードが 1 に評価される可能性は約 75% になります。

おそらく、最終レイヤーには 26 個のノード (文字ごとに 1 つずつ) が必要になるでしょうが、モデルを改善するために非表示レイヤーをさらに追加することもできます。モデルが予測した文字は、最大の重み付け見出しを持つ最終ノードであると想定します。

それを起動して実行した後、それをトレーニングしたいと思うでしょう。なぜなら、おそらくウェイトをランダムにシードしただけだからです。これは理にかなっています。これにはさまざまな方法がありますが、ここでは一般的に、ニューラル ネットワークをトレーニングするための非常に一般的な方法である逆伝播について概説します。基本的には、画像が認識されるべき文字がわかっているので、その結果をモデルが実際に予測したものと比較します。モデルが問題のないキャラクターを正確に予測した場合は、モデルが機能したため、モデルをそのままにしておくことができます。誤った文字を予測した場合は、ニューラル ネットワークに戻って、入力したピクセル ノードから、予測されるべき文字である終了ノードまでの重みを増やします。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-04-22T04:15:30.323 に答える