![](/img/trans.png)
[英]ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: [None, 32, 32]
[英]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)
在本地圖像上使用 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
Model 需要 4-dim 數組,所以在預測之前,添加這條線來擴展 dim 到 NHWC 之類的。
pred_array_scaled = np.expand_dims(pred_array_scaled, axis=0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.