ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input имеет 4 измерения, но получил массив с формой (595, 10083) - PullRequest
0 голосов
/ 07 ноября 2019

Я пытался построить модель CNN, используя Keras. Вот мой код:

import keras
import tensorflow as tf
from keras.layers import Dense
from keras.models import Sequential
from keras.models import load_model
from keras.callbacks import EarlyStopping  
from sklearn.model_selection import train_test_split
from __future__ import print_function
import pandas as pd
import numpy as np
from keras.datasets import cifar10
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D
from google.colab import drive
drive.mount('/content/drive')
                  ...

# Define x_train...data
x_data=df.iloc[:,1:10084].values-25 
# x_data = np.array(x_data).tolist()  
y_data=df[['type1','type2']].values
X_train, X_test, y_train, y_test = train_test_split(x_data, y_data,test_size=0.2)

model.fit(X_train, y_train,
          batch_size=100,
          epochs=100,
          verbose=1,
          validation_data=(X_test, y_test),
          callbacks=[history])

Возвращена ошибка

ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input имеет 4 измерения, но получил массив с формой (595, 10083)

После обращения к другим вопросам я попытался изменить размер массива данных, используя

X_train = X_train[np.newaxis, :, :, :]

, который изменил его на 3-мерный и вернул ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input имеет 4 измерения, но получил массив с формой (1, 595, 10083)

Как увеличить размер данныхдо 4?

1 Ответ

0 голосов
/ 07 ноября 2019

Первый слой модели, который является двумерной сверткой, ожидает (я полагаю) данные двумерного изображения с несколькими каналами. Что-то вроде:

(img_height, img_width, num_channels).

Кроме того, вам нужно иметь другое измерение для «пакета» или «образца». Таким образом, окончательная форма будет выглядеть следующим образом:

(num_samples, img_height, img_width, num_channels).

Итак, вам необходимо изменить свои входные данные, чтобы они были в указанном выше шаблоне, с различнымиизмерения, имеющие указанную мною интерпретацию, основаны на том, что я понял из вашего кода.

Вы можете посмотреть на такие функции, как np.reshape и np.expand_dims, в зависимости от того, как ваши исходные данные отформатированы в первую очередь. .

Вы можете создать некоторые тестовые данные, например, такие:

x_train = np.random.random((4,32,32,3))

# then try out the model prediction

model.predict(x_train)  

, которые представляют собой четыре изображения размером 32x32 и 3 канала, для проверки вашей обработки.

You 'Также вам нужно будет создать что-то подходящее для y_train, когда вы будете выполнять фактическую подгонку.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...