未捕获的错误:检查时出错:预期conv2d_input具有4维,但数组的形状为[275,183,3]

时间:2018-10-29 20:27:49

标签: python tensorflow conv-neural-network tensorflow.js

在训练我的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();

我遇到以下错误:

  

未捕获的错误:检查时出错:预期conv2d_input具有4   维,但数组的形状为[275,183,3]

将上面的代码更改为

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

出现以下错误:

  

未捕获的错误:检查时出错:预期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 :(得分:0)

在第一个示例中,使用[256,(3,3)和最后一件事],当寻找四个维度时,keras将此列表视为具有三个维度或元素。删除括号以产生:

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

答案 1 :(得分:0)

这与模型输入的尺寸和作为参数传递给预测方法的图像的尺寸不匹配有关。

一个人可以考虑通过以下方式重塑图像:

imageTensor.reshape([-1, 50, 50, 3])