model.fit, давая ValueError: Ошибка при проверке ввода: ожидаемый conv2d получил массив с shape () - PullRequest
1 голос
/ 23 марта 2020

Здравствуйте, ребята, я получаю ValueError при обучении модели с использованием model.fit () .. Я пробовал много способов ее решить, но не сработало. Посмотрите .. Однако я изменил размеры всех изображений до (512, 512)

................
................
................

def resizing(image, label):
  image = tf.image.resize(image, (512, 512))/255.0
  return image, label

mapped_training_set = train_set.map(resizing)
mapped_testing_set = test_set.map(resizing)
mapped_valid_set = valid_set.map(resizing)

tf.keras.layers.Conv2D(32, (3, 3), input_shape=(512, 512, 3), activation="relu"),
tf.keras.layers.MaxPooling2D((2, 2)),
.........
.........
.........

tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation="relu"),
tf.keras.layers.Dense(101, activation="softmax")


model.compile(optimizer="adam",
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

hist = model.fit(mapped_training_set,
                 epochs=10,
                 validation_data=mapped_valid_set,
                 )

** Я получаю эту ошибку: **

<ipython-input-31-1d134652773c> in <module>()
      1 hist = model.fit(mapped_training_set,
      2                  epochs=10,
----> 3                  validation_data=mapped_valid_set,
      4                  )

16 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/autograph/impl/api.py in wrapper(*args, **kwargs)
    235       except Exception as e:  # pylint:disable=broad-except
    236         if hasattr(e, 'ag_error_metadata'):
--> 237           raise e.ag_error_metadata.to_exception(e)
    238         else:
    239           raise

ValueError: in converted code:

    /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2.py:677 map_fn
        batch_size=None)
    /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py:2410 _standardize_tensors
        exception_prefix='input')
    /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_utils.py:573 standardize_input_data
        'with shape ' + str(data_shape))

    ValueError: Error when checking input: expected conv2d_32_input to have 4 dimensions, but got array with shape (512, 512, 3)

Я пытался поиск, чтобы исправить ошибку, и теперь это было больше чем 2 часа, и я не нашел ответа ..

Все результаты и решения, которые я нашел, не были на моем topi c.

Пожалуйста, помогите, я застрял здесь.

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

1 Ответ

0 голосов
/ 23 марта 2020

Вам нужно передать вашей модели входную форму (batch_size, height, width, channels). Вот почему он говорит, что ожидает 4 измерения. Вместо этого вы передаете ему одно изображение (512, 512, 3).

. Если вы хотите обучить вашу модель одиночным изображениям, вы должны изменить форму каждого из них с помощью image = tf.expand_dims(image, axis=0). Это можно сделать с помощью функции resize.

Если вы хотите обучать вашу модель партиями, вы должны добавить mapped_training_set = mapped_training_set.batch(batch_size) после map. Затем то же самое для двух других наборов данных.

...