質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2399閲覧

TensorFlowの公式サイトのプログラムを使って自分の手書き画像を予測したい

51sep

総合スコア22

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/01/26 15:36

編集2020/01/28 18:48

TensorFlowビギナーです。
機械学習で画像分類をしてみたくて、色々なサイトを参考にさせて頂いています。
以下の公式サイトを、Fashion MNISTを数字のMNISTに変えて、実装確認までできました。

はじめてのニューラルネットワーク:分類問題の初歩

この状態(MNISTで実行した状態)で、自分で手書きして作成した「3」というpng画像を予測してみたいのですが、どのように指定?そしてMNISデータのように変換したらよいのでしょうか。

3.png

■環境
python ver.3.8.1
tensorflow ver.2.0.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じです。
opencvやpillowなどを使う、などなんでもいいので、png画像を読み込む

※MNISTのサンプルデータはグレイスケール画像(カラーチャネル数1)なので、
自作画像もグレイスケールで読み込みます

また、背景黒、数字部分白の画像が訓練データに使われてるかとおもうので、準備している画像もビット反転するなどで、ネガポジ反転も必要かと思います

それから、
画像サイズを28×28にリサイズします

読み込んだピクセル値が0~255に範囲になっているなら0~1の範囲にスケール変換します

そして
ピクセルデータの形状が(1,28,28)のnumpy.ndarrayにします。

このデータをprdictメソッドの引数にわたせば結果が返ってきます

投稿2020/01/29 09:21

DaMik

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

51sep

2020/01/29 19:52

情報をありがとうございます。 ご指示のように、以下頑張ってみましたが、(28, 28, 3)のようになってしまいます。 そのまま、/255してpreictすると、当然ですが、Errorになってしまいます。 (1,28,28)にするにどのようにすればよいのでしょうか。 ネガポジ反転?もあっているか不安です。。 もしよろしければ、アドバイスを頂いてもよろしいでしょうか。 modify_inv = ImageOps.invert(image) modify_res = modify_inv.resize((28,28)) test_image = asarray(modify_res) print(test_image.shape) #(28, 28, 3) test_image = test_image / 255.0 predictions = model.predict(test_image) #ValueError: Error when checking input: expected flatten_input to have shape (28, 28) but got array with shape (28, 3)
DaMik

2020/01/30 10:46

大体いい感じだと思います。 pillowを使った場合は例えば以下のようにしてモデルにデータを渡すことができます。 (ファイル名「3.png」というものをpillowで読み込む例です) ---- # png画像はrgbaの4チャネルでロードされるため、invert処理させるためには工夫が必要 # ⇒ rgbの3チャネルでロードしてネガポジ反転(invert)ができるようにする(pillowの仕様です) img = Image.open('3.png').convert('RGB') #3.pngを読み込んでRGBの3チャネルとしてロード img = ImageOps.grayscale(img) #グレイスケール化(チャネル数1にする) img = ImageOps.invert(img) #ネガポジ反転 img = img.resize((28,28),resample=Image.BICUBIC) #リサイズ (例えば補間アルゴリズムはバイキュービックを指定 im_np = np.asarray(img) # numpy.ndarray化 im_np = im_np / 255.0 # ピクセル値0~1の範囲に変換 #念のため出力して確認 print(type(im_np)) # <class 'numpy.ndarray'> print(im_np.shape)#(28, 28) #numpy.reshapeメソッドで形状を(1,28,28)にする x = im_np.reshape([1,28,28]) #モデルに予測させる predictions = model.predict(x) print(predictions) #全体の予測確率を表示 print(predictions.argmax()) #一番高い確率となっているもののインデックスを出力 ---- pillowの場合の一例でしたが、公式サイトにあるようにtf.io.read_fileとtf.imageモジュールをつかって読み込みや画像処理を行っても構いません。
51sep

2020/01/31 18:56 編集

ご回答をありがとうございました。ご指示のとおりで、できました!。 ちゃんと「3」と返ってきました。とても嬉しいです。本当にありがとうございました。 でも、あともう少し、、以下のプログラム(公式サイトのプログラムを少し変更して)で表示させたいのですが、ちゃんと「3」に棒グラフは立ちますが、ERRORの赤になってしまいます。 plot_value_array(1, predictions[0], test_labels) _ = plt.xticks(range(10), class_names, rotation=45) あとClassやLabel?の名前を変えることも、調べてもわかりませんでした。。 海外のサイトも少し見ていますが、いつもここに行きついてしまい、うまいこと理解できません。 (もちろん、他にもサイトはありますが、方法が多数存在し、適切な方法を見つけられません) https://stackoverflow.com/questions/39289285/how-to-create-a-image-dataset-just-like-mnist-dataset 何度も大変恐縮ですが、もしよろしければ、何かアドバイスを頂ければ幸いに思います。 最終的には、公式サイトのプログラムで「MNIST→自作画像.png」として、最初から実装することを考えています。私には遠い道のりです。
51sep

2020/02/01 19:41

200202のログ(画像の表示について) #im_np = im_np / 255.0#ピクセル値0~1の範囲に変換後、以下で表示できた fig,ax=plt.subplots(facecolor="w") ax.imshow(im_np) plt.show() #モデル予測後、以下でErrorは出ないが、全然読めない。 predictions = np.random.rand(10, 10) fig,ax = plt.subplots() ax.imshow(predictions) plt.show() さて、どうしようかしら。 やはり、既存プログラムを編集は難しい?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問