0

最近、私が作成している文字認識プログラムに関する多くの質問を投稿しました。今日まで完全に機能していると思っていました。ネットワークのトレーニングに関係していると思います。以下は、トレーニングとシミュレーションの手順がどのように進むと私が考えるかについての説明です。

この2枚の画像をください

ターゲット

ここに画像の説明を入力

入力

ここに画像の説明を入力

文字 D を認識するようにネットワークをトレーニングしたいと考えています。これを行う前に、画像をバイナリ マトリックスに処理したことに注意してください。私が使用するトレーニングに

[net,tr] = train(net,inputs,targets);

ターゲット画像のすべての文字を認識するようにネットワークをトレーニングしたいので、入力の代わりに私がターゲットでした。

それから私は走ります

outputs = sim(net,inputs);

ここで、入力は文字「D」の画像、または ABCD にある他の文字の画像です。ここでの基本的な前提は、ABCD のすべての文字を認識できるようにネットワークをトレーニングしてから、A、B、C、または D のいずれかの文字を選択し、ネットワークがこの選択した文字を認識するかどうかを確認することです。

質問:

トレーニング手順は正しいですか?

4

1 に答える 1

0

それは、ニューラル ネットワークの実装方法に大きく依存します。あなたが求めている質問に関しては、自分で実装したのではなく、既製の API を使用したと思います。

いずれにせよ、使用するツールを使用する前に、まず使用するツールを理解する必要があります (ここではニューラル ネットワーク)。

ニューラル ネットワークは入力を受け取り、入力の線形または非線形変換を実行して、出力を返します。

入力と出力は常に数値です。ただし、それらはあらゆる種類のデータを表す場合があります。

入力は次のとおりです。

  • 画像のピクセル
  • 実数値または整数の属性
  • カテゴリー

あなたの場合、入力は文字画像のピクセル(バイナリマトリックス)です。

出力は次のとおりです。

  • クラス (分類を行っている場合)
  • 値 (回帰を行っている場合)
  • 時系列の次の値 (時系列予測を行っている場合)

あなたの場合、分類(入力が表す文字を予測する)を行っているため、出力はクラスです。

ネットワークがどのようにトレーニングされるかを理解できるように、最初にトレーニング後のネットワークの使用方法を説明し、次にトレーニング フェーズでの意味を説明します。

したがって、ネットワークをトレーニングしたら、画像を表すバイナリ行列を与え、クラス (文字) を出力します。これは (たとえば)、A の場合は 0、B の場合は 1、C の場合は 2、C の場合は 3 です。つまり、次のようになります。

  • 入力:バイナリ マトリックス (画像)
  • 出力: 0、1、2、または 3 (ネットワークが画像内で認識した文字に応じて)

トレーニング フェーズでは、各入力に対してどの出力を希望するかをネットワークに伝えます。

トレーニング段階で使用されるデータの種類は、「予測段階」で使用されるものと同じです。したがって、トレーニング フェーズでは次のようになります。

  • 入力:バイナリ行列 [A,B,C,D] (文字ごとに 1 つ! 非常に重要!)
  • ターゲット:対応するクラス [0,1,2,3]

このようにして、A の画像を与えると 0 を出力し、B の画像を与えると 1 を出力する、というようにネットワークに学習させることになります。

注:「入力」は、実際にはトレーニング フェーズ中にネットワークに与えられた入力であったのに、トレーニング フェーズの後にネットワークに与えたい入力であると考えていたため、間違っていました。

于 2013-05-04T21:49:23.230 に答える