Saya telah memuat dataset dari tfds.load dan ingin membuang gambar tertentu yang mengganggu pelatihan yang tepat/tidak berguna bagi saya (misalnya, terlalu kecil).

Sepertinya sama sekali tidak ada informasi tentang masalah khusus ini di mana pun, jadi saya memilih yang paling cocok yaitu .filter(predicate) pada dataset. Sayangnya input ke predikat memiliki bentuk tak tentu (None, None, 3) dan seperti yang diharapkan menimbulkan kesalahan bahwa 'int' tidak dapat dibandingkan dengan 'NoneType'.

Apakah mungkin untuk menyelesaikan masalah ini dalam tensorflow atau haruskah saya tidak membuang waktu saya?

Kode semu

ds_train = tfds.load('name')
ds_train = ds_train.map(lambda ds: ds['image'])
ds_train = ds_train.filter(lambda image: image.shape[0] >= 256)
0
1338-1 12 Mei 2021, 16:58

1 menjawab

Jawaban Terbaik

Saat menulis kode dengan tf.data.Dataset, Anda harus menggunakan tf.shape(tensor) daripada tensor.shape, karena tf.data.Dataset bekerja dalam mode grafik.

Mengutip dokumentasi tf.shape:

tf.shape dan Tensor.shape harus identik dalam mode bersemangat. Dalam tf.function atau dalam konteks compat.v1, tidak semua dimensi dapat diketahui hingga waktu eksekusi. Oleh karena itu, ketika mendefinisikan lapisan dan model khusus untuk mode grafik, pilih tf.shape(x) dinamis daripada x.shape statis.

ds_train = ds_train.filter(lambda image: tf.shape(image)[0] >= 256)
0
Lescurel 12 Mei 2021, 14:05