wis*_*ame 7 tensorboard tf.keras tensorflow2.0
对于使用TF2 构建的模型,在使用 Keras Tuner完成的超参数搜索期间,我遇到了明显的循环依赖,试图将日志数据用于 TensorBoard 。后者的典型设置需要在调谐器的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]
Run Code Online (Sandbox Code Playgroud)
实际上,tensorboard_cb回调方法需要设置将记录数据的目录,并且该目录对于每个试验必须是唯一的。一种常用的方法是根据当前时间戳命名目录,代码如下。
log_dir = time.strftime('trial_%Y_%m_%d-%H_%M_%S')
tensorboard_cb = TensorBoard(log_dir)
Run Code Online (Sandbox Code Playgroud)
这在训练具有已知超参数的模型时有效。但是,在进行超参数搜索时,我必须在调用之前定义和指定 TensorBoard 回调tuner.search()。这就是问题所在:tuner.search()将调用build_model()多次,并且每个试验都应该有自己的 TensorBoard 目录。理想情况下,定义log_dir将在内部完成,build_model()但 Keras Tuner 搜索 API 强制在该函数之外定义 TensorBoard。
TL;DR: 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
Run Code Online (Sandbox Code Playgroud)
(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)
Run Code Online (Sandbox Code Playgroud)
然后我定义我的超模型,我不想透露。之后我设置了超参数搜索
keras-tuner==1.0.1
tensorboard==2.1.1
tensorflow==2.1.0
Keras==2.2.4
jupyterlab==1.1.4
Run Code Online (Sandbox Code Playgroud)
然后我执行
# 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)
Run Code Online (Sandbox Code Playgroud)
当使用此代码的笔记本搜索足够的超参数时,我控制另一个笔记本中的损失。由于 tf V2 Tensorboard 可以通过魔术函数调用
细胞1
import tensorboard
Run Code Online (Sandbox Code Playgroud)
细胞2
%load_ext tensorboard
Run Code Online (Sandbox Code Playgroud)
细胞 3
%tensorboard --logdir 'logs/'
Run Code Online (Sandbox Code Playgroud)
Sitenote:由于我在 docker 容器中运行 jupyterlab,因此我必须为张量板指定适当的地址和端口,并在 dockerfile 中转发它。
结果对我来说并不能真正预测......我还不明白,什么时候我可以期待张量板上的直方图和分布。有些运行加载时间似乎真的太长了......所以要有耐心
在标量下,我找到了如下匝数列表
“logdir”/“model_has”/执行[iter]/[训练/验证]
例如 0101-1010/bb7981e03d05b05106d8a35923353ec46570e4b6/execution0/train 0101-1010/bb7981e03d05b05106d8a35923353ec46570e4b6/execution0/validation
| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |