订阅
纠错
加入自媒体

深度学习的学习率调节实践

2020-09-04 09:49
磐创AI
关注

正如我们所期望的,随着学习率的提高,最初的损失逐渐减少,但过了一段时间,学习率太大,导致损失反弹:最佳学习率将略低于损失开始攀升的点(通常比转折点低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。

<上一页  1  2  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

人工智能 猎头职位 更多
扫码关注公众号
OFweek人工智能网
获取更多精彩内容
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号