Я пытался использовать различные источники вдохновения - в частности, этот - для создания маркированного набора данных изображений для передачи model.fit () .
Мой код кажется эквивалентным приведенному в ответе на этот вопрос ... с немного другим _parse_function()
по сравнению с ОП вопроса:
def load_image( path, label ):
file_contents = tf.io.read_file( path )
image = tf.image.decode_image( file_contents )
image = tf.image.convert_image_dtype( image, tf.float32 )
return image, label
Я могу проверить это функционируют независимо в командной строке python, например, с image, label = load_image( "tiger.jpg", "Tiger" )
и заканчиваются меткой "Tiger"
и image[0][0]
, которая правильно соответствует верхнему левому пикселю изображения:
>>> image[0][0]
<tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.37254903, 0.5529412 , 0.854902 ], dtype=float32)>
Аналогично, если я попробую print( image[ 0 ][ 0 ]
из моей программы, я получу:
tf.Tensor([0.37254903 0.5529412 0.854902 ], shape=(3,), dtype=float32)
Я новичок в python, так что я надеюсь, что это просто эквивалентные варианты темы, но в любом случае, когда я передаю все в model.fit()
в моей программе, я получаю:
ValueError: Cannot take the length of shape with unknown rank.
Никакие изменения ни по одной теме не подняли меня за пределы этого пункта. Я удалил все конвейерные операции из набора данных (например, нет .shuffle()
, нет .repeat()
, нет .batch()
), поэтому я использую только функцию .map()
и получаю тот же результат ошибки. Единственные места, где я могу видеть ошибку, это указанная выше функция load_image()
или код вызова:
dataset = tf.data.Dataset.from_tensor_slices( ( images, labels ) ) # tf.constant() does not change error
dataset = dataset.map( load_map )
model.fit( dataset, epochs=100 )
В чем причина ошибки?