【发布时间】:2021-06-16 13:22:18
【问题描述】:
在本地图像上使用 model.predict() 时出现此错误。它在形状 (224,224,3) 上进行了训练,我已将输入图像的大小调整为 (224,224,3) 仍然显示错误。测试数组中具有相同 sshape 的图像可以毫无问题地得到预测。我是新手,谁能告诉我错误。
#imports
data_dir = "/content/gdrive/MyDrive/mask_detector"
import pathlib
data_dir = pathlib.Path(data_dir)
mask_data_dict = {'mask' : list(data_dir.glob('Mask/*')),'non_mask' : list(data_dir.glob('Non_Mask/*'))}
mask_labels_dict = {'mask' : 0,'non_mask' : 1}
X,y = [], []
for mask_name,images in mask_data_dict.items():
for image in images:
img_array = cv2.imread(str(image))
img_array_resized = cv2.resize(img_array,(224,224))
X.append(img_array_resized)
y.append(mask_labels_dict[mask_name])
X = np.array(X)
y = np.array(y)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state= 0)
X_test_scaled = X_test/255
X_train_scaled = X_train/255
X_test = X_test.astype('float32')
X_train = X_train.astype('float32')
y_train_categorical = keras.utils.to_categorical(y_train, num_classes = 2, dtype = 'float32')
y_test_categorical = keras.utils.to_categorical(y_test, num_classes = 2, dtype = 'float32')
model = keras.Sequential([
keras.layers.Conv2D(16,(3,3), padding='same',activation = 'relu',input_shape=(224,224,3)),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(32,(3,3), padding='same',activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(64,(3,3), padding='same',activation = 'relu'),
keras.layers.Flatten(),
keras.layers.Dense(128, activation = 'relu'),
keras.layers.Dense(2, activation = 'sigmoid')])
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(X_train_scaled, y_train_categorical, epochs = 5)
def prediction(image):
pred_array = cv2.imread(image)
pred_array = np.array(pred_array)
pred_array_resized = cv2.resize(pred_array,(224,224,))
pred_array_scaled = np.array(pred_array_resized)/255
model.predict(pred_array_scaled)
prediction("example.jpeg") #shape
#ValueError: Input 0 of layer sequential_4 is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: (32, 224, 3)
classes = ["mask","non-mask"]
cv2_imshow(X_test[9])
classes[np.argmax(model.predict(X_test_scaled)[9])] #this works fine
【问题讨论】:
-
查看
pred_array_resized = cv2.resize(pred_array,(224,224,))前后的大小,我觉得应该是pred_array_resized = cv2.resize(pred_array,(224,224)),那里多了一个昏迷
标签: python tensorflow machine-learning keras conv-neural-network