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

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

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

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

Q&A

解決済

2回答

1592閲覧

転移学習した後のモデルで、特定の画像を予測するには?(TensorFlow)

51sep

総合スコア22

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

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

Python

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

0グッド

1クリップ

投稿2020/02/14 17:39

編集2020/02/14 18:01

ThesorFlow、機械学習の初学者です。TensorFlowの公式サイトを参照し、実装しながら学んでいます。
とりあえず、ここ「はじめてのニューラルネットワーク:分類問題の初歩」を実装して、耳にしたことがあるMobileNetV2がどんなものか知りたくて確認している最中です。

最終的には、画像分類をしたいと思っています。(例えば「3」の数字が何であるか予測するような)
TensorFlow公式のMobileNetV2を使用したサイトTransfer learning with a pretrained ConvNetでは、モデルを評価したところで説明は終了?していました。その次のステップとして、どのように特定の画像をそのモデルで画像分類する?予測する?とか、ないのでしょうか。
私は、まさにそこ(実際に画像分類して正解を確かめるところ)を知りたいのですが。

初歩的な質問で(変な質問をしていたら)お恥ずかしいですが、MobileNetV2で画像分類まで説明しているサイトなどがあれば、アドバイスをお願い致します。(それとも、画像分類は、最初に実装したサイトの方法でできるのでしょうか)

また、私のような超初級レベルで、最初に読むべき教科書的な参考書があれば、こちらもアドバイスをお願い致します。今は、本屋でよく見かける以下の本などを考えています。

scikit-learnとTensorFlowによる実践機械学習
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

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

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

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

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

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

guest

回答2

0

お疲れ様です。

model.predict()
を実行している例ですが、

https://qiita.com/hiraku00/items/66a3606af3b2eed57778
https://aidemy.hatenablog.com/entry/2017/12/17/214715

とか、どうでしょう。参考にはなるかと。
(アイドルの画像とか使っているとかは、著作権とか適当とは思いませんが。。。)

投稿2020/02/15 11:02

0kcal

総合スコア275

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

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

51sep

2020/02/15 18:15

ご回答をありがとうございます!。 ご提示のサイトを拝見させていただいて、おそらくmodel.predict()が求めるものと感じています。 1つ目に回答くださったmeg_さんの方で試してみました。(私のレベルが低くててとりあえず公式サイトで。) よく見たら、私が最初に拝見した以下サイト様にもmodel.predict()なるものがありまして、 その時点では読めて(理解できて)いませんでした。気づかず、お恥ずかしい限りです。 https://hazm.at/mox/machine-learning/computer-vision/classification/keras-pre-trained/index.html 私も以下のサイト様のように公式サイトで実装してみたいのですが、現状、まず読み解けていません。 おそらく画像データの変換やら、正解ラベルの取得やら、またやらないといけないのですよね。 もう少し勉強してみます。 def predict(files, top=10): # すべての画像を読み込み images = [load_img(f, target_size=(299, 299)) for f in files] # 299x299 リサイズ済み RGB 画像の読み込み images = [img_to_array(image) for image in images] # Pillow 形式を Numpy 配列に変換 images = [preprocess_input(image) for image in images] # RGB からモデル学習時の入力形式に変換 images = np.stack(images) # すべての画像の分類ごとの生起確率を求める probs = model.predict(images) # 生起確率の配列を分類ラベルと対応させ上位 n 件を抽出する result = [] for labeled_prob in decode_predictions(probs, top=top): # (id, label, probability) × top result.append(sorted(labeled_prob, key=lambda x: -x[2])[:top]) return result if __name__ == "__main__": files = sys.argv[1:] if len(files) > 0: for file, probs in zip(files, predict(files)): print("[%s]" % file) for (id, label, prob) in probs: print(" %.3f %s" % (prob, label))
0kcal

2020/02/15 18:39

お疲れ様です。 わかってしまえば簡単かもしれませんが、 意外と、理解しにくいものだと思いますので、、、 一歩、一歩かと。
51sep

2020/02/16 00:29

なかなかうまくいきません。。 慣れないから?か、いや、理解していないのでしょうね。。 お言葉ありがとうございます。 とりあえず、素敵なわかりやすい出力は後にして、予測だけでも何とかしたいところです。
51sep

2020/02/18 19:21

進捗の記録をしておきます。 あれから、model.predict()を調べています。 美しく出力はできていませんが、なんとか見れている?気がします。 ご提示のサイトを参照させていただきながら、ベストアンサーに選ばず申し訳ございません。 お二方共につけたかったのですが、迷ったときは、最初にご回答いただいた方ということにしました。 またどうぞよろしくお願い致します。
guest

0

ベストアンサー

tensorflowのサイトではダウンロードした画像を使用していますので、独自データで訓練・評価すれば良いかと思います。(学習(訓練)が上手くいくかどうかは別の話ですが)

投稿2020/02/15 03:01

meg_

総合スコア10594

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

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

51sep

2020/02/15 04:04

ご回答をありがとうございます!。 現状、自作の手書き数字画像.pngを作って「はじめてのニューラルネットワーク:分類問題の初歩」のプログラムで実行・予測してみました。正確度はさんざんでしたが、動作確認はできました。それと同じように「Transfer learning with a pretrained ConvNet」のサイトでも予測することができそう?ですね。その場合、予測した結果を出力するプログラムは自力で書かないといけない…のでしょうか、やはり。 具体的には、以下のサイト様が車やキノコを予測していることを「Transfer learning with a pretrained ConvNet」のプログラムの続きで、自分で犬の写真を用意すれば、その写真を予測させることができるという理解でよろしいのでしょうか。 https://hazm.at/mox/machine-learning/computer-vision/classification/keras-pre-trained/index.html 初歩的な質問返しをしてしまいました。もしもまだこの質問にお付き合いくださるのであれば、ご助言いただけると助かります。
meg_

2020/02/15 04:48

画像データを差し替えて後はtensorflowのサンプルコードそのままで動きませんか? (画像の前処理含め)
51sep

2020/02/15 18:00

ご回答をありがとうございます!。 まだ「Transfer learning with a pretrained ConvNet」を実装していなかったので、 とりあえずinitial_epochs=1だけにして(時間がかかりそうなので)、途中まで実行してみました。 2つ目に回答くださった0kcalさんがおっしゃっているmodel.predict()がそうかも?と思い、 epoch=1が終了した後、以下のプログラムを書いたところ、何やら数値が出てきました。 この値をどう理解していいのか、まだ勉強不足で分かりませんが、方法はこんな感じなのでしょうか。 model.predict(test_batches)[0] array([1.328567], dtype=float32) 画像データの差し替えは、まだチャレンジできていません。。 「はじめてのニューラルネットワーク:分類問題の初歩」の時に、差し替えにかなり苦労したので、 おそらく今回もpngを適切な画像データに変換するのに、また時間を費やしそうな気がしています。。
meg_

2020/02/16 03:16

np.argmax(model.predict(img))でモデルが推定したラベルが取得できるはずです。※imgが推定したい画像
51sep

2020/02/17 00:29

ご回答をありがとうございます!。 ご提示のコードを試してみました。 np.argmax(model.predict(test_batches)[1])としたところ「0」の出力がありました。 この「0」はnegative value classの判定(1はpositive)ということでよろしいのでしょうか。 あと、データ差替えも試しています。ですが、以下の「公式のshapes」まで持っていけません。 (ここをそろえれば、それ以降の公式プログラムが実行できる?と思って試しています。) 公式のshapes <DatasetV1Adapter shapes: ((None, None, 3), ()), types: (tf.uint8, tf.int64)> 色々なサイトをかいつまんでいて、自分で書いていないのがいけないとは思っています。 (初学者なのに人に伺うばかりでいけないのはわかっています。) とは言え、もしもまだこの質問にお付き合いくださっていましたら、 以下の現状から、「公式のshapes」まで持っていけるようなアドバイスをお願いしてもよろしいでしょうか。(それとも、アプローチの方法やそもそもプログラムが違っていたら、ご指摘頂けると助かります。。) ----- def _parse_fn(filename, label): image_string = tf.io.read_file(filename) image_decoded = tf.image.decode_jpeg(image_string) return image_decoded, label train_data = tf.data.Dataset.from_tensor_slices((tf.constant(train_filenames), tf.constant(train_labels))).map(_parse_fn).shuffle(buffer_size=10000).batch(32) print(train_data) <BatchDataset shapes: ((None, None, None, None), (None,)), types: (tf.uint8, tf.float64)> -----
51sep

2020/02/18 19:13

進捗の記録をしておきます。 公式プログラムに自作画像を置き換えることができました。お騒がせいたしました。 質問した時のshapeに、サイズを与えたり、ぐちゃぐちゃしていたところ、modelに投入できました。 ですが、新たな(たぶん簡単な)問題に直面中です。 これを犬vs猫ではなく、犬vs猫vsウサギのように、複数の認識にするにはどのようにしたらよいのか。。 最初の読込み?またラベルの問題? また時間がかかりそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問