LoginSignup
4
3

More than 3 years have passed since last update.

C言語でニューラルネットワークの実装(4)〜データの準備〜

Last updated at Posted at 2019-08-12

今回はデータを準備する回となります。
ニューラルネットワークに識別させるための数字のデータを用意します。「1」「2」「3」の3種類の数字を用意します。
5×5のピクセルで,次のものを「1」「2」「3」の基本的な形とします。

sample-123.png

それぞれの画像について,下の図のように黒いピクセルを1で,白いピクセルを0で置き換えます。

sample-3-1.png

これを,txtファイルで準備します(1-1.txt〜1-4.txt,2-1.txt〜2-3.txt,3-1.txt〜3-3.txt)。

3-1.txt
11100
00100
11100
00100
11100

この,「 (数字の種類)-(ID).txt 」を読み込んでデータセットを作成していきます(make_dataset.c)。
今準備したデータをもとに,次の図のような濃淡のあるデータを作成していきます。

sample-1.png

train_data.txt
1000 // データの個数
1 // 1個目のデータの数字の種類(正解のラベル)
0.0 // この行からピクセルの値
0.0
0.0
0.2
0.2
0.0
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
0.9 // 1文字目終了
3 // 2個目のデータの数字の種類(正解のラベル)
...

ニューラルネットワークに上のtrain_data.txtの1個目のデータが入力される場合, $\boldsymbol{x} = (0.0, 0.0, 0.0, 0.2, 0.2, 0.0, \cdots, 0.0, 0.9)^{\top}$ となります。

1-1.txt〜3-3.txtまでを読み込んで,訓練用データ(train_data.txt),検証用データ(validation_data.txt),テスト用データ(test_data.txt)を作成するようなシェルスクリプト(make_dataset.sh)を書いたので,深く考えずともこれを実行するだけでデータが準備されます。

準備するデータの個数を変更したい場合は,make_dataset.c中の N_trainN_validationN_test の値を変更してください。
また,文字の濃淡は,正規分布に従う乱数をもとに決めています。平均や分散を変えることで,識別問題の難易度を変えることができます。ただし,値が0を下回ったり1を超えたりする場合は,範囲内に収める必要があります。

続き

C言語でニューラルネットワークの実装(1)〜多層パーセプトロンの構造と活性化関数〜
C言語でニューラルネットワークの実装(2)〜順伝播と損失関数〜
C言語でニューラルネットワークの実装(3)〜誤差逆伝播法〜
C言語でニューラルネットワークの実装(4)〜データの準備〜 ←現在の記事
C言語でニューラルネットワークの実装(5)〜モデルの構造と順伝播の実装〜
C言語でニューラルネットワークの実装(6)〜逆伝播の実装〜
C言語でニューラルネットワークの実装(7)〜オンライン学習と重みの初期値〜
C言語でニューラルネットワークの実装(8)〜ミニバッチ学習〜

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3