keras.utils.to_categorical(Conv2D・CNN)- Kerasの使い方解説
【情報:2021年6月7日】
python 3.7.10
tensoflow 2.5.0
keras 2.5.0
の環境で確認したところ「keras.utils.to_categorical」でエラーになるようでした。
to_categoricalのエラーに対する解決例としては
from keras.utils import np_utils #Numpyユーティリティのインポート
keras.utils.to_categorical のところを → np_utils.to_categorical へ変更
すると対応できるようでした。
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
y_train = keras.utils.to_categorical(y_train, 10)
#コード解説
:訓練用のラベルデータの整数値を2値クラスの行列に変換(例「整数 1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。
(y_train, 10)
:0〜9までのため10クラス。
このような形式にすることで、出力結果が「0.1,0,0,0,0,0,0.8,0,0.1,0」(0の確率10%。6の確率80%。10の確率10%)を得られる。
画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。
y_test = keras.utils.to_categorical(y_test, 10)
#コード解説
:テスト用のラベルデータの整数値を2値クラスの行列に変換(例「整数 1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。
(y_test, 10)
:0〜9までのため10クラス。
このような形式にすることで、出力結果が「0.2,0,0,0,0,0,0.8,0,0,0.1」(0の確率20%。6の確率80%。9の確率10%)を得られる。
画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。
Conv2Dを使った機械学習プログラムの前処理の記述例(一例です)
0~9の手書き文字MNISTのデータセット(訓練用画像データ6万枚・テスト用画像データ1万枚。縦28×横28ピクセル・グレースケールの白黒画像)の画像認識AIの例
#画像データの読み込みと、データ形式の設定・正規化
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype('float32')/255
x_test = x_test.astype('float32')/255
#ラベルデータをOne-hotベクトルに変更
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
「Conv2D」を使ってディープラーニング技術でおなじみの「畳み込みニューラルネットワーク」(CNN:Convolutional Neural Network)を実装する前に、画像データ・ラベルデータの前処理をしています。
#画像データの読み込みと、データ形式の設定・正規化
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype(‘float32’)/255
x_test = x_test.astype(‘float32’)/255
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#コード解説
:0~9の手書き文字MNISTのデータセットを読み込む。訓練用画像データ6万枚・テスト用画像データ1万枚。縦28×横28ピクセル・グレースケール(白黒画像)・各ピクセルは黒から白までの変化を0〜255で表現。
学習データは多次元のため、行列を大文字で表記することが多い数学の慣習から、(X_train, y_train), (X_test, y_test)などと学習データを表記する際の「エックス」が大文字のサンプルコードを見かけることもあるのではないかと思います。今回は、学習データ・クラスラベル共に小文字を利用しています。
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
#コード解説
:「縦28×横28ピクセル」の「グレースケール(白黒)」の「x_train.shape[0]:画像データが6万枚」。カラー画像の場合は(x_train.shape[0], 28, 28, 3)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
#コード解説
:「縦28×横28ピクセル」の「グレースケール(白黒)」の「x_test.shape[0]:画像データが1万枚」。カラー画像の場合は(x_test.shape[0], 28, 28, 3)
x_train = x_train.astype(‘float32’)/255
#コード解説
:訓練用の画像データを正規化。黒から白までの変化を0〜255で表現しているので、255で割ることでデータを0〜1の範囲に正規化。float型にすることで実数値で表現。
正規化前「0〜255」 正規化実施「0.0〜1.0」(実数値)
x_test = x_test.astype(‘float32’)/255
#コード解説
:テスト用の画像データを正規化。黒から白までの変化を0〜255で表現しているので、255で割ることでデータを0〜1の範囲に正規化。float型にすることで実数値で表現。
正規化前「0〜255」 正規化実施「0.0〜1.0」(実数値)
#ラベルデータをOne-hotベクトルに変更
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
y_train = keras.utils.to_categorical(y_train, 10)
#コード解説
:訓練用のラベルデータの整数値を2値クラスの行列に変換(例「整数 1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。
(y_train, 10)
:0〜9までのため10クラス。
このような形式にすることで、出力結果が「0.1,0,0,0,0,0,0.8,0,0.1,0」(0の確率10%。6の確率80%。10の確率10%)を得られる。
画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。
y_test = keras.utils.to_categorical(y_test, 10)
#コード解説
:テスト用のラベルデータの整数値を2値クラスの行列に変換(例「整数 1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。
(y_test, 10)
:0〜9までのため10クラス。
このような形式にすることで、出力結果が「0.2,0,0,0,0,0,0.8,0,0,0.1」(0の確率20%。6の確率80%。9の確率10%)を得られる。
画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。
Google Colaboratory | すぐに使える「keras.utils.to_categorical」を使ったサンプルコード(Keras・CNN・MNIST・自作AI用)
・【コード解説】畳み込みニューラルネットワーク(CNN)サンプルコード – Colaboratory・Keras・MNIST
クラウド上で無料で使えるJupyterノートブック環境「 Google Colaboratory 」でKerasを使ってMNISTの数字画像認識用に、ディープラーニング(深層学習)でおなじみの「畳み込みニューラルネットワーク」(CNN:Convolutional Neural Network)のプログラミングをしてみました。機械学習モデルの畳み込みニューラルネットワークを実装する際に「keras.utils.to_categorical」(2021年6月時点では「np_utils.to_categorical へ変更しています)を使っています。
コード解説もしておきましたので、日々の学習にお役立てください。(オフラインでも学習しやすいように記事の内容を、PDFで公開してあります)
【オリジナルデータセットで機械学習に挑戦】
機械学習・人工知能プログラミングのオリジナルデータセットの壁を感じている方も多いのではないかと思います。
自作・自前画像で画像認識するためのサンプルコードを公開しました。日々の学習の参考になることがありましたら幸いです。
:【サンプルコード】Python・KerasでCNN機械学習。自作・自前画像のオリジナルデータセットで画像認識入門
:【コード解説】自作画像認識AI:Keras・CNN・Pythonオリジナルデータセット対応の機械学習サンプルコード