前回で、画像を表示し、色の濃さを確認することができたので、今回は色の濃さを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()
ヒント
画像のアップロードの方法は前回を参考にしてください!