簡體   English   中英

ValueError:檢查輸入時出錯:預期 conv2d_3_input 具有形狀 (100, 100, 1) 但得到形狀為 (100, 100, 3) 的數組

[英]ValueError: Error when checking input: expected conv2d_3_input to have shape (100, 100, 1) but got array with shape (100, 100, 3)

當我嘗試編寫用於圖像識別的神經網絡時,出現錯誤:

ValueError:檢查輸入時出錯:預期 conv2d_3_input 具有形狀 (100, 100, 1) 但得到形狀為 (100, 100, 3) 的數組。

我所有的圖像都是greyscale ,大小為100x100像素。 這里的代碼:

 # Importing the Keras libraries and packages import tensorflow as tf from keras.models import Sequential from keras.layers import Conv2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense # Initialising the CNN classifier = Sequential() # Step 1 - Convolution classifier.add(Conv2D(32, (3, 3), input_shape = (100, 100, 1), activation = 'relu')) # Step 2 - Pooling classifier.add(MaxPooling2D(pool_size = (2, 2))) # Adding a second convolutional layer classifier.add(Conv2D(32, (3, 3), activation = 'relu')) classifier.add(MaxPooling2D(pool_size = (2, 2))) # Step 3 - Flattening classifier.add(Flatten()) # Step 4 - Full connection classifier.add(Dense(units = 128, activation = 'relu')) classifier.add(Dense(units = 1, activation = 'sigmoid')) # Compiling the CNN classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) # Part 2 - Fitting the CNN to the images from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True) test_datagen = ImageDataGenerator(rescale = 1./255) training_set = train_datagen.flow_from_directory('E:/exercise/dataset/train', target_size = (100, 100), batch_size = 32, color_mode = "grayscale", class_mode = 'binary') test_set = test_datagen.flow_from_directory('E:/exercise/dataset/test', target_size = (100, 100), color_mode = "grayscale", batch_size = 32, class_mode = 'binary') classifier.fit_generator(training_set, steps_per_epoch = 40, epochs = 10, validation_data = test_set, validation_steps = 8) import numpy as np from keras.preprocessing import image test_image = image.load_img('E:/exercise/predict_2.jpg', target_size = (100, 100)) test_image = image.img_to_array(test_image) test_image = np.expand_dims(test_image, axis = 0) result = classifier.predict(test_image) training_set.class_indices if result[0][0] >= 0.5: prediction = 'happy' else: prediction = 'sad' print(prediction)

任何人都可以告訴我如何解決這個問題。 謝謝你們!

嘗試為train_datagentest_datagen添加參數preprocessing_function=gray_to_rgbImageDataGenerator ,如:

def rgb_to_gray(rgb):     # Using the luminosity formula: grayscale =  0.21 R + 0.72 G + 0.07 B
    return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])

train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True,
preprocessing_function=rgb_to_gray)
test_datagen = ImageDataGenerator(rescale = 1./255, preprocessing_function=rgb_to_gray)

暫無
暫無

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

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