#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)
, кажется, все работает нормально