Hparam仪表板抛出错误的超参数调整

时间:2019-08-05 19:17:20

标签: python tensorflow tensorboard hyperparameters

我正在尝试为在喀拉拉邦建立的顺序模型优化最佳条件。

我最近遇到过Hparams仪表板,这看起来是一种非常不错的方法。但是我在实际运行模型进行参数优化的阶段遇到了一个问题!

我正在运行的代码(只是直接从tf页面开始)

https://www.tensorflow.org/tensorboard/r2/hyperparameter_tuning_with_hparams

我已经将tf上Hparams的代码修改为我的顺序模型。出于练习的目的,我删除了一个退出层(因为我的模型中没有任何层)以及优化程序。现在,我想看看更改图层中的节点如何影响我的模型。我的代码如下:


HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))


METRIC_ACCURACY = 'accuracy'

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

def train_test_model(hparams):
  model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(hparams[HP_NUM_UNITS], activation=tf.nn.relu),
    tf.keras.layers.Dense(24, activation=tf.nn.sigmoid),
  ])
  model.compile(
      optimizer='adam',
      loss='binary_crossentropy',
      metrics=['accuracy'],
  )

  model.fit(X_train.values, y_train, epochs=50) 
  _, accuracy = model.evaluate(X_test, y_test)
  return accuracy

def run(run_dir, hparams):
  with tf.summary.create_file_writer(run_dir).as_default():
    hp.hparams(hparams)  # record the values used in this trial
    accuracy = train_test_model(hparams)
    tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)

到目前为止,一切正常!就我的第一次尝试而言,除了删除Dropout和Optimizer以及在代码中应用我自己的模型外,我没有做太多改变。我需要的单元数超过16和32等,但这仅是为了制作管道...

当我运行以下代码来执行优化时,我得到了错误。代码是:

session_num = 0

for num_units in HP_NUM_UNITS.domain.values:
      hparams = { 
          HP_NUM_UNITS: num_units,
          }

      run_name = "run-%d" % session_num
      print('--- Starting trial: %s' % run_name)
      print({h.name: hparams[h] for h in hparams})
      run('logs/hparam_tuning/' + run_name, hparams)
      session_num += 1

这引发了错误!错误是(我不太了解):

ValueError:无法创建由多个图形的元素组成的执行函数。

对于适合模型的第一组单元(16),该错误发生在看起来像是第一次尝试模型时。如果查看回溯,我会收到进度报告:

历次1/50 140/140 [==============================]-0s 3ms /样本-损失:0.6847-准确性:0.5723。 .... 时代50/50 140/140 [==============================]-0s 206us / sample-损耗:0.2661-精度:0.8857

然后这是我得到错误消息(无法创建执行函数...等)

我不确定如何解决此问题,我们将不胜感激!

我非常乐意提供更多详细信息/代码!

谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的错误,并通过将火车和测试值从pandas数据帧转换为numpy数组来解决。因此,只需使用X_train.values等等。

如果这只是告诉我错误发生在哪一行。