【Tensorflow】cifar10を単純な全結合のニューラルネットで解いてみる

前回の記事でcifar10データセットについて調べてみました。

今回は単純なニューラルネットワークを作って評価してみます。

cifar10 datasetsについて

CIFAR-10データセットとは、32x32のカラー画像とラベルがセットになってるデータセットです。
データのラベルの種類としては飛行機・自動車・鳥・猫・クマ・犬・カエル・馬・船・トラックの10個用意されています。データは以下のような感じで入っています。

学習用モデル

シンプルなフィードフォワード型のニューラルネットを構築します。

model = models.Sequential()
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

2行目のFlatten()で画像の2次元データを一次元にします。

あとは全結合(64素子) -> 出力(10素子) のフィードフォワード型のニューラルネットを作ります。

最適化手法はadam, 誤差関数tf.keras.losses.SparseCategoricalCrossentropyを使います。
評価は正解率を用います。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

学習させます。

history = model.fit(train_images, train_labels, epochs=100, 
                    validation_data=(test_images, test_labels))

評価

学習曲線とテストデータでの評価を見てみます。
正解率で評価しているので、1に近くなってくれれば正しく学習できていることになります。

学習曲線を見てみると、

学習用データでも0.5にもいってなさそうです・・・
テストデータでの評価も見てみます。

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

print(f"test_loss:{test_loss}, test_acc:{test_acc}")
#=> test_loss:1.7482675313949585, test_acc:0.3617999851703644

accuracyは低いですね。

まぁ画像データを無理やり単純な全結合のフィードフォワード型のニューラルネットで解いてるんでそんなもんですね。

終わりに

今回は単純な全結合のフィードフォワード型のニューラルネットでcifar10の分類を試してみました。

予想通りまったく性能は出ませんでした。次は畳み込むニューラルネットワークを試してみようと思います。

タイトルとURLをコピーしました