使用图像生成器进行图像分类

问题描述 投票:0回答:1

我正在使用 keras 的图像数据生成器进行图像分类。

model = Sequential()


model.add(Conv2D(16,(3,3),activation="relu",padding='same', input_shape=(320,175,3)))
# model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
# model.add(Dropout(0.25))

#conv2
model.add(Conv2D(16,(3,3),activation="relu",padding='same'))
# model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2,2)))
# model.add(Dropout(0.25))
    
model.add(Flatten())
 
model.add(Dense(64,activation="relu"))
# model.add(BatchNormalization())
# model.add(Dropout(0.25))

# output layer
model.add(Dense(1, activation='sigmoid'))
adam=keras.optimizers.Adam(learning_rate=0.0001, beta_1=0.9, beta_2=0.999)

model.compile(optimizer='adam' , loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

history=model.fit_generator(generator=train_generator,
                    steps_per_epoch=STEP_SIZE_TRAIN, validation_data=valid_generator,
                    validation_steps=STEP_SIZE_VALID, epochs=5)

当我在第一个时期使用批量大小 = 32 训练 acc 时,达到 99%,但是当我在第一个时期使用批量大小 = 512 训练 acc 时,达到 70%。为什么会发生这种情况?

keras image-processing conv-neural-network image-classification
1个回答
0
投票

较大的批量大小可能会导致较低的准确性,但“大”和“小”与训练数据的大小有关,有时还与模型架构有关。通常有一个最佳的批量大小可供使用。大批量大小会导致更快的训练,但由于过度拟合可能会导致准确性较低,因为训练数据上的“搜索步骤”较少(因此速度会增加)。传统上,每个时期的步骤数是通过训练数据的长度 // 批量大小来计算的,因此,如果批量大小较大,则步骤会更少。

这也意味着您的批量大小与梯度估计器中的方差直接相关,因此较小的批量大小等于较大的方差,而当您增加批量大小时则相反。当然,这意味着批量大小太小可能意味着太大的方差和噪声,因此需要找到最佳的批量数。

如果您感兴趣,在类似的堆栈站点上有一些关于批量大小和深入资源/实验的精彩讨论:https://stats.stackexchange.com/questions/164876/what-is-the-trade-off -训练 a-neu 的批次大小和迭代次数之间

© www.soinside.com 2019 - 2024. All rights reserved.