深度学习的学习率调节实践
正如我们所期望的,随着学习率的提高,最初的损失逐渐减少,但过了一段时间,学习率太大,导致损失反弹:最佳学习率将略低于损失开始攀升的点(通常比转折点低10倍左右)。我们现在可以重新初始化我们的模型,并使用良好的学习率对其进行正常训练。还有更多的学习率技巧,包括创建学习进度表,我希望在以后的调查中介绍,但对如何手动选择好的学习率有一个直观的理解同样重要。我们的损失在3e-1左右开始反弹,所以让我们尝试使用2e-1作为我们的学习率:keras.backend.clear_session()np.random.seed(42)tf.random.set_seed(42)model = keras.models.Sequential([ keras.layers.Flatten(input_shape=[28, 28]), keras.layers.Dense(300, activation="relu"), keras.layers.Dense(100, activation="relu"), keras.layers.Dense(10, activation="softmax")])model.compile(loss="sparse_categorical_crossentropy", optimizer=keras.optimizers.SGD(lr=2e-1), metrics=["accuracy"])使用TensorBoard进行可视化TensorBoard是一个很好的交互式可视化工具,你可以使用它查看训练期间的学习曲线、比较学习曲线、可视化计算图、分析训练统计数据、查看模型生成的图像,可视化复杂的多维数据投影到三维和自动聚类,等等!这个工具是在安装TensorFlow时自动安装的,所以你应该已经安装了。让我们首先定义将用于TensorBoard日志的根日志目录,再加上一个小函数,该函数将根据当前时间生成一个子目录路径,以便每次运行时它都是不同的。你可能需要在日志目录名称中包含额外的信息,例如正在测试的超参数值,以便更容易地了解你在TensorBoard中查看的内容:root_logdir = os.path.join(os.curdir, "my_logs")
def get_run_logdir(): import time run_id = time.strftime("run_%Y_%m_%d-%H_%M_%S") return os.path.join(root_logdir, run_id)
run_logdir = get_run_logdir() # 例如, './my_logs/run_2020_07_31-15_15_22'Keras api提供了一个TensorBoard()回调函数。TensorBoard()回调函数负责创建日志目录,并在训练时创建事件文件和编写摘要(摘要是一种二进制数据记录,用于创建可视化TensorBoard)。每次运行有一个目录,每个目录包含一个子目录,分别用于记录训练日志和验证日志,两者都包含事件文件,但训练日志也包含分析跟踪:这使TensorBoard能够准确地显示模型在模型的每个部分(跨越所有设备)上花费了多少时间,这对于查找性能瓶颈非常有用。early_stopping_cb = keras.callbacks.EarlyStopping(patience=20)checkpoint_cb = keras.callbacks.ModelCheckpoint("my_fashion_mnist_model.h5", save_best_only=True)tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)
history = model.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid), callbacks=[early_stopping_cb, checkpoint_cb, tensorboard_cb])接下来,我们需要启动TensorBoard服务器。我们可以通过运行以下命令在Jupyter中直接执行此操作。第一行加载TensorBoard扩展,第二行启动端口6004上的TensorBoard服务器,并连接到它:%load_ext tensorboard %tensorboard — logdir=./my_logs — port=6004现在你应该可以看到TensorBoard的web界面。单击“scaler”选项卡以查看学习曲线。在左下角,选择要可视化的日志(例如,第一次运行的训练日志),然后单击epoch_loss scaler。请注意,在我们的训练过程中,训练损失下降得很顺利。
你还可以可视化整个图形、学习的权重(投影到3D)或分析轨迹。TensorBoard()回调函数也有记录额外数据的选项,例如NLP数据集的嵌入。这实际上是一个非常有用的可视化工具。结论在这里我们得到了88%的准确率,这是我们可以达到的最好的深度MLP。如果我们想进一步提高性能,我们可以尝试卷积神经网络(CNN),它对图像数据非常有效。
就我们的目的而言,这就足够了。我们学会了如何:使用Keras的Sequential API构建深度mlp。通过按指数增长学习率,绘制损失图,并找到损失重新出现的点,来找到最佳学习率。构建深度学习模型时的最佳实践,包括使用回调和使用TensorBoard可视化学习曲线。如果你想在这里看到ppt或jupyterNotebook中完整的代码和说明,请随时查看Github存储库:https://github.com/lukenew2/learning_rates_and_best_practices。
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论