Tensorflow使用GPU加速训练且自动分配内存
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
Pytorch使用GPU加速训练
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
Dropout
Dropout是一种随机断开神经元的技术,其具体内容前文已有介绍。Dropout控制过拟合的原理有两点。第一是在神经网络的局部构造集成学习模型,在处理测试集样本时,网络作出的推断实际上是不同神经元断开时的子网络所做出推断的平均。集成学习模型,如随机森林,梯度提升树等在控制过拟合上往往效果明显。
第二是减少神经元之间的耦合,由于Dropout每次断开的神经元都不相同,这就阻止了神经元耦合起来提取同一种特征的可能性,使得网络在缺失一些信息的情况下仍然能够做出正确推断。
学习率下降方式
指数衰减、固定步长的衰减、多步长衰、余弦退火衰减。
应该选择哪一个优化器
RMSprop,Adadelta和Adam被认为是自适应优化算法,因为它们会自动更新学习率。 使用SGD时,您必须手动选择学习率和动量参数,通常会随着时间的推移而降低学习率。
在实践中,自适应优化器倾向于比SGD更快地收敛, 然而,他们的最终表现通常稍差。 SGD通常会达到更好的minimum,从而获得更好的最终准确性。但这可能需要比某些优化程序长得多的时间。 它的性能也更依赖于强大的初始化和学习率衰减时间表,这在实践中可能非常困难。
因此,如果你需要一个优化器来快速得到结果,或者测试一个新的技术。 我发现Adam
很实用,因为它对学习率并不是很敏感。 如果您想要获得绝对最佳的表现,请使用SGD + Momentum,并调整学习率,衰减和动量值来使性能最优化。
为什么要shuffle?
就好像温室的花朵和野花一样,训练神经网络的本质是让网络从不同的数据中捕捉到相同的特征,如果一系列图片都是同一种的数据,那么就好像温室的花朵一样,经不起复杂环境的考验,直接表现就是:过拟合。
Anaconda出现有关“--user”的错误
解决办法:
简而言之:只需在安装的包后面加上 --user
Ranger完美优化
Ranger 优化器是一个易于使用和高效的单一代码库(加载/保存和一个循环处理的所有参数的更新),集成到了 FastAI 中,Ranger 的源代码你可以直接拿来用