>-**🍨本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/2Wc0B5c2SdivAR3WS_g1bA)中的学习记录博客**
>-**🍦 参考文章:[Pytorch实战|第P5周:运动鞋识别](https://www.heywhale.com/mw/project/6352467ca42e79f98f6bbf13)**
>-**🍖 原作者:[K同学啊|接辅导、项目定制](https://mtyjkh.blog.csdn.net/)**
神经网络
、
model = models.Sequential([
layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
layers.Conv2D(16, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), # Convolutional layer 1, 3*3 kernel
layers.AveragePooling2D((2, 2)), # Pooling layer 1, 2*2 sampling
layers.Conv2D(32, (3, 3), activation='relu'), # Convolutional layer 2, 3*3 kernel
layers.AveragePooling2D((2, 2)), # Pooling layer 2, 2*2 sampling
layers.Dropout(0.3),
layers.Conv2D(64, (3, 3), activation='relu'), # Convolutional layer 3, 3*3 kernel
layers.Dropout(0.3),
layers.Flatten(), # Flatten layer, connecting convolutional layers to the fully connected layer
layers.Dense(128, activation='relu'), # Fully connected layer, further feature extraction
layers.Dense(len(class_names)) # Output layer, producing expected results
])
model.summary() # Print network structure
Dropout
在神经网络中,Dropout层有助于防止过拟合,从而提高模型的泛化能力。Dropout是一种正则化技术,其工作原理是在训练过程中随机丢弃(设置为0)一部分神经元。这样可以减少神经元之间的依赖关系,避免过度拟合训练数据。
layers.Dropout(0.4)
表示在训练过程中随机关闭40%的神经元。这会迫使模型在训练时学习到更加稳健和可靠的特征,从而在新数据上表现得更好。注意,Dropout仅在训练期间起作用,在评估和预测时,Dropout层将不起作用。
学习率
学习率(learning rate)是梯度下降优化算法中的一个关键超参数,它决定了模型在训练过程中参数更新的步长。选择合适的学习率对模型的收敛速度和性能至关重要。以下是学习率大与学习率小的优缺点分析:
学习率较大: 优点:
- 加快学习速度:较大的学习率意味着每次参数更新的步长较大,因此网络可能更快地达到最优解。
- 有助于跳出局部最优值:较大的学习率更容易跳过局部最优解,有机会找到全局最优解。
缺点:
- 导致模型训练不收敛:较大的学习率可能导致参数更新过于剧烈,使得模型在最优解附近来回震荡而无法收敛。
- 容易导致模型不精确:使用较大的学习率可能使模型无法充分拟合数据,导致预测结果不够精确。
改进方案:使用学习率衰减策略、自适应学习率方法,如 AdaGrad、RMSprop 或 Adam 等。
学习率较小: 优点:
- 有助于模型收敛、模型细化:较小的学习率允许模型在最优解附近进行更精细的搜索,从而提高模型性能。
- 提高模型精度:较小的学习率可以使模型更好地拟合数据,提高预测结果的准确性。
缺点:
- 很难跳出局部最优值:较小的学习率容易导致模型陷入局部最优解,无法找到全局最优解。
- 收敛缓慢:较小的学习率意味着参数更新步长较小,可能需要更多的迭代次数才能达到最优解。
改进方案:使用动态学习率方法,如学习率衰减策略、自适应学习率方法(如 AdaGrad、RMSprop 或 Adam 等)、或使用学习率热启动策略。
早停与保存最佳模型参数
EarlyStopping()参数说明:
EarlyStopping()
是Keras中的一个回调函数(callback),用于在训练过程中提前停止以防止模型过拟合。通过监控指定的性能指标,当模型在一定数量的连续训练轮次(epochs)中没有明显改进时,EarlyStopping()
将终止训练。这有助于节省计算资源并避免过拟合。
EarlyStopping()
的主要参数如下:
monitor
(字符串):需要监控的性能指标,例如'val_loss'
、'val_accuracy'
等。根据指定的指标,EarlyStopping()
将判断何时停止训练。min_delta
(浮点数):改进阈值,即被认为是性能提升的最小变化。如果在连续的训练轮次中性能指标未达到此阈值,则会触发提前停止。patience
(整数):在停止提升之前,允许模型连续训练的轮次数量。当连续patience
个训练轮次中性能指标未达到min_delta
时,训练将被终止。verbose
(整数):日志显示模式,0表示不显示日志信息,1表示显示日志信息。mode
(字符串):{'auto', 'min', 'max'}
之一。根据monitor
指定的性能指标决定提前停止的条件。如果是'min'
,则当指标不再减小时停止;如果是'max'
,则当指标不再增大时停止;如果是'auto'
,将基于指标的名称自动推断停止条件。baseline
(浮点数):指定一个阈值,当监控指标达到此阈值时,训练将被提前终止。这可以用来设置一个性能指标的目标值。restore_best_weights
(布尔值):是否在训练结束后恢复模型的最佳权重。如果为True
,则在训练结束时,模型的权重将回滚到在验证集上表现最好的那一轮。
最终效果