Не удается добавить тензор в пакет: количество элементов не совпадает

#tensorflow #keras #deep-learning #iterator #batch-processing

#tensorflow #keras #глубокое обучение #итератор #пакетная обработка

Вопрос:

Я столкнулся с проблемой при обучении нейронной сети, состоящей из двух слоев свертки. У меня есть куча изображений, которые я нормализую и изменяю размер до формы (28,28,3) в функции «создать итератор».

Затем этап обучения выполняется нормально, пока я не столкнусь с этой ошибкой :

«InvalidArgumentError: не удается добавить тензор в пакет: количество элементов не совпадает. Формы: [тензор]: [28,28,4], [пакет]: [28,28,3] [[{{node iterator_getnext_31}}]]»

Сначала я попытался загрузить некоторые изображения и изменить их размер с помощью opencv, и тогда это сработало. Однако, учитывая размер моего набора данных, мне нужно использовать итераторы и объекты набора данных, предоставляемые keras util, для обучения моей сети на всех имеющихся у меня изображениях.

Вот код для итератора:

 def make_iterator(filenames, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))

    def parse(filename, label):
        image = tf.read_file(filename)
        image = tf.image.decode_jpeg(image)
        image = tf.cast(image, tf.float32)
        image = tf.image.resize(image, (28,28))
        image = tf.reshape(image,  [28,28,3])
        image = image / 256
        return {'image': image, 'label': label}

    dataset = dataset.apply(tf.data.experimental.map_and_batch(
        map_func=parse, batch_size=batch_size, num_parallel_batches=8))

        return dataset.make_one_shot_iterator()
  

Вот подробности моего Convnet:

 model = keras.Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
  

И последнее, вот параметры для фазы подгонки:

 history = model.fit(images
                    , labels
                    , epochs=200
                    , steps_per_epoch= len(train_image_labels) // batch_size
                   )
  

Заранее спасибо 🙂

Комментарии:

1. вы когда-нибудь находили ответ?