しばらくの間、ニューラル ネットワークについて学ぼうとしてきましたが、オンラインでいくつかの基本的なチュートリアルを理解することができました。今、私はニューラル ネットワークを使用してオンラインの手書き認識を開発したいと考えています。だから私はどこから始めればいいのか分かりませんか?そして、私は非常に良い指示が必要です。最後に、私は Java プログラマーです。
あなたは私が何をすることをお勧めしますか?
しばらくの間、ニューラル ネットワークについて学ぼうとしてきましたが、オンラインでいくつかの基本的なチュートリアルを理解することができました。今、私はニューラル ネットワークを使用してオンラインの手書き認識を開発したいと考えています。だから私はどこから始めればいいのか分かりませんか?そして、私は非常に良い指示が必要です。最後に、私は Java プログラマーです。
あなたは私が何をすることをお勧めしますか?
Unipenデータベースの文字認識で簡単に始めましょう。
一般に「特徴ベクトル」と呼ばれるものを形成するには、生の軌跡データから適切な特徴を抽出する必要があります。たとえば、補間スキームを使用してデータをリサンプリングし、最終的に n 個のタプルを作成できます。各タプルには次のような情報が含まれます。
固定サイズの特徴ベクトルを取得したら、それをニューラル ネットワークへの入力として使用します。まずはMLPネットワークを試してみてください。
どの機能が最適かを判断するには、実験する必要があります。
Ink データから機能を抽出する必要がある場合は、HP の Lipi Toolkitを参照してください(ただし、認識エンジンはニューラル ネットワークを使用していないことに注意してください)。
Introduction To Neural Networks for Javaは優れた入門書であり、手書き認識の例が含まれています。
Peter Norvig の『Artificial Intelligence: A Modern Approach』は、一般的な AI に関する優れた本であり、基礎について多くのことを説明しています。Back Propagation ニューラル ネットワークに関するセクションもあります。
ニューラル ネットワークをトレーニングするには、データセットが必要です。
UCI Machine Learning Repositoryには、手書き数字のMNIST DATABASE、またはPen-Based Recognition of Handwritten Digits Data Setがあります。
UCI ML リポジトリには多くの優れたデータセットがあり、その多くはニューラル ネットワークのトレーニングに適しています。それらが何であるかわからない場合でも、いくつかを取得して、ML システムが分類タスクを実行できるかどうかを確認できます。多数の属性とインスタンスを含む分類タスクを見てください。ただし、最初は小さいタスクを試すこともできます。
ところで、ニューラル ネットワーク以外にも、人気のあるサポート ベクター マシンなど、さまざまな手法があります。
ネット上に浮かんでいるプロジェクトのいくつかを見てください。
Google が「 Java 手書き認識」のために吐き出す最初の 3 つのリンクだけをリストする
始めるためのヒント:
可能であれば、ビットマップ グラフィックではなくベクターを使用してください。理想的には、各ストロークの速度と方向が必要です。多くの場合、形ではなく、曲線の曲がり方と描画速度で文字を認識する方が簡単です。
いくつかのアプローチで問題に取り組みます。ニューラル ネットワーク、形状認識、サイズ、前後の文字、辞書を使用します。それらはすべて、さまざまなエラーレベルでさまざまな結果をもたらします。これは、結果を改善するのに大いに役立ちます。
幸運を!
これらの文字を実際に認識することが目的の場合、パフォーマンスは、入力機能の品質と選択に基づいて左右されることに注意してください。
適切な機能を選択し、できる限り前処理する (つまり、ノイズ機能、余分なデータ、重複または強く相関する機能を取り除く) ことが絶対に重要です。私の経験では、機能が十分に選択されていない最先端のアルゴリズムよりも、優れた機能を備えた最も退屈で単純な最近傍実装のほうが、はるかに優れたパフォーマンスを得ることができます。
あなたにとって、それは今のところニューラルネットの文献を読むのを遅らせることを意味し(最初に既製のブラックボックスの実装をいくつか取り上げてください)、実際のシステムがどのような種類の画像処理などを使用しているかを読むことを意味します. データに圧力と速度の情報を含めることができれば、なおさらです。LDA ヒートマップのようなものは、重要な機能と重要でない機能を最初に確認するのに役立ちます。
基本的な分類については、まともなアルゴリズムがたくさんあります。ほとんどは問題なく動作し、問題なく動作します。難しいのは、アルゴリズムの選択や微調整ではなく、ガベージ イン ガベージ アウトのシナリオを回避することです。
ヒートンの研究はあなたに大いに役立ちます
http://www.heatonresearch.com/articles/7/page3.html - サンプル コード スニペットを含むチュートリアルについては、こちらをご覧ください。
コンセプトを探しているなら、BrainNet をお勧めします。
ニューラル ネットワーク - パート I: .NET の単純な手書き認識システム
http://amazedsaint.blogspot.com/2008/01/neural-networks-part-i-simple.html
ブレインネットがお手伝いします
- ニューロンとニューラル ネットワークに関する公正な理解を得る
- インテリジェントシステムに関する良い概念を得る
- このニューラル ネットワーク ライブラリを使ってプロジェクトで使用する方法を学びます。
- クールなニューラル ネットワーク プログラムの開発方法を理解する
次の理由から、手書きの数字認識から始めることをお勧めします。
[私が間違っていない場合] ニューラル ネットワークはパターンの解釈で機能します。プログラムに入力を提供すると、プログラムは保存されたパターンのセットでそのパターンを検索し、一致に基づいて一致の可能性を提供します。
あなたの場合、パターンの寸法は、速度+方向または方向のみなどのデータである可能性があります
私のサイトで同様の方法でチャットするニューラル ボットの小さなシミュレーションを作成しました。
プログラムが「学習」するパターンが多ければ多いほど、より正確な答えが得られます。
書籍:文字認識システム: 学生と実践者のためのガイドおよびホワイトボードの認識 注記: オンライン、オフライン、および組み合わせは、出発点として適しています。
ニューラルネットは、多くの浸漬時間を必要とします。概念は簡単ですが、初心者には圧倒される可能性があります。
Jochen Fröhlich がJava のニューラル ネットワークで行ったことを見てみましょう。これは、あなたのような Java プログラマーにとって理想的な出発点のように思えます。