簡體   English   中英

檢查輸入時出錯:預期 conv2d_4_input 有 4 個維度,但得到了形狀為 (32, 32) 的數組

[英]Error when checking input: expected conv2d_4_input to have 4 dimensions, but got array with shape (32, 32)

我正在研究 CNN 中的圖像識別系統。 訓練和測試數據輸入如下:

trainDataGen = ImageDataGenerator(
        rotation_range = 5,
        width_shift_range = 0.1,
        height_shift_range = 0.1,
        rescale = 1.0/255,
        shear_range = 0.2,
        zoom_range = 0.2,       
        horizontal_flip = False,
        fill_mode = 'nearest')

test_datagen = ImageDataGenerator(rescale=1./255)
trainGenerator = trainDataGen.flow_from_directory(
            r"Dataset/Train",
            target_size = (32,32),
            batch_size = 32,
            color_mode = "grayscale",
            class_mode = "categorical")
validation_generator = test_datagen.flow_from_directory(
            r"Dataset/Test",
            target_size=(32,32),
            batch_size=32,
            color_mode = "grayscale",
            class_mode= 'categorical')

4 層 CNN 的實現開始如下:

model = Sequential()

#Layer1----------------------------------------------------------
model.add(Convolution2D(filters = 32,
            kernel_size = (3,3),
            strides = 1,
            activation = "relu",
            input_shape = (32,32,3)))

訓練成功完成如下:

#Fit model on the loaded dataset---------
res=model.fit_generator(
        trainGenerator,
        epochs = 25,
        steps_per_epoch = 2444,
        validation_data = validation_generator,
        validation_steps = 432
        )

現在我正在嘗試通過以下方式測試測試數據:

#Compile Model---------------------------
model.compile(optimizer = "adam",
        loss = "categorical_crossentropy",
        metrics = ["accuracy"])

res= model.evaluate_generator(validation_generator)

這顯示了錯誤:

ValueError: Error when checking input: expected conv2d_4_input to have shape (32, 32, 3) but got array with shape (32, 32, 1)

即使經過大量嘗試我也無法運行 opencv,我正在嘗試 matplotlib。

# Python program to read 
# image using matplotlib 

# importing matplotlib modules 
import matplotlib.image as mpimg 
import matplotlib.pyplot as plt 

# Read Images 
img = mpimg.imread('pic.png') 

# Output Images 
plt.imshow(img) 

這完美地工作。 現在我嘗試預測 pic.png 是什么圖像。 我嘗試:

lists = model.predict(img)

這顯示錯誤:

ValueError: Error when checking input: expected conv2d_4_input to have 4 dimensions, but got array with shape (32, 32)

誰能幫助我如何更改輸入大小?

我認為您嘗試測試的圖像是灰度圖像,這意味着它具有單個通道,這就是您收到此 32x32 或 32x32x1 錯誤的原因。

在 matplotlib 代碼的情況下,解決方案是將使用 numpy 的 (32, 32) 圖像重塑為 (32, 32, 1),將第三維復制三次:

import numpy as np
img = np.reshape(img, (32, 32, 1))
img = np.concatenate([img, img, img], axis=2)

我認為您必須在您的validation_generator 中將color_mode 從gray_scale 更改為rgb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM