1

this tutorial(Pure Python with NumPy)によると、学習目的のための簡単なレベルのニューラルネットワーク(パーセプトロン)を構築して、 A "手紙。このチュートリアルでは、提案された例では、 "AND"論理演算子を学習できるネットワークを構築します。この場合、我々はいくつかの入力(4×3行列)と1つの出力(4×1行列)を有する:フルバッチ訓練を用いたニューラルネットワークへの手紙画像の訓練

enter image description here

我々は、入力行列を有する出力行列を減算してエラーと更新速度を計算するたびとそうです。

ここで画像を入力したいとします。この場合、出力は何ですか?その画像を「A」文字と定義するにはどうすればよいですか? 1つの解決策は、 "A"文字として "1"を定義し、 "非A"に対しては "0"を定義する。しかし、私の出力がスカラーならば、どうやって隠れ層でそれを減算して誤差を計算し、このチュートリアルでは、「フルバッチ」トレーニングを使用し、入力行列全体に重み行列を乗算します。私はこの方法でやりたい。最終的な目的は、 "A"文字を最も簡単な形で認識できるニューラルネットを設計することです。私はこれをどうやって行うのか分かりません。

答えて

2

Fist off:いくつかの複雑なライブラリで始めるのではなく、ゼロからプログラミングすることでニューラルネットワークを理解しようとするとよいでしょう。

入力行列で出力行列を減算し、誤差と更新速度などを計算するたびに、次のように計算します。

は実際には正しくありません。あなたの例では、入力行列Xはあなたのニューラルネットワークの入力にあなたが提示するものです。出力Yは、ネットワークがXのために実行するものです。最初の要素Y[0]は、Xの最初の行の望ましい出力です。これを「ターゲットベクトル」と呼ぶことがあります。ここで、損失関数(すなわち誤差)を計算するために、ネットワークの出力(リンクされた例のコード内のL2)をターゲットベクトルYと比較します。言い換えれば、が欲しいものと比較するネットワークはY)です。は本当にです(L2)。その後、我々はYに近い方向に向かって一歩を踏み出す。

イメージを入力として使用する場合は、イメージの各ピクセルを1つの入力変数と考える必要があります。我々は8×8ピクセルの画像を取る場合、

:AおよびB、我々は用語を計算したかったためX = A∧B.

:以前に、我々は、2つの入力変数を持っていました8 * 8 = 64の入力変数があります。したがって、入力行列Xは、65列(画像の64ピクセル+バイアス項としての1入力、常に= 1)のマトリックスと、トレーニング例ごとに1つの行にする必要があります。例えば。 26文字のそれぞれに1つのイメージがある場合、マトリックスには26行が含まれます。

出力(ターゲット)ベクトルYは、Xと同じ長さ、つまり前の例では26でなければなりません。 Yの各要素は、対応する入力行がAの場合は1、別の文字の場合は0です。この例では、Y[0]は1、Y[1:]は0になります。

これまでのコードと同じコードを使用できます。出力L2は、ネットワーク予測を含むベクトルになります。これは、前と同じようにYと比較できます。

tl; dr重要なアイデアは、画像が2Dであることを忘れて、各入力画像をベクターとして保存することです。

+1

あなたの素晴らしい答えをありがとう。あなたの最後の文が私を救った。 "各入力画像をベクトルとして格納する"。 私は最初のフォームで画像を使用する必要があると思っていました。今、私はベクトルに変換すると、私は自分のモデルを設計することができます。 もう一度ありがとうございます。 – Fcoder

関連する問題