めるぱんブログ

とある医大生の勉強の記録です

PythonとKerasによるディープラーニング 第3章②

続いて行うのは多クラス分類の問題です。

 

今回はReutersデータセットというニュース記事とそのトピックを集めたデータセットを使用します。トピックの種類は全部で46種類です。

 

前回と同様にnum_words=10000とすることで単語の数を制限します。

 

データの下準備をまた今回も行います。データのベクトル化は前回と同じコードで行うことができます。ラベルのベクトル化は前回と異なり46種類あるので、前回より複雑になります。しかし、ここで第2章で用いたto_categoricalを使うことで一発でいけます。

 

続いてモデルの構築を行います。

今回は46種類のクラスを学習しないといけないので、ユニットの数を46以上にしておかないといけないです。狭い次元を通すことにより必要なデータが失われてしまう可能性があるからです。

また出力層はもちろん46次元でソフトマックス関数を用います。

46種類に確率で分類するので当然ですね。

 

今回用いる損失関数はcategorical_crossentropyです。これは前回の二値分類ではシグモイドとbainary_crossentropyを用いたように、ソフトマックスにはcategorical_crossentropyという対応なようです。ここが多分今回一番重要なところですね。

 

検証データを今回は1000サンプルで行います。

そして512サンプルのミニバッチで20エポック訓練します。

f:id:melpan:20200412141501p:plain

訓練データと検証データの損失値

f:id:melpan:20200412141545p:plain

訓練データと検証データでの正解率

今回は8エポック目で過学習になっていますね。

ということで8エポックで学習しなおした結果正解率は78%くらいになりました。

 

この多クラス分類は正直前回の二値分類とほぼ同じで難しい要素はありませんでした。

ただ、一部異なる点として、

・ラベルのベクトル化

・ユニット数を分類する数より多くする

・出力層でソフトマックス関数、損失関数ではcategorical_crossentropyを用いる

という点があげられます。

前回苦戦したデータの前処理ですが、今回はそのままほとんど流用できたためかなり楽にできました。

ひとつひとつしっかり積み上げていくことが大切ですね。