043_予測させてみよう

前回で、画像を表示し、色の濃さを確認することができたので、今回は色の濃さを17段階に分けて予測をしてみましょう!

目次

色の濃さをわける

前回確認した色の濃さである0〜255のデータをを 16.0〜0.0に変換してみましょう!

コード

#1 0~255を17×値÷256で計算して小数点以下を切り捨てる

img = 16 - np.floor(17*img/256)   #1
print(img)

参考資料:Python3年生機械学習のしくみ

実行結果

最後に、2次元配列を1次元配列に変換します!

コード

#1 2次元配列を1次元配列に変換

img = img.flatten()   #1
print(img)

参考資料:Python3年生機械学習のしくみ

実行結果

予測を行う

ここで、予測をする前にもとの画像データのフォーマットを確認しておきましょう。

コード

print(digits.data[0:1])

参考資料:Python3年生機械学習のしくみ

実行結果

もとの画像データは2次元配列の形で、学習させていたことが分かりました!
この形に合わせてデータを渡してみましょう!

コード

predict = model.predict([img])
print("予測=",predict)

参考資料:Python3年生機械学習のしくみ

実行結果

残念ながら「7」と予測されませんでした…。では、ほかの数字も試してみましょう!次は、「2」で予測させてみましょう。

コード

#1 2.pngを読み込んでグレースケールに変換
#2 8×8に変換
#3  8×8の画像の色の濃さを数値化
#4 0~255を17×値÷256で計算して小数点以下を切り捨てる
#5 2次元配列を1次元配列に変換
#6 予測する
#7 画像も表示


image = Image.open("2.png").convert('L')    #1
image = image.resize((8, 8), PIL.Image.Resampling.LANCZOS)    #2
img = np.asarray(image, dtype=float)    #3
img = 16 - np.floor(17*img/256)   #4
img = img.flatten()   #5

predict = model.predict([img])    #6
print("予測=",predict)

plt.imshow(image, cmap="gray")    #7
plt.show()

参考資料:Python3年生機械学習のしくみ

実行結果

今度はちゃんと正しい数字を予測することができました!

確認問題

自分で書いた数字の画像をいくつかアップロードし、正しく予測されるか試してみましょう。

答えはコチラをクリック!

答え:

アップロードした後に以下のプログラムを実行!

image = Image.open("画像ファイル名").convert('L')
image = image.resize((8, 8), PIL.Image.Resampling.LANCZOS)
img = np.asarray(image, dtype=float)
img = 16 - np.floor(17*img/256)
img = img.flatten()

predict = model.predict([img])
print("予測=",predict)

plt.imshow(image, cmap="gray")
plt.show()
ヒント

画像のアップロードの方法は前回を参考にしてください!

目次