Deep learning 使用带有自定义丢失函数的tensorboard.plugins.hparams api进行超参数调优

Deep learning 使用带有自定义丢失函数的tensorboard.plugins.hparams api进行超参数调优,deep-learning,customization,hyperparameters,Deep Learning,Customization,Hyperparameters,我正在用自己定制的损失函数(相当长且复杂)构建一个神经网络。我的网络是无监督的,因此我的输入和预期输出是相同的,而且目前我使用的是一个输入(只是尝试优化单个输入的损耗) 我正在尝试使用tensorboard.plugins.hparams api进行超参数调优,但不知道如何在那里合并我的自定义丢失函数。我正试图遵循Tensorflow 2.0上建议的代码 这是该网站的建议: HP\u NUM\u UNITS=HP.HParam('NUM\u UNITS',HP.Discrete([16,32])

我正在用自己定制的损失函数(相当长且复杂)构建一个神经网络。我的网络是无监督的,因此我的输入和预期输出是相同的,而且目前我使用的是一个输入(只是尝试优化单个输入的损耗)

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

这是该网站的建议:

HP\u NUM\u UNITS=HP.HParam('NUM\u 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']))
公制精度=‘精度’
使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
hp.hparams\u配置(
hparams=[HP\u NUM\u单位,HP\u辍学,HP\u优化器],
metrics=[hp.Metric(Metric\u accurity,display\u name='accurity'),
)
我需要改变这一点,因为我不想使用辍学层,所以我可以删除它。在度量精度方面,我不想使用精度,因为它在我的模型中没有用处,而是使用我的自定义损失函数。如果我使用常规贴合模型,它将如下所示:

model.compile(优化器=adam,loss=dl\u tf\u loss,metrics=[dl\u tf\u loss])
因此,我尝试将建议的代码更改为以下代码,但我遇到了一个错误,我想知道应该如何更改它,以满足我的需要。以下是我尝试过的:

HP\u NUM\u UNITS=HP.HParam('NUM\u UNITS',HP.Discrete([16,32]))
HP_OPTIMIZER=HP.HParam('OPTIMIZER',HP.Discrete(['adam','sgd']))
#公制损耗=dl\U tf\U损耗
使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
hp.hparams\u config(hparams=[hp\u NUM\u单位,hp\u优化器],度量=
[hp.Metric(dl_tf_loss,display_name='loss'))
它给了我以下错误:

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
5.
6使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
---->7 hp.hparams\u config(hparams=[hp\u NUM\u UNITS,hp\u OPTIMIZER],metrics=[hp.Metric(dl\u tf\u loss,display\u name='loss'))
8.
3帧
/hparams\u配置中的usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary\u v2.py(hparams,metrics,time\u created\u secs)
127 hparams=hparams,
128个指标=指标,
-->129创建的时间=创建的时间,
130   )
131返回写入摘要(“hparams\u config”,pb)
/hparams\u config\u pb中的usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary\u v2.py(hparams,metrics,time\u created\u secs)
161域。更新参数信息(info)
162 hparam_信息附加(信息)
-->163 metric_infos=[metric.as_proto()表示度量中的度量]
164实验=api_pb2.1实验(
165 hparam_infos=hparam_infos,
/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in(.0)
161域。更新参数信息(info)
162 hparam_信息附加(信息)
-->163 metric_infos=[metric.as_proto()表示度量中的度量]
164实验=api_pb2.1实验(
165 hparam_infos=hparam_infos,
/as_proto(self)中的usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py
532 name=api_pb2.MetricName(
533组=自组,
-->534标记=自身。\u标记,
535         ),
536 display\u name=self.\u display\u name,
TypeError:具有类型函数,但应为:字节,unicode
我还尝试运行以下代码:

使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
hp.hparams\u config(hparams=[hp\u NUM\u单位,hp\u优化器],度量=
[dl_tf_损失])
但出现以下错误:

AttributeError回溯(最近一次调用)
在()
8.
9使用tf.summary.create_file_writer('logs/hparam_tuning')。作为_default():
--->10 hp.hparams\u config(hparams=[hp\u NUM\u UNITS,hp\u OPTIMIZER],metrics=[dl\u tf\u loss])
2帧
/usr/local/lib/python3.6/dist-packages/tensorboard/plugins/hparams/summary_v2.py in(.0)
161域。更新参数信息(info)
162 hparam_信息附加(信息)
-->163 metric_infos=[metric.as_proto()表示度量中的度量]
164实验=api_pb2.1实验(
165 hparam_infos=hparam_infos,
AttributeError:“Function”对象没有“as_proto”属性
非常感谢您的帮助。 提前谢谢!

我想出来了

我改为METRIC_LOSS的最初METRIC_精度显然只是名称,我需要将“tf_dl_LOSS”写成字符串,而不是函数

在调优的后续部分中,我需要编写fit命令,在那里我插入了实际损耗函数,正如我在常规fit函数示例中所示


强烈建议将此作为调整超参数的一种方法。

您可能对此感兴趣。在度量中使用
dl\u tf\u loss
编译模型将浪费时间。可以使用
group
参数让
hp.metric
了解不同目录中的其他记录摘要。

无需担心,图我把它弄出来了。