tensorboard - 将 TensorBoard 与 Keras Tuner 结合使用

标签 tensorboard tensorflow2.0 tf.keras

在使用 Keras Tuner 完成的超参数搜索期间,我遇到了明显的循环依赖,试图将日志数据用于 TensorBoard。 , 对于使用 TF2 构建的模型。后者的典型设置需要在调谐器的 search() 中设置 Tensorboard 回调。方法,包装模型的 fit()方法。

from kerastuner.tuners import RandomSearch
tuner = RandomSearch(build_model, #this method builds the model
             hyperparameters=hp, objective='val_accuracy')
tuner.search(x=train_x, y=train_y,
             validation_data=(val_x, val_y),
             callbacks=[tensorboard_cb]

在实践中,tensorboard_cb回调方法需要设置将记录数据的目录,并且该目录对于每个试验必须是唯一的。一种常用的方法是根据当前时间戳命名目录,代码如下。
log_dir = time.strftime('trial_%Y_%m_%d-%H_%M_%S')
tensorboard_cb = TensorBoard(log_dir)

这在训练具有已知超参数的模型时有效。但是,在进行超参数搜索时,我必须在调用 tuner.search() 之前定义和指定 TensorBoard 回调。 .这是问题:tuner.search()将调用 build_model()多次,每个试验都应该有自己的 TensorBoard 目录。理想定义 log_dir将在 build_model() 内完成但是 Keras Tuner 搜索 API 强制 TensorBoard 在该函数之外定义。

TL;博士: TensorBoard 通过回调获取数据,每次试验需要一个日志目录,但 Keras Tuner 需要在执行之前为整个搜索定义一次回调,而不是每次试验。在这种情况下,如何定义每次试验的唯一目录?

最佳答案

keras 调谐器为每次运行创建一个子目录(语句可能取决于版本)。

我想找到正确的版本组合很重要。

这是它在 jupyterlab 中对我的工作方式。

先决条件:

  • 点数要求
  •     keras-tuner==1.0.1
        tensorboard==2.1.1
        tensorflow==2.1.0
        Keras==2.2.4
        jupyterlab==1.1.4
    

    (2.) jupyterlab 安装、构建和运行 [标准编译参数:生产:最小化]

    这是实际的代码。首先我定义日志文件夹和回调
    # run parameter
    log_dir = "logs/" + datetime.datetime.now().strftime("%m%d-%H%M")
    
    # training meta
    stop_callback = EarlyStopping(
        monitor='loss', patience=1, verbose=0, mode='auto')
    
    hist_callback = tf.keras.callbacks.TensorBoard(
        log_dir=log_dir,
        histogram_freq=1,
        embeddings_freq=1,
        write_graph=True,
        update_freq='batch')
    
    print("log_dir", log_dir)
    

    然后我定义我的超模,我不想透露。然后
    我设置了超参数搜索

    from kerastuner.tuners import Hyperband
    
    hypermodel = get_my_hpyermodel()
    
    tuner = Hyperband(
        hypermodel
        max_epochs=40,
        objective='loss',
        executions_per_trial=5,
        directory=log_dir,
        project_name='test'
    )
    

    然后我执行

    tuner.search(
        train_data,
        labels,
        epochs=10,
        validation_data=(val_data, val_labels),
        callbacks=[hist_callback],
        use_multiprocessing=True)
    
    tuner.search_space_summary()
    

    当带有此代码的笔记本搜索足够的超参数时,我控制了 中的损失另一个笔记本 .由于可以通过 magic function 调用 tf V2 tensorboard

    单元格 1
    import tensorboard
    

    单元格 2
    %load_ext tensorboard
    

    单元格 3
    %tensorboard --logdir 'logs/'
    

    站点说明:由于我在 docker 容器中运行 jupyterlab,因此我必须为 tensorboard 指定适当的地址和端口,并在 dockerfile 中转发它。

    结果对我来说并不能真正预测......我还不明白,当我可以期待张量板中的直方图和分布时。
    有些运行加载时间似乎真的过长...所以有 耐心

    在标量下,我找到如下转弯列表

    “logdir”/“model_has”/execution[iter]/[train/validation]

    例如。
    0101-1010/bb7981e03d05b05106d8a35923353ec46570e4b6/execution0/train
    0101-1010/bb7981e03d05b05106d8a35923353ec46570e4b6/execution0/validation

    关于tensorboard - 将 TensorBoard 与 Keras Tuner 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59294251/

    相关文章:

    python - 如何正确使用 tf.summary.text?

    python - pytorch+tensorboard错误 "AttributeError: ' Tensor'对象没有属性 'items'“

    neural-network - 提高卷积神经网络的准确性

    python - 解释张量板图

    tensorflow - 得到 ValueError : Attempt to convert a value (None) with an unsupported type (<class 'NoneType' >) to a Tensor

    python - 运行 Tf.Keras 模型时内存不足

    tensorflow2.0 - tensorflow 2.0 : frozen graph support

    python - 使用Tensorflow 2.0在MNIST上的自定义神经网络实现?

    python - 使用 Tensorflow 2 的 Keras 功能 API 时传递 `training=true`

    Tensorflow 2.0 Keras 模型子类化