前回の記事でcifar10データセットについて調べてみました。
今回は単純なニューラルネットワークを作って評価してみます。
cifar10 datasetsについて
CIFAR-10データセットとは、32×32のカラー画像とラベルがセットになってるデータセットです。
データのラベルの種類としては飛行機・自動車・鳥・猫・クマ・犬・カエル・馬・船・トラックの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の分類を試してみました。
予想通りまったく性能は出ませんでした。次は畳み込むニューラルネットワークを試してみようと思います。