在使用 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/