【问题标题】:Overfitting on a Small DataSet Sanity Check?在小型数据集健全性检查上过度拟合?
【发布时间】:2019-05-18 04:47:23
【问题描述】:

我正在使用预训练的 Inception V3 模型对两个类别进行图像分类。作为一个健全的检查,我在一个包含 20 个图像的小数据集上过度拟合了我的模型。训练结果似乎过度拟合,但我不确定验证准确度和损失的预期输出应该是什么。如何正确执行此健全性检查以查看我的模型是否正常工作?

data = np.array(data, dtype="float")/255.0
labels = np.array(labels,dtype ="uint8")

#test_size is percentage to split into test/train data
(trainX, testX, trainY, testY) = train_test_split(
                            data,labels, 
                            test_size=0.2, 
                            random_state=42) 

img_width, img_height = 299, 299 #InceptionV3 size

epochs =  25
batch_size = 64

#include_top = false to accomodate new classes 
base_model = keras.applications.InceptionV3(
        weights ='imagenet',
        include_top=False, 
        input_shape = (img_width,img_height,3))

#Classifier Model ontop of Convolutional Model
model_top = keras.models.Sequential()
model_top.add(keras.layers.GlobalAveragePooling2D(input_shape=base_model.output_shape[1:], data_format=None)),
model_top.add(keras.layers.Dense(350,activation='relu'))
#model_top.add(keras.layers.Dropout(0.4))
model_top.add(keras.layers.Dense(1,activation = 'sigmoid'     
model = keras.models.Model(inputs = base_model.input, outputs = model_top(base_model.output))

model.compile(optimizer = keras.optimizers.Adam(
                    lr=0.00001,
                    beta_1=0.9,
                    beta_2=0.999,
                    epsilon=1e-08),
                    loss='binary_crossentropy',
                    metrics=['accuracy'])

train_datagen = keras.preprocessing.image.ImageDataGenerator(
          zoom_range = 0.05,
          width_shift_range = 0.05, 
          height_shift_range = 0.05,
          horizontal_flip = True,
          vertical_flip = True,
          fill_mode ='nearest') 


val_datagen = keras.preprocessing.image.ImageDataGenerator()


train_generator = train_datagen.flow(
        trainX, 
        trainY,
        batch_size=batch_size)

validation_generator = val_datagen.flow(
                testX,
                testY,
                batch_size=batch_size)

【问题讨论】:

    标签: python machine-learning keras


    【解决方案1】:

    将您的数据集拆分为测试、开发和训练。查看与训练集相比,开发集的准确性和损失如何变化。为此,您可以在 Keras 中获得Tensorboard callback 的帮助:

    tbCallBack = keras.callbacks.TensorBoard(log_dir='./Graph', histogram_freq=0, write_graph=True, write_images=True)
    ...
    model.fit(...inputs and parameters..., callbacks=[tbCallBack])
    

    您也可以使用原始论文检查您的准确性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多