Ошибка с input_shape, как ожидается, будет иметь 4 измерения, но получен массив с формой (73257, 32, 32)

#python #tensorflow #deep-learning #neural-network #shapes

Вопрос:

У меня есть изображения этой фигуры в оттенках серого: x_train_grey.shape = (73257, 32, 32)

Я указываю первый слой следующим образом:

Flatten(input_shape=(32,32,1)' Потому что я не передаю размер пакета, а изображения в оттенках серого имеют только 1 канал. Но я получаю эту ошибку:

ValueError: Error when checking input: expected flatten_1_input to have 4 dimensions, but got an array with shape (73257, 32, 32)

Я не понимаю, в чем дело, пожалуйста, помогите. Я понимаю, что об этом спрашивали много раз, но я не могу найти решение.

Ура!

Ответ №1:

Проблема, вероятно, заключается в том, как вы передаете свои данные в свою модель. Если ваша форма ввода (batch_size, 32, 32) , попробуйте что-то вроде этого:

 import tensorflow as tf

grey_scale_images = tf.random.normal((64, 32, 32))

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(32,32,1)))

print(model(grey_scale_images).shape)
# (64, 1024)
 

Обновление: И input_shape=(32,32,1) то, и input_shape=(32,32) другое будет работать. Это зависит от того, как вы передаете свои данные в свою модель:

 import tensorflow as tf

grey_scale_images = tf.random.normal((64, 32, 32))
Y = tf.random.normal((64, 1024))
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(32, 32, 1)))
model.compile(loss='MSE')
model.fit(grey_scale_images, Y)
 

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

1. На самом деле, простое прохождение input_shape=(32,32) сработало, спасибо!

2. Я думаю, что вы ошибаетесь… Проверьте мой обновленный ответ.

3. Спасибо, но я не совсем уверен, что это правильно. Я пытался input_shape=(32,32,1) , но это не работает. Что, по вашему мнению, нужно сделать, прежде чем передавать это вместо input_shape=(32,32) этого ? Есть ли какое-то правило, которое гласит (32,32,1) , что его следует использовать (32,32) повторно, или это не имеет значения, как вы говорите, работают оба варианта?

4. Проверьте нижнюю часть моего ответа. Как я уже сказал, оба работают, но это зависит от того, как выглядят ваши данные

Ответ №2:

Я тоже все еще изучаю этот материал, но я бы предположил, что «1» как количество записей в измерении невозможно. Даже если это возможно, это только начало. «1» как размер оси для меня не имеет смысла. Кто-нибудь еще?

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

1. Спасибо, действительно input_shape=(32,32) , кажется, все работает нормально