यह संभव है करने के लिए फसल/आकार छवियों प्रति बैच ?
मैं का उपयोग कर रहा हूँ ... बदलेगी देश डेटासेट एपीआई के रूप में नीचे:
dataset = dataset.shuffle().repeat().batch(batch_size, drop_remainder=True)
मैं करना चाहते हैं, बैच के भीतर सभी छवियों को करना चाहिए एक ही आकार है । हालांकि भर में बैचों यह अलग अलग आकार हो सकता.
उदाहरण के लिए, 1 बैच के सभी छवियों के आकार (batch_size, 300, 300, 3). अगले बैच कर सकते हैं छवियों के आकार (batch_size, 224, 224, 3). एक और बैच हो सकता है छवियों का आकार (batch_size, 400, 400, 3).
मूल रूप से मैं चाहता हूँ करने के लिए है dymanically आकार बैचों, लेकिन सभी के भीतर छवियों के बैच है, स्थिर आकार.
अगर हम का पालन के रूप में:
dataset = dataset.shuffle().repeat().batch(batch_size, drop_remainder=True).map(lambda x, y: map_fn(x, y))
करता है ऊपर .नक्शा() के लिए लागू होता है प्रत्येक बैच अलग-अलग या पूरे डाटासेट ?
अगर ऊपर .नक्शा() नहीं लागू करने के लिए प्रत्येक बैच अलग है, कैसे कर सकते हैं हम ऐसा ? हम कर सकते हैं किसी भी परिभाषित इटरेटर के बाद डेटासेट.बैच(), लागू tf.छवि । crop_and_resize (अधिक) प्रत्येक छवि के प्रति बैच और बाद में उपयोग डेटासेट.जुटना() गठबंधन करने के लिए सभी बदल बैचों ?
मैं पैदा कर रहा हूँ डाटासेट नीचे के रूप में:
# Dataset creation (read image data from files of COCO dataset)
dataset = tf.data.Dataset.list_files(self._file_pattern, shuffle=False)
dataset = dataset.shard(dataset_num_shards, dataset_shard_index)
dataset = dataset.shuffle(tf.cast(256 / dataset_num_shards, tf.int64))
dataset = dataset.interleave(map_func=tf.data.TFRecordDataset(filename).prefetch(1), cycle_length=32, block_length=1, num_parallel_calls=tf.data.experimental.AUTOTUNE)
dataset = dataset.map(tf_example_decoder.TfExampleDecoder().decode, num_parallel_calls=64)
dataset = dataset.shuffle(64).repeat()
# Parse each image for preprocessing
dataset = dataset.map(lambda data, _: _parse_example(data), num_parallel_calls=64)
dataset = dataset.batch(batch_size=batch_size, drop_remainder=True)
# Below code suggested by you to resize images to fixed shape in each batch
def resize_data(images, labels):
tf.print('Original shape -->', tf.shape(images))
SIZE = (300, 300)
return tf.image.resize(images, SIZE), labels
dataset = dataset.map(resize_data)
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)
tf.estimator.Estimator(...).train(
input_fn=dataset,
steps=steps,
hooks=train_hooks)
INVALID_ARGUMENT: Cannot add tensor to the batch: number of elements does not match. Shapes are: [tensor]: [640,426,3], [batch]: [480,640,3]
हालांकि मैं दे दिया आकार = (300, 300) में tf.छवि । आकार(छवियों, आकार), बैच आकार = (480, 640). और अगले के रूप में छवि के विभिन्न आकार = (640, 426), यह विफल करने के लिए इसे जोड़ने के बैच के लिए. इसका मतलब है कि किसी भी तरह से यह करने में सक्षम नहीं लागू होते हैं । नक्शा() समारोह पर प्रत्येक व्यक्ति के बैच. किसी भी मदद/विचार है ?