tensorflow тензорная доска hparams

avatar
Hamza Shamaseen
8 августа 2021 в 15:40
230
1
0
import tensorflow as tf
from tensorboard.plugins.hparams import api as hp
####### load the model and data here

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([32,64,128,256, 512]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.9))
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['Nadam','SGD','RMSprop','adam','Adagrad']))
HP_L2 = hp.HParam('l2 regularizer', hp.RealInterval(.00001,.01))
HP_LeakyReLU=hp.HParam('alpha', hp.RealInterval(0.1, 0.9))
METRIC_ACCURACY = 'accuracy'

with tf.summary.create_file_writer('raw-img/log/hparam_tuning/').as_default():
  hp.hparams_config(
    hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER,HP_L2,HP_LeakyReLU],
    metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
  )
def train_test_model(hparams):
  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(hparams[HP_NUM_UNITS], kernel_regularizer=tf.keras.regularizers.l2(0.001)),
    tf.keras.layers.LeakyReLU(hparams[HP_LeakyReLU]),
    tf.keras.layers.Dropout(hparams[HP_DROPOUT]),
    tf.keras.layers.Dense(10, activation='softmax'),
  ])
  model.compile(
      optimizer=hparams[HP_OPTIMIZER],
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],
  )

  model.fit(x_train, y_train, epochs=2)
  _, 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=2)
session_num = 0

for num_units in HP_NUM_UNITS.domain.values:
  for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):
    for l2 in (HP_L2.domain.min_value, HP_L2.domain.max_value):
        for alpha in (HP_LeakyReLU.domain.min_value, HP_LeakyReLU.domain.max_value):
             for optimizer in HP_OPTIMIZER.domain.values:
                    hparams = {
                        HP_NUM_UNITS: num_units,
                        HP_DROPOUT: dropout_rate,
                        HP_L2: l2,
                        HP_LeakyReLU:alpha,
                        HP_OPTIMIZER: optimizer,
                    }
                    run_name = "run-%d" % session_num
                    print('--- Starting trial: %s' % run_name)
                    print({h.name: hparams[h] for h in hparams})
                    run('raw-img/log/hparam_tuning/' + run_name, hparams)
                    session_num += 1

               

Я пытался использовать hparams в TF. Я установил dropout, l2 и OPTIMIZER.

Мне нужно установить значение для learning_rate и проверить его. Что мне нужно сделать, чтобы установить learning_rate как dropout и l2 и проверить это?

Я пытался сделать это:

model.compile(
      optimizer=hparams[HP_OPTIMIZER](lr=0.001),
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],

но это не работает. Я хочу выбрать learning_rate другое значение learning_rate как (dropout, l2)

Источник

Ответы (1)

avatar
tobiasweede
9 октября 2021 в 18:59
0

Вы хотите выделить используемый оптимизатор в отдельную переменную:

if hparams[HP_OPTIMIZER] == "SGD":
    optimizer = tf.keras.optimizers.SGD(learning_rate=float(hparams[HP_LR]))
  elif hparams[HP_OPTIMIZER] == "adam":
    optimizer = tf.keras.optimizers.Adam(learning_rate=float(hparams[HP_LR]))
  else:
    raise ValueError("unexpected optimizer name: %r" % hparams[HP_OPTIMIZER])
  model.compile(
      optimizer=optimizer,
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],
  )

Я нашел решение здесь.