Ошибка значения: Ввод 0 несовместим с моделью слоя_8: ожидаемая форма=(Нет, 898, 699, 1), найденная форма=(Нет, 699, 1)

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

Вопрос:

Я хотел бы преобразовать массив размеров 898 x 699 в ожидаемый shape=(None, 898, 699, 1) , который требуется сверточной нейронной сетью (CNN). Я попытался использовать команду np.expand_dims(model, axis=-1) , но когда я передаю ее результат в CNN, она возвращает это сообщение об ошибке.

Ошибка значения: Ввод 0 несовместим с моделью слоя_8: ожидаемая форма=(Нет, 898, 699, 1), найденная форма=(Нет, 699, 1)

Как я могу это исправить?

Это мое краткое описание модели

 Model: "model_8" _________________________________________________________________ Layer (type) Output Shape Param #  ================================================================= input_12 (InputLayer) [(None, 898, 699, 1)] 0  _________________________________________________________________ conv2d_29 (Conv2D) (None, 898, 699, 32) 320  _________________________________________________________________ max_pooling2d_17 (MaxPooling (None, 449, 350, 32) 0  _________________________________________________________________ conv2d_30 (Conv2D) (None, 449, 350, 32) 9248  _________________________________________________________________ max_pooling2d_18 (MaxPooling (None, 225, 175, 32) 0  _________________________________________________________________ conv2d_transpose_18 (Conv2DT (None, 450, 350, 32) 9248  _________________________________________________________________ conv2d_transpose_19 (Conv2DT (None, 900, 700, 32) 9248  _________________________________________________________________ conv2d_31 (Conv2D) (None, 900, 700, 1) 289  ================================================================= Total params: 28,353 Trainable params: 28,353 Non-trainable params: 0 _________________________________________________________________  

Ответ №1:

Ваш входной слой не имеет формы, совместимой с данными, которые вы передаете в модель. Образцы данных имеют размер (Нет, 699, 1) (где Нет измерения пакета). Возможно, вы не имеете в виду, что ваше первое измерение должно быть размером пакета (я вижу, что вы тоже хотите размер 899). Поэтому, если вы используете наборы данных TF, вы можете сделать что-то вроде:

 dataset = dataset.batch(1)  

Это добавит новое измерение в набор данных, и у вас будет форма набора данных (Нет, 899, 699,1), которая совместима с вашей входной формой.

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

1. Я использую массив numpy, а не набор данных TF. Как я могу достичь этой формы (Нет, 899, 699, 1) с помощью numpy?

2. Тогда вы могли бы сделать что-то вроде: x= x[np.newaxis, :] и y = y[np.newaxis, :]. Где x и y-ваши массивы numpy для ввода и вывода соответственно