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

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

ただいまの
回答率

89.63%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 146

51sep

score 12

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/16 12:16

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

    キャンセル

  • 2020/02/17 09: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)>
    -----

    キャンセル

  • 2020/02/19 04:13

    進捗の記録をしておきます。
    公式プログラムに自作画像を置き換えることができました。お騒がせいたしました。
    質問した時のshapeに、サイズを与えたり、ぐちゃぐちゃしていたところ、modelに投入できました。

    ですが、新たな(たぶん簡単な)問題に直面中です。
    これを犬vs猫ではなく、犬vs猫vsウサギのように、複数の認識にするにはどのようにしたらよいのか。。
    最初の読込み?またラベルの問題?
    また時間がかかりそうです。

    キャンセル

0

お疲れ様です。

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/16 03: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))

    キャンセル

  • 2020/02/16 03:39

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

    キャンセル

  • 2020/02/16 09:29

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

    キャンセル

  • 2020/02/19 04:21

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

    キャンセル

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

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る