この記事では、Pythonプログラミング言語を使用したTensorFlowを使って、様々な服の画像の分類がどのように行われるかを見ていきます。
ソーシャルメディアプラットフォームのInstagram、YouTube、Twitterは、私たちの日常生活を支配しています。
特にモデルやセレブリティは、自分を最高に見せたいなら、服をいくつかのカテゴリーに分類する方法を知っておく必要があります。
こちらもお読みください。
1
2
3
|
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
|
写真に写っているファッションアイテムの分類は、個々の衣服の識別を含んでいます。
同じことは、ソーシャルネットワーキング、eコマース、刑法にも応用されている。
Step 1: モジュールをインポートする
すべてのプロジェクトにおいて、最初のステップは必要なモジュールをすべてインポートすることです。
今回は、Tensorflowに加え、numpyとmatplotlibをインポートします。
fashion_data = tf.keras.datasets.fashion_mnist
|
ステップ2: データの読み込みと前処理
これからプログラムに読み込むデータセットはこちらです。
このデータセットには、10種類のファッションカテゴリに属する、グレースケールで各28×28ピクセルの写真6万枚と、ダミーの画像1万枚が含まれている。
MNISTはこのデータセットを用いて置き換えることができる。
以下のコードで、データの読み込みを行う。
1
2
3
4
5
6
7
|
(inp_train,out_train),(inp_test,out_test) = fashion_data.load_data()
inp_train = inp_train / 255.0
inp_test = inp_test / 255.0
print ( "Shape of Input Training Data: " , inp_train.shape)
print ( "Shape of Output Training Data: " , out_train.shape)
print ( "Shape of Input Testing Data: " , inp_test.shape)
print ( "Shape of Output Testing Data: " , out_test.shape)
|
この記事もチェック:PyTorchで音声や画像のカスタムデータセットを自作する方法
ステップ3:学習データとテストデータの分割
機械学習モデルの主要な部分は、80対20の法則に基づいてデータを2つに分割することです。
80-20ルールとは、データの80%をトレーニング用データに、20%をテスト用データに送るというものです。
以下のコードでは、データをトレーニング用とテスト用に分割しています。
Shape of Input Training Data: ( 60000 , 28 , 28 )
Shape of Output Training Data: ( 60000 ,)
Shape of Input Testing Data: ( 10000 , 28 , 28 )
Shape of Output Testing Data: ( 10000 ,)
|
このコードは読み込まれたデータセットを正規化します。
1
2
3
4
5
6
7
8
9
|
plt.figure(figsize = ( 10 , 10 ))
for i in range ( 100 ):
plt.subplot( 10 , 10 ,i + 1 )
plt.imshow(inp_train[i])
plt.xticks([])
plt.yticks([])
plt.xlabel(out_train[i])
plt.tight_layout()
plt.show() |
ステップ4:データの可視化
初期データを可視化するコードは以下の通りです。
1
2
3
4
5
6
7
8
9
10
|
Labels = [ 'T-shirt/top' , 'Trouser' , 'Pullover' , 'Dress' , 'Coat' , 'Sandal' , 'Shirt' , 'Sneaker' , 'Bag' , 'Ankle boot' ]
plt.figure(figsize = ( 10 , 10 ))
for i in range ( 100 ):
plt.subplot( 10 , 10 ,i + 1 )
plt.xticks([])
plt.yticks([])
plt.imshow(inp_train[i], cmap = plt.cm.binary)
plt.xlabel(Labels[out_train[i]])
plt.tight_layout()
plt.show() |
1
2
3
4
5
6
7
8
9
|
my_model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape = ( 28 , 28 )),
tf.keras.layers.Dense( 128 , activation = 'relu' ),
tf.keras.layers.Dense( 10 )
]) my_model. compile (optimizer = 'adam' ,
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits = True ),
metrics = [ 'accuracy' ])
my_model.fit(inp_train, out_train, epochs = 20 )
|
ステップ 5: ラベルを実際の名前に変更する
可視化されたラベルを見てきましたが、ラベルにもきちんとした名前をつけたいものです。
以下のコードで実現できます。
1
2
|
loss, accuracy = my_model.evaluate(inp_test,out_test,verbose = 2 )
print ( ' ,accuracy * 100 )
|
1
2
|
prob = tf.keras.Sequential([my_model,tf.keras.layers.Softmax()])
pred = prob.predict(inp_test)
|
これで、可視化がより理解しやすくなったことがわかると思います。
ステップ 6: モデルのビルド、コンパイル、およびトレーニング
TensorFlowとKerasのモデルをビルド、コンパイル、学習するコードは以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
plt.figure(figsize = ( 20 , 20 ))
for i in range ( 20 ):
true_label,image = out_test[i],inp_test[i]
pred_label = np.argmax(pred[i])
plt.subplot( 10 , 10 ,i + 1 )
plt.xticks([])
plt.yticks([])
plt.imshow(image, cmap = plt.cm.binary)
if pred_label = = true_label:
color = 'green'
label = "Correct Prediction!"
else :
color = 'red'
label = "Wrong Prediction!"
plt.tight_layout()
plt.title(label,color = color)
plt.xlabel( " {} -> {} " . format (Labels[true_label],Labels[pred_label]))
|
ステップ7:最終的な損失と精度を確認する
モデルの学習が成功したら、次は損失を計算し、作成・学習したモデルの最終的な精度を求めます。
最終的な精度は88.8%であり、非常に良い結果となりました。
ステップ8: 予測を行う
このプログラムの最後のステップは、作成・学習したモデルを使って予測を行うことです。
ステップ9:最終的な予測値の可視化
どのような分類モデルでも、最終的な可視化を行うことは重要です。
より簡単にするために、データセットの最初の20枚の画像を視覚化することにします。
チュートリアルを読んでいただきありがとうございました。
このチュートリアルを通して多くのことを学んでいただければ幸いです。
Happy Learning! もっと学ぶために読み続けてください。
- Pythonで精度を計算する – 分類エラーメトリック
- 複数のMLアルゴリズムによるIrisデータセットの分類
- Pythonによる推薦システムの理論的紹介