Saya mencoba melakukan yang tensorflow
setara torch.transforms.Resize(TRAIN_IMAGE_SIZE)
, yang mengubah ukuran dimensi gambar terkecil menjadi TRAIN_IMAGE_SIZE
. Sesuatu seperti ini
def transforms(filename):
parts = tf.strings.split(filename, '/')
label = parts[-2]
image = tf.io.read_file(filename)
image = tf.image.decode_jpeg(image)
image = tf.image.convert_image_dtype(image, tf.float32)
# this doesn't work with Dataset.map() because image.shape=(None,None,3) from Dataset.map()
image = largest_sq_crop(image)
image = tf.image.resize(image, (256,256))
return image, label
list_ds = tf.data.Dataset.list_files('{}/*/*'.format(DATASET_PATH))
images_ds = list_ds.map(transforms).batch(4)
Jawaban sederhananya ada di sini: Tensorflow: Memotong wilayah kuadrat pusat gambar terbesar
Tetapi ketika saya menggunakan metode dengan tf.data.Dataset.map(transforms)
, saya dapatkan shape=(None,None,3)
dari dalam largest_sq_crop(image)
. Metode ini berfungsi dengan baik ketika saya menyebutnya dengan normal.
python
tensorflow2.0
michael
sumber
sumber
EagerTensors
tidak tersedia di dalamDataset.map()
sehingga bentuknya tidak diketahui. apakah ada solusinya?largest_sq_crop
?Jawaban:
Saya menemukan jawabannya. Itu ada hubungannya dengan fakta bahwa metode ukuran saya bekerja dengan baik dengan eksekusi bersemangat, misalnya
tf.executing_eagerly()==True
tetapi gagal ketika digunakan di dalamdataset.map()
. Rupanya, di lingkungan eksekusi itutf.executing_eagerly()==False
,.Kesalahan saya adalah cara saya membongkar bentuk gambar untuk mendapatkan dimensi untuk penskalaan. Eksekusi grafik Tensorflow tampaknya tidak mendukung akses ke
tensor.shape
tuple.Saya menggunakan dimensi bentuk hilir dalam
dataset.map()
fungsi saya dan melemparkan pengecualian berikut karena itu mendapatkanNone
bukan nilai.Ketika saya beralih ke membongkar bentuk secara manual
tf.shape()
, semuanya bekerja dengan baik.sumber