[英]ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (117, 1, 32, 32, 3)
[英]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.