你好,我是kk~
百度的面试大家感觉怎么样,我记得当时,就是很紧凑,一环扣一环,层层深入。
今天看到这个同学,面试45分钟,先自我介绍,然后问问题25分钟,算法题2道、20分钟。
机器学习方面,大概问了三个问题:
CNN神经网终如何防止过拟合?
通过调整损失函数防止过拟合,L1、L2正则能防止过拟合吗?
L1、L2正则如何防止过拟合?
可能,还是由于代码的熟练程度以及算法底层原理的原因,没有通过面试。
趁这个机会,咱们把他的第一个问题,在这里和大家好好说说。
感兴趣的可以看下去,我会提供完整的原理和代码。
问题:CNN神经网终如何防止过拟合?
关于CNN中如何防止过拟合,尤其是在使用卷积神经网络(CNN)等复杂模型时。过拟合发生在模型在训练数据上表现很好,但在新数据上表现较差的情况。
在这种情况下,为了防止过拟合,我们可以采取以下方法,可以参考:
1. 数据扩充
数据扩充是通过对训练数据进行随机变换来增加样本数量,从而降低模型对特定样本的过度依赖。在图像分类任务中,可以使用图像旋转、翻转、缩放等操作来扩充数据。
from tensorflow.keras.preprocessing.image import ImageDataGenerator# 创建数据扩充生成器datagen = ImageDataGenerator( 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')# 使用生成器对图像进行数据扩充augmented_image = datagen.random_transform(original_image)
2. Dropout
Dropout是一种在训练过程中随机关闭一些神经元的技术,以减少模型对某些特定神经元的过度依赖。在CNN中,可以在全连接层和卷积层之间添加Dropout层。
from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropoutmodel = Sequential()model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, 3)))model.add(MaxPooling2D((2, 2)))model.add(Conv2D(64, (3, 3), activation='relu'))model.add(MaxPooling2D((2, 2)))model.add(Conv2D(128, (3, 3), activation='relu'))model.add(MaxPooling2D((2, 2)))model.add(Flatten())model.add(Dense(256, activation='relu'))model.add(Dropout(0.5)) # 添加Dropout层model.add(Dense(num_classes, activation='softmax'))
3. 权重正则化
通过向损失函数添加权重惩罚项,可以限制模型的参数,防止其过度拟合训练数据。
from tensorflow.keras import regularizersmodel.add(Dense(256, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
4. 提前停止(Early Stopping)
使用提前停止机制,监控验证集上的性能,当性能不再提高时停止训练,以防止过拟合。
from tensorflow.keras.callbacks import EarlyStoppingearly_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=100, callbacks=[early_stopping])
以上是一些最常见的防止过拟合的方法。大家可以根据具体情况选择其中的一些或结合使用,以提高模型的泛化能力。
除了以上核心点,如果再次面试遇到了,可以结合实际项目再深入聊聊~
好了,今天的内容先这样,继续想看解决什么问题,评论区留言~
都到这里了,点赞~