2017-07-28 9 views
1

私はテンソルフローでニューラルネットワークを訓練しようとしています。 tf.train.batch_join()関数を使用して、ラベルとともにデータをロードします。私は次のようなことをします:テンソルフローのtf.train.batch_join()関数はどのように機能しますか?

image_batch, label_batch, image_batch_f = tf.train.batch_join(
     images_and_labels, batch_size=batch_size_placeholder, 
     #shapes=[(args.image_size, args.image_size, 3),()], enqueue_many=True, 
     shapes=[(args.image_height, args.image_width, 3),(), (args.image_height, args.image_width, 3)], enqueue_many=True, 
     capacity=4 * nrof_preprocess_threads * args.batch_size, 
     allow_smaller_final_batch=True) 
    image_batch = tf.identity(image_batch, 'image_batch') 
    image_batch = tf.identity(image_batch, 'input') 
    label_batch = tf.identity(label_batch, 'label_batch') 
    image_batch_f = tf.identity(image_batch_f, 'flipped_images_batch') 

ここでは、3つのバッチのデータが得られます。イメージのバッチ、ラベルのバッチ、イメージのバッチと同じイメージのフリップされたイメージのバッチ。私は画像のバッチ上の特徴を抽出し、画像を反転させたい。下の行は、ネットワークを介してデータのバッチを渡します。

# Build the inference graph 
    prelogits, _ = network.inference(image_batch, args.keep_probability, 
     phase_train=phase_train_placeholder, feature_dimension=args.embedding_size, 
     weight_decay=args.weight_decay) 


    features = tf.nn.l2_normalize(prelogits, 1, 1e-10, name='embeddings') 

    #getting the flipped embeddings 
    prelogits_f, _ = network.inference(image_batch_f,args.keep_probability, 
        phase_train=phase_train_placeholder,feature_dimension=args.embedding_size, 
        weight_decay=args.weight_decay,reuse=True) 
    features_flipped_images = tf.nn.l2_normalize(prelogits_f,1,1e-10,name='embeddings_f') 

両方の機能を取得するために、機能とfeatures_flipped_images操作でsession.run()を実行します。このようなもの:

feed_dict = {phase_train_placeholder:False, batch_size_placeholder:batch_size} 
emb, emb_f = sess.run([features, features_flipped_images],feed_dict=feed_dict) 

私の質問は次のとおりです。私はいつ、私は、batch_join関数はバッチサイズの画像のバッチをディスパッチする機能を実行するセッションを行うと思います。しかし、features_flipped_imagesでsession.run()を実行すると、その関数はbatch_join関数からフリップされたイメージのバッチも取得します。 features_flipped_imagesが実行されたとき、batch_join関数は反転したイメージの新しいバッチを送出しますか?または、機能が実行されたときに生成された反転されたイメージの同じバッチですか?もしそうでなければ、どうしたらいいですか?私は画像のバッチとフリップされた画像のバッチに特徴を抽出したい。

答えて

0

私の推測はそれぞれ[features、features_flipped_images]が実行されるたびに、同じバッチのデータしか取得されません。のは、例を見てみましょう:あなたはバッチで何があるか確認したい場合は

imgs_batch,labels_batch = tf.train.batch([img, label]...) 

はその後、:

あなたが見る
imgs_data, labels_data = sess.run([imgs_batch, labels_batch]) 

あなたはsess.run([機能、features_flipped_images]を実行すると、それは似ています、。 )。私はあなたが2つのバッチを取得するとは思わない、そうでなければ、imgs_dataとlabels_dataはお互いに対応していません。

+0

イメージの機能を連結してイメージを反転し、連結された機能をマッチングに使用すると、実際にマッチングパフォーマンスを向上させる必要があるため、システムのパフォーマンスが大幅に低下するため、私はまだバッチローダーについては不明です。 –

関連する問題