Проблема в вашей функции from_generator
.Когда вы передаете параметр output_shapes
, выполняется строгая проверка, чтобы увидеть, является ли выходная фигура точно такой же генерируемой или нет.В вашем случае вы получаете ValueError
о том, что он ожидает (48, 48, 1), но (7,) сформированная форма.
Аналогичная ошибка может быть сгенерирована с помощью следующего кода:
dataset = tf.data.Dataset.from_tensor_slices((np.zeros(19984, dtype=np.float32), np.ones(19984, dtype=np.float32)))
def img_resize_and_crop_genr():
yield np.zeros((7,)), np.ones((48, 48, 1))
dataset_crop = tf.data.Dataset.from_generator(img_resize_and_crop_genr, (tf.float32, tf.float32),((48,48,1), (7,)))
dataset = dataset.concatenate(dataset_crop)
dataset = dataset.map(lambda label, img_raw: (tf.cast(img_raw, tf.float32)/float(255), label))
for i,(label, img) in enumerate(dataset):
print(i)
Вывод:
ValueError: `generator` yielded an element of shape (7,) where an element of shape (48, 48, 1) was expected.
Я полагаю, вы поменяли output_shapes
.В этом случае вы можете внести поправку следующим образом:
dataset_crop = tf.data.Dataset.from_generator(img_resize_and_crop_genr,
(tf.float32, tf.float32),((7,), (48,48,1)))
Кроме того, output_shapes
является необязательным параметром.Вы можете избежать проблемы в целом, не передавая параметр, как показано ниже:
dataset_crop = tf.data.Dataset.from_generator(img_resize_and_crop_genr,
(tf.float32, tf.float32))