Uncaught Error: Ошибка при проверке: ожидалось, что conv2d_input будет иметь 4 измерения, но получен массив с формой [275,183,3] - PullRequest
0 голосов
/ 29 октября 2018

Я выполнил следующие операции с изображениями перед тренировкой модели keras:

for img in os.listdir(path):    
    # convert to array
    img_array = cv2.imread(os.path.join(path,img) ,cv2.IMREAD_GRAYSCALE) 
    # resize to normalize data size
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE)) 
    # add this to our training_data list
    training_data.append([new_array, class_num]) 

#shuffle the data 
random.shuffle(training_data)

#empty lists (X for features, y for labels)
X = []
y = []

for features,label in tqdm(training_data):
    X.append(features)
    y.append(label)


X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)

Я тренирую модель. Вот начальный слой:

#start creating model 
model = Sequential()

model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:])

Я использую обученную модель для получения некоторых прогнозов ( Я тренирую модель на python, а затем загружаю модель в Tensorflow.js )

Фрагмент кода для прогнозирования

let imageTensor = tf.fromPixels(image);
model.predict(imageTensor).print();

Я получаю следующую ошибку:

Uncaught Error: ошибка при проверке: ожидается, что conv2d_input будет иметь 4 размер (ы), но получил массив с формой [275,183,3]

Изменение вышеуказанного кода на

let imageTensor = tf.fromPixels(image).resizeNearestNeighbor([50,50]).mean(2).toInt().expandDims(2);
model.predict(imageTensor).print();

выдает следующую ошибку:

Uncaught Error: ошибка при проверке: ожидается, что conv2d_input будет иметь 4 размер (ы), но получил массив с формой [50,50,1]

наконец, когда я делаю это

let imageTensor = tf.fromPixels(image).resizeNearestNeighbor([50,50]).toInt().expandDims();
 model.predict(imageTensor).print();

Я получаю следующую ошибку:

Ошибка при проверке: ожидаемая форма conv2d_input [null, 50,50,1], но получил массив с формой [1,50,50,3].

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Это связано с несоответствием размера входных данных модели и размера изображения, переданного в качестве параметра в метод прогнозирования.

Можно изменить форму изображения следующим образом:

imageTensor.reshape([-1, 50, 50, 3])
0 голосов
/ 30 октября 2018

В первом примере, с [256, (3,3) и последним], keras рассматривает этот список как имеющий три измерения или элементы, когда он ищет четыре измерения. Снимите скобки, чтобы получить:

[256, 3, 3, input_shape=X.shape[1:]]
...