2017-07-07 11 views
0

TFRecordファイルの画像データをtf.train.shuffle_batch()にフィードしています。私は、TFRecordファイルを読み込み、前処理して[[画像の配列、np.uint8形式]、[ラベルの配列、np.uint8形式]の形式で画像とワンホットラベルを返すload_img_file()関数を持っています。私は作戦を作った。tf.train.shuffle_batch()ValueError:テンソルのランクを推測できません。

load_img_file_op = tf.py_func(self.load_img_file, [], [np.uint8, np.uint8]) 

これは、その機能をopに変換する。私は、その作品がうまくいっていることを確認しました

data = tf.Session().run(load_img_file_op) 
for n in range(50): #go through images 
    print data[1][n] #print one-hot label 
    self.image_set.display_img(data[0][n]) #display image 

ワンホットラベルを正常に印刷し、対応する画像を表示します。

私は

self.batch = tf.train.shuffle_batch(load_img_file_op, batch_size=self.batch_size, capacity=q_capacity, min_after_dequeue=10000) 

ような何かをしようとすると、しかし、私はガイドが何一致しようとする多くのバリエーションを試してみましたが、エラー

raise ValueError("Cannot infer Tensor's rank: %s" % tl[i]) ValueError: Cannot infer Tensor's rank: Tensor("PyFunc:0", dtype=uint8)"

取得:

  • self.batch =の代わりに、私はexample_batch、label_batch =を試しました(1つではなく2つの値を取得しようとしています) imageslabels
  • load_image_file()機能とload_img_file_opリターン二つの別々の値を持つ真の
  • enqueue_manyを設定します。そして

    tf.train.shuffle_batch_join()

を使用して tf.train.shuffle_batch()
  • に一度に一つだけの画像とラベルを入力する/返す
  • tf.train.shuffle_batch([images, labels],...)のようにそれらを入力するものは何も動いていないようにみえますが、私は guideのフォーマットを以下の午前ような気がします私が見てきたさまざまなチュートリアルがあります。私は間違って何をしていますか?私のミスが馬鹿馬鹿しい、または些細なことであれば、私はお詫び申し上げます(このエラーの検索は私に関連するものを返すようには見えない)。ご協力いただきありがとうございます!

    +2

    この回答を見ることができます:https://stackoverflow.com/questions/42590431/output-from-tensorflow-py-func-has-unknown-rank-shape – npf

    答えて

    0

    The linkはコメントに多大な助けとなりました。ありがとうございました! (答えは、py_funcを使用するときに形状を与えなければならないということです)。私はそれの上にもう少し詳しく説明しなければならなかったので、私は完全なソリューションを投稿します。

    私は、

    return images, labels 
    

    次に、上記の質問のように進行が、シェーピング:彼らは二つの異なるテンソルとなり、別々に成形することができるように、値

    load_img_file_op = tf.py_func(self.load_img_file, [], [np.uint8, np.uint8]) # turn the function into an op 
    images, labels = load_img_file_op 
    images.set_shape([imgs_per_file, height * width]) 
    labels.set_shape([imgs_per_file, num_classes]) 
    self.batch = tf.train.shuffle_batch([images, labels], batch_size=self.batch_size, capacity=q_capacity, min_after_dequeue=1000, enqueue_many = True) 
    

    enqueue_manyが重要であるようにイメージますキューに入るindivi二度と

    関連する問題