【发布时间】:2021-09-07 09:20:21
【问题描述】:
我遇到了无法追踪的不兼容形状错误。我正在尝试使用此处提供的代码:https://data-flair.training/blogs/face-mask-detection-with-python/,我正在研究 google colab。我在第 5 步,使用 model.fit_generator() 训练模型,这是 [10,2] 与 [10,3] 错误发生的地方,使用 fit() 得到相同的错误。
据我所知,[10,2] 来自我正在使用的模型,我使用最后一个 Dense 层设置模型的形状,但我不确定 [10,3] 在哪里来自,我感觉它与train_datagen或train_generator有关,但我一直无法弄清楚。
这是我当前的代码,我做了一些更改,但错误与我使用提供的代码得到的错误相同:
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import cv2
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Input, ZeroPadding2D, BatchNormalization, Activation, MaxPooling2D, Flatten, Dense,Dropout
from tensorflow.keras.models import Model, load_model
from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
from sklearn.utils import shuffle
import imutils
import numpy as np
#Conv and MaxPool layers extract features from dataset,
#Flatten and Dropout layers convert data in 1d and ensure overfitting
#2 dense layers for classification
#groups a linear stack of layers into a tf.keras.Model
#Conv2D: 2d convulation layer(spatial convolution over images)
#provide keyword argument input_shape
model = Sequential([ #
Conv2D(100, (3,3), activation='relu', input_shape=(150, 150, 3)),
#input_shape of photos will be (150,150), color photos so 3 channels
MaxPooling2D(2,2),
Conv2D(100, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten(), #flattens data into a single array
Dropout(0.5), #randomly sets '0.5' of inputs to 0
Dense(50, activation='relu'), # model outputs arrays of shape(none,50)
Dense(2, activation='softmax') # model outputs arrays of shape(none,2)
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
#print(model.summary())
#print(model.output_shape)
TRAINING_DIR = "./train"
train_datagen = ImageDataGenerator(rescale=1.0/255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
#print(train_datagen.data_format)
train_generator = train_datagen.flow_from_directory(TRAINING_DIR,
batch_size=10,
target_size=(150, 150))
#print(train_generator.image_shape)
VALIDATION_DIR = "./test"
validation_datagen = ImageDataGenerator(rescale=1.0/255)
validation_generator = validation_datagen.flow_from_directory(VALIDATION_DIR,
batch_size=10,
target_size=(150, 150))
#callback checkpoint, saves best model after each epoch while training
checkpoint = ModelCheckpoint('model2-{epoch:02d}.model',
monitor='val_loss',
verbose=1,
save_best_only=True,
mode='auto')
#print(checkpoint.model.output_shape())
print()
#print(checkpoint.shape())
#train model here, with fit_generator
history = model.fit(train_generator,
epochs=10,
validation_data=validation_generator,
callbacks=[checkpoint])
这是错误。
Found 1315 images belonging to 3 classes.
Found 194 images belonging to 3 classes.
Epoch 1/10
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-61-06d6f3664a3f> in <module>()
74 epochs=10,
75 validation_data=validation_generator,
---> 76 callbacks=[checkpoint])
6 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
58 ctx.ensure_initialized()
59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60 inputs, attrs, num_outputs)
61 except core._NotOkStatusException as e:
62 if name is not None:
InvalidArgumentError: Incompatible shapes: [10,3] vs. [10,2]
[[node binary_crossentropy/logistic_loss/mul (defined at <ipython-input-61-06d6f3664a3f>:76) ]] [Op:__inference_train_function_36488]
Function call stack:
train_function
错误说它是第 76 行的检查点参数,但我很确定它与第 71 行的 train_generator 参数有关,因为除非我修改该参数,否则错误不会改变。
将最后一个 Dense 层更改为 3 会使错误消失,因为我很确定 2 与蒙版是打开还是关闭有关,添加第三个选项会使后面的步骤中的逻辑混乱。
我想知道错误中的 [10,3] 和 [10,2] 到底指的是什么。
【问题讨论】:
标签: python machine-learning keras google-colaboratory training-data