1

120枚の画像を使用して訓練されたCNNモデルがあります。 画像はTFRレコードに変換され、この方法で標識Tensorflowでオブジェクト識別に訓練されたCNNモデルを使用する方法

def write_records_file(dataset, record_location): 
    """ 
    dataset : dict(list) 
     Dictionary with each key being a label for the list of image filenames of its value. 
    record_location : str 
     Location to store the TFRecord output. 
    """ 
    writer = None 

    # Enumerating the dataset because the current index is used to breakup the files if they get over 100 
    current_index = 0 
    for breed, images_filenames in dataset.items(): 
     for image_filename in images_filenames: 
      if current_index % 100 == 0: 
       if writer: 
        writer.close() 

       record_filename = "{record_location}-{current_index}.tfrecords".format(
        record_location=record_location, 
        current_index=current_index) 

       writer = tf.python_io.TFRecordWriter(record_filename) 
      current_index += 1 

      image_file = tf.read_file(image_filename)   
      image = tf.image.decode_jpeg(image_file) 
      grayscale_image = tf.image.rgb_to_grayscale(image) 
      resized_image = tf.image.resize_images(grayscale_image, 250, 151) 

      image_bytes = sess.run(tf.cast(resized_image, tf.uint8)).tobytes() 

      image_label = breed.encode("utf-8") 

      example = tf.train.Example(features=tf.train.Features(feature={ 
       'label': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_label])), 
       'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) 
      })) 

      writer.write(example.SerializeToString()) 

write_records_file(testing_dataset, "./output/testing-images/testing-image") 
write_records_file(training_dataset, "./output/training-images/training-image") 

全体モデル+トレーニングスクリプトがtrain_prediction = tf.nn.softmax(final_fully_connected) で終わり、私は出力として2つの.tfrファイルを取得する(トレーニングテスト)されています。

ここで、写真があり、それを識別するための120枚の写真のより類似した写真が何であるかを知りたいとします。どのように進まなければならないのですか?

train_predictionテンソルは残念ながら兆候と私にはわからないこの訓練されたモデルと章の終わりがないshape=(3, 120), dtype=float32 120は私が読んでいる本の中でカテゴリ

の総数である。この形式を持っています実際のアプリケーションでどのように使用するか、そしてインターネットで検索すると、同じポイントで終了する多くの同様のサンプルがあります。

答えて

0

私はあなたの質問を理解しませんでした。 120サンプルで120クラスあり、クラスあたりのサンプル画像がほとんどないことを意味しますか?その場合、これは、入力として画像を分類するためにモデルを訓練し、入力が120クラスのいずれかに属する確率として出力する分類問題です(+それらのクラスに属さない追加クラス)。この場合、完全に接続されたレイヤーは、本質的に長さ120のベクトルである120クラスに対してこの確率を出力するsoftmax関数に入力されます。ただし、これはクラスごとに複数のトレーニング例が必要です。

120枚の画像があり、これらの画像と別のテスト画像の類似性があるかどうかを知る必要がある場合は、すでに存在するニューラルネットワークの120枚の画像のレイヤーを完全に連結する前により大きなサンプルの画像(開始モデルのようなもの)を訓練し、次にテスト画像ベクトルとそれらの120のベクトルとの類似性のみを訓練する。

私は上記のテクニックhereを使用して簡単に使用するデモを主催しました。問題がないかどうかを確認してください。

+0

120は、画像の数ではなくフォルダの数です。各フォルダがカテゴリに関連する120個のフォルダがあります。私は一般的にどのように分類が機能するのか理解していますが、Tensorflowでこの訓練されたモデルを正確に使用する方法はわかりません。私のコードに関連するいくつかのコードラインは、訓練されたモデルの特徴を抽出して別の画像と単純な比較を行う方法を私に見せてくれるものです。 – AndreaF

+0

@AndreaFその場合、train_predictionは120のテンソルであり、最も高い値(確率)を持つインデックスは120のうち最も近いイメージです。output = sess.run(train_prediction、feed_dict = {image_file:img})は正しい出力を返します。 。これの前に、エクスポートされたグラフをインポートする必要があります。テンソルフローのチュートリアルに従ってください。 – pratsJ

関連する問題