deep-learning - 使用具有自定义损失函数的 tensorboard.plugins.hparams api 进行超参数调整

标签 deep-learning customization hyperparameters

我正在构建一个带有我自己的自定义损失函数的神经网络(相当长且复杂)。我的网络是不受监督的,所以我的输入和预期输出是相同的,而且目前我正在使用一个输入(只是试图优化单个输入的损失)。

我正在尝试使用 tensorboard.plugins.hparams api 进行超参数调整,但不知道如何在其中合并我的自定义损失函数。我正在尝试遵循 Tensorflow 2.0 website 上建议的代码.

这是网站的建议:

    HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
    HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
    HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

    METRIC_ACCURACY = 'accuracy'

    with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
      hp.hparams_config(
        hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER],
        metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
          )

我需要更改它,因为我不想使用 dropout 层,所以我可以删除它。就 METRIC_ACCURACY 而言,我不想使用准确性,因为它在我的模型中没有用,而是使用我的自定义损失函数。如果我要做常规合身模型,它会是这样的:

    model.compile(optimizer=adam,loss=dl_tf_loss, metrics=[dl_tf_loss])

因此,我尝试将建议的代码更改为以下代码,但出现错误,我想知道应该如何更改它才能满足我的需要。这是我尝试过的:

    HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
    HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

    #METRIC_LOSS = dl_tf_loss

    with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
      hp.hparams_config(hparams=[HP_NUM_UNITS, HP_OPTIMIZER],metrics= 
       [hp.Metric(dl_tf_loss, display_name='Loss')])

它给我以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-26-27d079c6be49> in <module>()
      5 
      6 with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
----> 7   hp.hparams_config(hparams=[HP_NUM_UNITS, HP_OPTIMIZER],metrics=[hp.Metric(dl_tf_loss, display_name='Loss')])
      8 

3 frames
/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in hparams_config(hparams, metrics, time_created_secs)
    127       hparams=hparams,
    128       metrics=metrics,
--> 129       time_created_secs=time_created_secs,
    130   )
    131   return _write_summary("hparams_config", pb)

/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in hparams_config_pb(hparams, metrics, time_created_secs)
    161       domain.update_hparam_info(info)
    162     hparam_infos.append(info)
--> 163   metric_infos = [metric.as_proto() for metric in metrics]
    164   experiment = api_pb2.Experiment(
    165       hparam_infos=hparam_infos,

/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in <listcomp>(.0)
    161       domain.update_hparam_info(info)
    162     hparam_infos.append(info)
--> 163   metric_infos = [metric.as_proto() for metric in metrics]
    164   experiment = api_pb2.Experiment(
    165       hparam_infos=hparam_infos,

/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in as_proto(self)
    532         name=api_pb2.MetricName(
    533             group=self._group,
--> 534             tag=self._tag,
    535         ),
    536         display_name=self._display_name,

TypeError: <tensorflow.python.eager.def_function.Function object at 0x7f9f3a78e5c0> has type Function, but expected one of: bytes, unicode

我还尝试运行以下代码:

    with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
      hp.hparams_config(hparams=[HP_NUM_UNITS, HP_OPTIMIZER],metrics= 
      [dl_tf_loss])

但出现以下错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-28-6778bdf7f1b1> in <module>()
      8 
      9 with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
---> 10   hp.hparams_config(hparams=[HP_NUM_UNITS, HP_OPTIMIZER],metrics=[dl_tf_loss])

2 frames
/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in <listcomp>(.0)
    161       domain.update_hparam_info(info)
    162     hparam_infos.append(info)
--> 163   metric_infos = [metric.as_proto() for metric in metrics]
    164   experiment = api_pb2.Experiment(
    165       hparam_infos=hparam_infos,

AttributeError: 'Function' object has no attribute 'as_proto'

非常感谢任何帮助。 提前致谢!

最佳答案

我想通了。

我更改为 METRIC_LOSS 的原始 METRIC_ACCURACY 显然只是名称,我需要将 'tf_dl_loss' 写为字符串而不是函数。

在调整的后续部分,无论如何我都需要编写我的拟合命令,在那里我插入了实际的损失函数,如我在常规拟合函数示例中所示。

强烈推荐将此作为调整超参数的方法。

关于deep-learning - 使用具有自定义损失函数的 tensorboard.plugins.hparams api 进行超参数调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852300/

相关文章:

python - 如何在tensorflow中以嵌套方式运行2个 session ?

deep-learning - 在pytorch中使用位置编码

c# - 带有三角形拇指的自定义 WPF slider

android - Osmdroid。 onItemSingleTapUp 不适用于自定义 Drawable

android - Google Maps API map 定制

classification - l1/l2 正则化导致 Vowpal wabbit 中所有特征权重为零是否合理?

python - 使用 python 网格搜索的高斯过程回归超参数优化

python - 使用Tensorflow对图像进行分类时如何获取识别对象的像素矩阵?

python - 训练深度学习模型时出错

Python/GPyOpt : Optimizing only one argument