当前位置: 首页 > news >正文

太原定制网站开发制作小程序推广运营公司

太原定制网站开发制作,小程序推广运营公司,wap手机网站建设方案,保健品网站建设策划书#x1f368; 本文为#x1f517;365天深度学习训练营 中的学习记录博客#x1f356; 原作者#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU#xff08;如果使用的是CPU可以忽略这步#xff09;3.导入数据4.查… 本文为365天深度学习训练营 中的学习记录博客 原作者K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU如果使用的是CPU可以忽略这步3.导入数据4.查看数据5.加载数据6.再次检查数据7.配置数据集8.可视化数据9.构建CNN网络模型10.编译模型11.训练模型12.模型评估 三、知识点详解1.加载预训练的 VGG16 模型2 优化器2.1 梯度下降法 (Gradient Descent)2.1.1 批量梯度下降法 (Batch Gradient Descent, BGD)2.1.2随机梯度下降Stochastic Gradient Descent, SGD 2.2 动量优化法Momentum2.3 自适应学习率优化算法2.2.1 AdaGradAdaptive Gradient2.2.2 Adadelta2.2.3 RMSprop2.2.4 AdamAdaptive Moment Estimation 总结 前言 本文将采用CNN实现好莱坞明星识别并用两种不同的优化器用于训练并进行对比。简单讲述实现代码与执行结果并浅谈涉及知识点。 关键字加载预训练的 VGG16 模型优化器。 一、我的环境 电脑系统Windows 11语言环境python 3.8.6编译器pycharm2020.2.3深度学习环境TensorFlow 2.10.1显卡NVIDIA GeForce RTX 4070 二、代码实现与执行结果 1.引入库 from PIL import Image import numpy as np from pathlib import Path import tensorflow as tf from tensorflow.keras.layers import Dropout, Dense, BatchNormalization from tensorflow.keras.models import Model import matplotlib.pyplot as plt # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 import warnings warnings.filterwarnings(ignore) # 忽略一些warning内容无需打印2.设置GPU如果使用的是CPU可以忽略这步 前期工作-设置GPU如果使用的是CPU可以忽略这步 # 检查GPU是否可用 print(tf.test.is_built_with_cuda()) gpus tf.config.list_physical_devices(GPU) print(gpus) if gpus:gpu0 gpus[0] # 如果有多个GPU仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True) # 设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0], GPU)执行结果 True [PhysicalDevice(name/physical_device:GPU:0, device_typeGPU)]3.导入数据 [好莱坞明星数据]https://pan.baidu.com/share/init?surlC6-9ke_2fPlS2yK_TrNdpQpwdczli) 前期工作-导入数据 data_dir rD:\DeepLearning\data\HollywoodStars data_dir Path(data_dir)4.查看数据 前期工作-查看数据 image_count len(list(data_dir.glob(*/*.jpg))) print(图片总数为, image_count) roses list(data_dir.glob(Jennifer Lawrence/*.jpg)) image Image.open(str(roses[1])) # 查看图像实例的属性 print(image.format, image.size, image.mode) plt.imshow(image) plt.show()执行结果 图片总数为 1800 JPEG (474, 569) RGB5.加载数据 数据预处理-加载数据 batch_size 16 img_height 336 img_width 336关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789train_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsettraining,seed12,image_size(img_height, img_width),batch_sizebatch_size) val_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsetvalidation,seed12,image_size(img_height, img_width),batch_sizebatch_size) class_names train_ds.class_names print(class_names)运行结果 Found 1800 files belonging to 17 classes. Using 1440 files for training. Found 1800 files belonging to 17 classes. Using 360 files for validation. [Angelina Jolie, Brad Pitt, Denzel Washington, Hugh Jackman, Jennifer Lawrence, Johnny Depp, Kate Winslet, Leonardo DiCaprio, Megan Fox, Natalie Portman, Nicole Kidman, Robert Downey Jr, Sandra Bullock, Scarlett Johansson, Tom Cruise, Tom Hanks, Will Smith] 6.再次检查数据 数据预处理-再次检查数据 # Image_batch是形状的张量(16, 336, 336, 3)。这是一批形状336x336x3的16张图片最后一维指的是彩色通道RGB。 # Label_batch是形状16的张量这些标签对应16张图片 for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break运行结果 (16, 336, 336, 3) (16,)7.配置数据集 数据预处理-配置数据集 AUTOTUNE tf.data.AUTOTUNE def train_preprocessing(image, label):return (image / 255.0, label) train_ds (train_ds.cache().shuffle(1000).map(train_preprocessing) # 这里可以设置预处理函数# .batch(batch_size) # 在image_dataset_from_directory处已经设置了batch_size.prefetch(buffer_sizeAUTOTUNE) ) val_ds (val_ds.cache().shuffle(1000).map(train_preprocessing) # 这里可以设置预处理函数# .batch(batch_size) # 在image_dataset_from_directory处已经设置了batch_size.prefetch(buffer_sizeAUTOTUNE) )8.可视化数据 数据预处理-可视化数据 plt.figure(figsize(10, 8)) # 图形的宽为10高为5 plt.suptitle(数据展示, fontsize20) for images, labels in train_ds.take(1):for i in range(15):plt.subplot(3, 5, i 1)plt.xticks([])plt.yticks([])plt.grid(False)# 显示图片plt.imshow(images[i])# 显示标签plt.xlabel(class_names[np.argmax(labels[i])],fontdict{family : Times New Roman, size:20}) plt.show()9.构建CNN网络模型 构建CNN网络 def create_model(optimizeradam):# 加载预训练模型vgg16_base_model tf.keras.applications.vgg16.VGG16(weightsimagenet,include_topFalse,input_shape(img_width, img_height, 3),poolingavg)for layer in vgg16_base_model.layers:layer.trainable FalseX vgg16_base_model.outputX Dense(170, activationrelu)(X)X BatchNormalization()(X)X Dropout(0.5)(X)output Dense(len(class_names), activationsoftmax)(X)vgg16_model Model(inputsvgg16_base_model.input, outputsoutput)vgg16_model.compile(optimizeroptimizer,losssparse_categorical_crossentropy,metrics[accuracy])return vgg16_model model1 create_model(optimizertf.keras.optimizers.Adam()) model2 create_model(optimizertf.keras.optimizers.SGD()) model2.summary()网络结构结果如下 Model: model_1 _________________________________________________________________Layer (type) Output Shape Param # input_2 (InputLayer) [(None, 336, 336, 3)] 0 block1_conv1 (Conv2D) (None, 336, 336, 64) 1792 block1_conv2 (Conv2D) (None, 336, 336, 64) 36928 block1_pool (MaxPooling2D) (None, 168, 168, 64) 0 block2_conv1 (Conv2D) (None, 168, 168, 128) 73856 block2_conv2 (Conv2D) (None, 168, 168, 128) 147584 block2_pool (MaxPooling2D) (None, 84, 84, 128) 0 block3_conv1 (Conv2D) (None, 84, 84, 256) 295168 block3_conv2 (Conv2D) (None, 84, 84, 256) 590080 block3_conv3 (Conv2D) (None, 84, 84, 256) 590080 block3_pool (MaxPooling2D) (None, 42, 42, 256) 0 block4_conv1 (Conv2D) (None, 42, 42, 512) 1180160 block4_conv2 (Conv2D) (None, 42, 42, 512) 2359808 block4_conv3 (Conv2D) (None, 42, 42, 512) 2359808 block4_pool (MaxPooling2D) (None, 21, 21, 512) 0 block5_conv1 (Conv2D) (None, 21, 21, 512) 2359808 block5_conv2 (Conv2D) (None, 21, 21, 512) 2359808 block5_conv3 (Conv2D) (None, 21, 21, 512) 2359808 block5_pool (MaxPooling2D) (None, 10, 10, 512) 0 global_average_pooling2d_1 (None, 512) 0 (GlobalAveragePooling2D) dense_2 (Dense) (None, 170) 87210 batch_normalization_1 (Batc (None, 170) 680 hNormalization) dropout_1 (Dropout) (None, 170) 0 dense_3 (Dense) (None, 17) 2907 Total params: 14,805,485 Trainable params: 90,457 Non-trainable params: 14,715,028 _________________________________________________________________10.编译模型 # 设置初始学习率 initial_learning_rate 1e-4lr_schedule tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate,decay_steps60, # 敲黑板这里是指 steps不是指epochsdecay_rate0.96, # lr经过一次衰减就会变成 decay_rate*lrstaircaseTrue)# 将指数衰减学习率送入优化器 optimizer tf.keras.optimizers.Adam(learning_ratelr_schedule)model.compile(optimizeroptimizer,losstf.keras.losses.CategoricalCrossentropy(from_logitsTrue),metrics[accuracy]) 11.训练模型 训练模型 NO_EPOCHS 50history_model1 model1.fit(train_ds, epochsNO_EPOCHS, verbose1, validation_dataval_ds) history_model2 model2.fit(train_ds, epochsNO_EPOCHS, verbose1, validation_dataval_ds) 训练记录如下 Epoch 1/50 90/90 [] - 13s 99ms/step - loss: 2.7601 - accuracy: 0.1764 - val_loss: 2.7506 - val_accuracy: 0.1250 Epoch 2/50 90/90 [] - 8s 86ms/step - loss: 2.0679 - accuracy: 0.3285 - val_loss: 2.4926 - val_accuracy: 0.2111 Epoch 3/50 90/90 [] - 8s 86ms/step - loss: 1.7437 - accuracy: 0.4410 - val_loss: 2.2004 - val_accuracy: 0.3639 ...... Epoch 49/50 90/90 [] - 8s 86ms/step - loss: 0.1929 - accuracy: 0.9354 - val_loss: 2.8650 - val_accuracy: 0.4972 Epoch 50/50 90/90 [] - 8s 86ms/step - loss: 0.1694 - accuracy: 0.9458 - val_loss: 2.7593 - val_accuracy: 0.4694 Epoch 1/50 90/90 [] - 8s 87ms/step - loss: 3.0367 - accuracy: 0.1090 - val_loss: 2.7868 - val_accuracy: 0.1250 Epoch 2/50 90/90 [] - 8s 86ms/step - loss: 2.5409 - accuracy: 0.1979 - val_loss: 2.6385 - val_accuracy: 0.1056 Epoch 3/50 90/90 [] - 8s 86ms/step - loss: 2.2875 - accuracy: 0.2847 - val_loss: 2.4560 - val_accuracy: 0.2167 ...... 12.模型评估 模型评估 from matplotlib.ticker import MultipleLocatorplt.rcParams[savefig.dpi] 300 # 图片像素 plt.rcParams[figure.dpi] 300 # 分辨率acc1 history_model1.history[accuracy] acc2 history_model2.history[accuracy] val_acc1 history_model1.history[val_accuracy] val_acc2 history_model2.history[val_accuracy]loss1 history_model1.history[loss] loss2 history_model2.history[loss] val_loss1 history_model1.history[val_loss] val_loss2 history_model2.history[val_loss]epochs_range range(len(acc1))plt.figure(figsize(16, 4)) plt.subplot(1, 2, 1)plt.plot(epochs_range, acc1, labelTraining Accuracy-Adam) plt.plot(epochs_range, acc2, labelTraining Accuracy-SGD) plt.plot(epochs_range, val_acc1, labelValidation Accuracy-Adam) plt.plot(epochs_range, val_acc2, labelValidation Accuracy-SGD) plt.legend(loclower right) plt.title(Training and Validation Accuracy) # 设置刻度间隔x轴每1一个刻度 ax plt.gca() ax.xaxis.set_major_locator(MultipleLocator(1))plt.subplot(1, 2, 2) plt.plot(epochs_range, loss1, labelTraining Loss-Adam) plt.plot(epochs_range, loss2, labelTraining Loss-SGD) plt.plot(epochs_range, val_loss1, labelValidation Loss-Adam) plt.plot(epochs_range, val_loss2, labelValidation Loss-SGD) plt.legend(locupper right) plt.title(Training and Validation Loss)# 设置刻度间隔x轴每1一个刻度 ax plt.gca() ax.xaxis.set_major_locator(MultipleLocator(1))plt.show()def test_accuracy_report(model):score model.evaluate(val_ds, verbose0)print(Loss function: %s, accuracy: % score[0], score[1])test_accuracy_report(model1) test_accuracy_report(model2) Loss function: 2.759303092956543, accuracy: 0.4694444537162781 Loss function: 1.3968818187713623, accuracy: 0.5805555582046509 三、知识点详解 1.加载预训练的 VGG16 模型 def create_model(optimizeradam):# 加载预训练模型vgg16_base_model tf.keras.applications.vgg16.VGG16(weightsimagenet,include_topFalse,input_shape(img_width, img_height, 3),poolingavg)for layer in vgg16_base_model.layers:layer.trainable FalseX vgg16_base_model.outputX Dense(170, activationrelu)(X)X BatchNormalization()(X)X Dropout(0.5)(X)output Dense(len(class_names), activationsoftmax)(X)vgg16_model Model(inputsvgg16_base_model.input, outputsoutput)vgg16_model.compile(optimizeroptimizer,losssparse_categorical_crossentropy,metrics[accuracy])return vgg16_modelmodel1 create_model(optimizertf.keras.optimizers.Adam()) model2 create_model(optimizertf.keras.optimizers.SGD()) model2.summary()定义了一个名为 create_model 的函数该函数接受一个参数 optimizer默认为 ‘adam’。函数内部首先使用 tf.keras.applications.vgg16.VGG16 加载了预训练的 VGG16 模型其中 weights ‘imagenet’ 表示使用 ImageNet 数据集的预训练权重include_top False 表示不包含顶层的全连接层input_shape 设置输入图像的形状pooling ‘avg’ 表示使用平均池化。 然后对 VGG16 模型的所有层进行循环遍历将每一层的 trainable 属性设置为 False即冻结预训练参数使它们在训练过程中保持不变。 接下来将 VGG16 模型的输出作为输入并经过一系列的神经网络层进行特征提取和分类。首先是全连接层 Dense(170, activation ‘relu’)然后是批归一化层 BatchNormalization()最后是丢弃层 Dropout(0.5)用于防止过拟合。 最后一层是输出层 Dense(len(class_names), activation ‘softmax’)其中 len(class_names) 是类别的数量根据具体情况进行设置激活函数使用 softmax。 接下来使用 Model 函数创建了一个新的模型 vgg16_model指定了输入和输出。这里的 vgg16_base_model.input 表示 VGG16 模型的输入output 表示上述神经网络层的输出。 然后使用 compile 方法编译了模型指定了优化器、损失函数和评估指标。优化器根据传入的参数进行选择如果没有指定默认为 Adam 优化器。损失函数使用稀疏分类交叉熵评估指标为准确率。 最后函数返回创建的模型。 接下来通过调用 create_model 函数分别创建了两个模型 model1 和 model2分别使用了 Adam 优化器和 SGD 优化器。最后调用 model2.summary() 打印了 model2 的模型摘要信息。 参考链接深度学习-第T11周——优化器对比实验 2 优化器 优化器是一种算法它在模型优化过程中动态地调整梯度的大小和方向使模型能够收敛到更好的位置或者用更快的速度进行收敛。 2.1 梯度下降法 (Gradient Descent) 我们可以把模型的参数空间想象成是一个曲面曲面的高度是整体上模型预测值与真实值的误差。我们的目的就是找到整个曲面的最低点这样我们其实就找到了模型参数的最优点。梯度下降法是最基本的优化算法之一它让参数朝着梯度下降最大的方向去变化。 假设模型参数为 θ \theta θ损失函数为 J ( θ ) J(\theta) J(θ) 损失函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的偏导数也就是梯度为 ∇ t J ( θ ) \nabla_tJ(\theta) ∇t​J(θ) 学习率为 α \alpha α 则使用梯度下降法更新参数的公式为 θ t 1 θ t − α ⋅ ∇ t J ( θ ) \theta_{t1}\theta_t-\alpha\cdot\nabla_tJ(\theta) θt1​θt​−α⋅∇t​J(θ) 梯度下降算法中沿着梯度的方向不断减小模型参数从而最小化损失函数。基本策略可以理解为”在你目光所及的范围内不断寻找最陡最快的路径下山“ 算法缺点 训练速度慢每走一步都要计算调整下一步的方向下山的速度变慢。在应用于大型数据集中每输入一个样本都要更新一次参数且每次迭代都要遍历所有的样本。会使得训练过程及其缓慢需要花费很长时间才能得到收敛解。容易陷入局部最优解由于是在有限视距内寻找下山的方向。当陷入平坦的洼地会误以为到达了山地的最低点从而不会继续往下走。 真正在使用时主要是经过改进的以下三类方法区别在于每次参数更新时计算的样本数据量不同 批量梯度下降法(BGD, Batch Gradient Descent)随机梯度下降法(SGD, Stochastic Gradient Descent)小批量梯度下降法(Mini-batch Gradient Descent) 2.1.1 批量梯度下降法 (Batch Gradient Descent, BGD) 第一种很天然的想法是批量梯度下降法BGD(Batch Gradient Descent)其实就是每次用全量的数据对参数进行梯度下降。 假设训练样本总数为n样本为 {(x1,y1), … (xn, yn)} 模型参数为 θ \theta θ损失函数为 J ( θ ) J(\theta) J(θ) 损失函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的偏导数也就是梯度为 ∇ t J ( θ ) \nabla_tJ(\theta) ∇t​J(θ) 学习率为 α \alpha α 则使用BGD更新参数为 θ t 1 θ t − α t ⋅ ∑ i 1 n ∇ t J i ( θ , x i , y i ) \theta_{t1}\theta_t-\alpha_t\cdot\sum_{i1}^n\nabla_tJ_i(\theta,x^i,y^i) θt1​θt​−αt​⋅i1∑n​∇t​Ji​(θ,xi,yi) 由上式可以看出每进行一次参数更新需要计算整个数据样本集因此导致批量梯度下降法的速度会比较慢尤其是数据集非常大的情况下收敛速度就会非常慢但是由于每次的下降方向为总体平均梯度它可能得到的会是一个全局最优解。 2.1.2随机梯度下降Stochastic Gradient Descent, SGD 随机梯度下降法不像BGD每一次参数更新需要计算整个数据样本集的梯度而是每次参数更新时仅仅选取一个样本(xi, yi)计算其梯度参数更新公式为 θ t 1 θ t − α ⋅ ∇ t J i ( θ , x i , y i ) \theta_{t1}\theta_t-\alpha\cdot\nabla_tJ_i(\theta,x^i,y^i) θt1​θt​−α⋅∇t​Ji​(θ,xi,yi) SGD训练速度很快即使在样本量很大的情况下可能只需要其中一部分样本就能迭代到最优解由于每次迭代并不是都向着整体最优化方向导致梯度下降的波动非常大如下图更容易从一个局部最优跳到另一个局部最优准确度下降。 优点 由于每次迭代只使用了一个样本计算梯度训练速度快包含一定随机性但是从期望来看每次计算的梯度基本是正确的导数的。虽然看起来SGD波动非常大会走很多弯路但是对梯度的要求很低计算梯度快而且对于引入噪声大量的理论和实践工作证明只要噪声不是特别大SGD都能很好地收敛。应用大型数据集时训练速度很快。比如每次从百万数据样本中取几百个数据点算一个SGD梯度更新一下模型参数。相比于标准梯度下降法的遍历全部样本每输入一个样本更新一次参数要快得多 缺点更新频繁带有随机性会造成损失函数在收敛过程中严重震荡。SGD没能单独克服局部最优解的问题主要SGD在随机选择梯度的同时会引入噪声使得权值更新的方向不一定正确次要 2.2 动量优化法Momentum 关于动量 动量优化法引入了物理之中的概念。动量 pmvpmvpmv当一个小球从山顶滚下速度越来越快动量越来越大开始加速梯度下降当跨越了山谷滚到对面的坡上时速度减小动量减小。 带动量的小球不仅可以加速梯度还可以借着积累的动量冲过小的山坡以避免落入局部最优点。 动量优化法Momentum提出的原因 梯度下降法容易被困在局部最小的沟壑处来回震荡可能存在曲面的另一个方向有更小的值有时候梯度下降法收敛速度还是很慢。动量法就是为了解决这两个问题提出的 动量优化法思想 参数更新时在一定程度上保留之前更新的方向同时又利用当前batch的梯度微调最终的更新方向简言之就是通过积累之前的动量来 (previous_sum_of_gradient) 加速当前的梯度。 优缺点分析 优点前后梯度一致的时候能够加速学习前后梯度不一致的时候能够抑制震荡越过局部极小值加速收敛减小震荡缺点多了一个超参数增加了计算量 2.3 自适应学习率优化算法 传统的优化算法要么将学习率设置为常数要么根据训练次数调节学习率。往往忽视了学习率其他变化的可能性。学习率对模型的性能有着显著的影响需要采取一些策略来更新学习率进而提高训练速度与准确率。 使用统一的全局学习率的缺点可能出现的问题 对于某些参数通过算法已经优化到了极小值附近但是有的参数仍然有着很大的梯度。如果学习率太小则梯度很大的参数会有一个很慢的收敛速度 如果学习率太大则已经优化得差不多的参数可能会出现不稳定的情况。 解决方案对每个参与训练的参数设置不同的学习率在整个学习过程中通过一些算法自动适应这些参数的学习率。 如果损失与某一指定参数的偏导的符号相同那么学习率应该增加 如果损失与该参数的偏导的符号不同那么学习率应该减小。 2.2.1 AdaGradAdaptive Gradient Adagrad其实是对学习率进行了一个约束对于经常更新的参数我们已经积累了大量关于它的知识不希望被单个样本影响太大希望学习速率慢一些对于偶尔更新的参数我们了解的信息太少希望能从每个偶然出现的样本稀疏特征的样本身上多学一些即学习速率大一些。该方法中开始使用的二阶动量意味着“自适应学习率”优化算法时代的到来。 AdaGrad 算法独立地适应所有模型参数的学习率缩放每个参数反比于其所有梯度历史平均值总和的平方根。知道这么回事就好基本不用它~ ● 具有损失函数最大梯度的参数相应地有个快速下降的学习率 ● 而具有小梯度的参数在学习率上有相对较小的下降。 优点自适应的学习率无需人工调节 缺点 仍需要手工设置一个全局学习率 η, 如果 η 设置过大的话会使 regularizer 过于敏感对梯度的调节太大中后期分母上梯度累加的平方和会越来越大使得参数更新量趋近于0使得训练提前结束无法学习 2.2.2 Adadelta 由于AdaGrad调整学习率变化过于激进我们考虑一个改变二阶动量计算方法的策略不累积全部历史梯度而只关注过去一段时间窗口的下降梯度即Adadelta只累加固定大小的项并且也不直接存储这些项仅仅是近似计算对应的平均值指数移动平均值这就避免了二阶动量持续累积、导致训练过程提前结束的问题了。 优点 不依赖全局learning rate训练初中期加速效果不错很快 缺点 训练后期反复在局部最小值附近抖动 2.2.3 RMSprop RMSprop 和 Adadelta 都是为了解决 AdaGrad 学习率急剧下降问题的但是RMSProp算法修改了AdaGrad的梯度平方和累加为指数加权的移动平均。 指数加权平均旨在消除梯度下降中的摆动与Momentum的效果一样某一维度的导数比较大则指数加权平均就大某一维度的导数比较小则其指数加权平均就小这样就保证了各维度导数都在一个量级进而减少了摆动。 另外指数衰减平均的方式可以淡化遥远过去的历史对当前步骤参数更新量的影响衰减率表明的是只是最近的梯度平方有意义而很久以前的梯度基本上会被遗忘 优点 RMSprop算是Adagrad的一种发展和Adadelta的变体效果趋于二者之间适合处理非平稳目标(包括季节性和周期性)——对于RNN效果很好 缺点其实RMSprop依然依赖于全局学习率 η 2.2.4 AdamAdaptive Moment Estimation Adam 结合了前面方法的一阶动量和二阶动量是前述方法的集大成者。 优点 Adam梯度经过偏置校正后每一次迭代学习率都有一个固定范围使得参数比较平稳。结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点为不同的参数计算不同的自适应学习率节省了训练集时间、训练成本 缺点 Adam 使用动量的滑动平均可能会随着训练数据变化而抖动比较剧烈在online场景可能波动较大在广告场景往往效果不如 AdaGrad Adam那么棒为什么还对SGD念念不忘 举个栗子。很多年以前摄影离普罗大众非常遥远。十年前傻瓜相机开始风靡游客几乎人手一个。智能手机出现以后摄影更是走进千家万户手机随手一拍前后两千万照亮你的美咦这是什么乱七八糟的。但是专业摄影师还是喜欢用单反孜孜不倦地调光圈、快门、ISO、白平衡……一堆自拍党从不care的名词。技术的进步使得傻瓜式操作就可以得到不错的效果但是在特定的场景下要拍出最好的效果依然需要深入地理解光线、理解结构、理解器材。 更深入的内容可以通过文末的参考文献进入了解。 1TensorFlow2调用 函数原型 keras.optimizers.Adam(lr0.001, beta_10.9, beta_20.999, epsilonNone, decay0.0, amsgradFalse)官网地址https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adam 参数详解 lr: float 0. 学习率。beta_1: float, 0 beta 1. 通常接近于 1。beta_2: float, 0 beta 1. 通常接近于 1。epsilon: float 0. 模糊因子. 若为 None, 默认为 K.epsilon()。decay: float 0. 每次参数更新后学习率衰减值。amsgrad: boolean. 是否应用此算法的 AMSGrad 变种来自论文 “On the Convergence of Adam and Beyond”。 调用示例 # 设置优化器 opt tf.keras.optimizers.Adam(learning_rate0.001, decay0.0)model.compile(optimizeropt,losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue),metrics[accuracy])参考文献 An overview of gradient descent optimization algorithms Adam那么棒为什么还对SGD念念不忘 (2)—— Adam的两宗罪 总结 通过本次的学习了解了预加载模型的用法了解了多种优化器。
文章转载自:
http://www.morning.tsgxz.cn.gov.cn.tsgxz.cn
http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn
http://www.morning.bylzr.cn.gov.cn.bylzr.cn
http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn
http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn
http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn
http://www.morning.gmyhq.cn.gov.cn.gmyhq.cn
http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn
http://www.morning.drbd.cn.gov.cn.drbd.cn
http://www.morning.rjrh.cn.gov.cn.rjrh.cn
http://www.morning.qlckc.cn.gov.cn.qlckc.cn
http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn
http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn
http://www.morning.rfldz.cn.gov.cn.rfldz.cn
http://www.morning.gbljq.cn.gov.cn.gbljq.cn
http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn
http://www.morning.kjrp.cn.gov.cn.kjrp.cn
http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn
http://www.morning.jcrfm.cn.gov.cn.jcrfm.cn
http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn
http://www.morning.fkffr.cn.gov.cn.fkffr.cn
http://www.morning.wffxr.cn.gov.cn.wffxr.cn
http://www.morning.xjkr.cn.gov.cn.xjkr.cn
http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn
http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn
http://www.morning.zdgp.cn.gov.cn.zdgp.cn
http://www.morning.ygth.cn.gov.cn.ygth.cn
http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn
http://www.morning.whclz.cn.gov.cn.whclz.cn
http://www.morning.jppb.cn.gov.cn.jppb.cn
http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn
http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn
http://www.morning.ycmpk.cn.gov.cn.ycmpk.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn
http://www.morning.gglhj.cn.gov.cn.gglhj.cn
http://www.morning.elsemon.com.gov.cn.elsemon.com
http://www.morning.jpydf.cn.gov.cn.jpydf.cn
http://www.morning.hmdn.cn.gov.cn.hmdn.cn
http://www.morning.lbrrn.cn.gov.cn.lbrrn.cn
http://www.morning.jwefry.cn.gov.cn.jwefry.cn
http://www.morning.pumali.com.gov.cn.pumali.com
http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn
http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn
http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn
http://www.morning.lxhny.cn.gov.cn.lxhny.cn
http://www.morning.skdhm.cn.gov.cn.skdhm.cn
http://www.morning.mllmm.cn.gov.cn.mllmm.cn
http://www.morning.nfdty.cn.gov.cn.nfdty.cn
http://www.morning.btqrz.cn.gov.cn.btqrz.cn
http://www.morning.cbchz.cn.gov.cn.cbchz.cn
http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com
http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn
http://www.morning.rbbyd.cn.gov.cn.rbbyd.cn
http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn
http://www.morning.jlxld.cn.gov.cn.jlxld.cn
http://www.morning.qddtd.cn.gov.cn.qddtd.cn
http://www.morning.csnmd.cn.gov.cn.csnmd.cn
http://www.morning.yqfdl.cn.gov.cn.yqfdl.cn
http://www.morning.kstlm.cn.gov.cn.kstlm.cn
http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn
http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn
http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn
http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn
http://www.morning.qkbwd.cn.gov.cn.qkbwd.cn
http://www.morning.hdwjb.cn.gov.cn.hdwjb.cn
http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn
http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn
http://www.morning.dfbeer.com.gov.cn.dfbeer.com
http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn
http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn
http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn
http://www.morning.plcyq.cn.gov.cn.plcyq.cn
http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn
http://www.morning.qddtd.cn.gov.cn.qddtd.cn
http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn
http://www.morning.mdmxf.cn.gov.cn.mdmxf.cn
http://www.morning.fmrd.cn.gov.cn.fmrd.cn
http://www.tj-hxxt.cn/news/245272.html

相关文章:

  • wordpress网站备案号国家为什么把安阳分了
  • 官方网站建设 都来磐石网络百度快照 直接进入网站
  • 门户网站网站建设网站蓝色导航栏代码
  • 备案号被取消 没有重新备案网站会被关闭吗化妆品网站优化
  • 网站商城的建设ui设计难吗
  • iis5建设网站包头哪里做网站
  • 国外门户网站源码模板网站建设公司哪个好
  • 找人做网站都需要提供什么搜索引擎有哪些软件
  • 手机端网站开发书籍软件开发流程图软件
  • 宽带专家网站建站工具
  • 网站前期规划报告杭州游戏软件开发公司
  • 手机网页及网站设计同步上传wordpress
  • 怎样做好网站用户体验app界面模板免费下载
  • 网站备案信息查询系统深圳宝安区是富人区吗
  • 国内免备案网站空间为什么一个人做网站有难度
  • 知名的网站制作公司需要多少钱网站建设与管理总结心得
  • 做网站挂广告怎么仿别人的网站
  • 网站建设 的类型有哪些方面学网页设计网页设计
  • 广东住房城乡建设厅网站网站模板 电器
  • 青海网站制作公司广州网站设计报价
  • 网站开发常用的谷歌插件深圳建站公司价格
  • 唐山哪个公司做网站广州制作软件
  • 威海做网站公司wordpress 修订版本
  • 线上设计师是什么搜索引擎优化的五个方面
  • 汕头网站建设制作厂家包站长ppt网站
  • 网站建设的学习方法南通市城乡和住房建设局网站
  • 快速建设网站外链珠海seo快速排名
  • wordpress局域网建站网站提交收录软件
  • 电子商务网站的主要评价指标有ps培训班要学多久多少钱
  • 男男做的视频网站好如何用dedecms做网站