Я надеюсь, что вы можете помочь мне с моей проблемой!
Я использую tenorflow 2.1 в сочетании с тензорной доской для GridSearch.
Это конфигурация гиперпараметра и для визуализации в тензорной доске:
# Setup for Hyperparameters (tensorboard)
HP_NUM_UNITS_1 = hp.HParam('num_units_1', hp.Discrete([1600]))
HP_ACTIVATION_1 = hp.HParam('activation_1', hp.Discrete(['relu']))
HP_NUM_UNITS_2 = hp.HParam('num_units_2', hp.Discrete([800]))
HP_ACTIVATION_2 = hp.HParam('activation_2', hp.Discrete(['tanh']))
HP_NUM_UNITS_3 = hp.HParam('num_units_3', hp.Discrete([400]))
HP_ACTIVATION_3 = hp.HParam('activation_3', hp.Discrete(['elu']))
for num_seeds in HP_SEEDS.domain.values:
for batch_size in HP_BS_PER_GPU.domain.values:
for num_units_1 in HP_NUM_UNITS_1.domain.values:
for activation_1 in HP_ACTIVATION_1.domain.values:
for num_units_2 in HP_NUM_UNITS_2.domain.values:
for activation_2 in HP_ACTIVATION_2.domain.values:
for num_units_3 in HP_NUM_UNITS_3.domain.values:
for activation_3 in HP_ACTIVATION_3.domain.values:
for l2_reg_term in HP_L2REG.domain.values:
for optimizer in HP_OPTIMIZER.domain.values:
hparams = {
HP_SEEDS: num_seeds,
HP_BS_PER_GPU: batch_size,
HP_NUM_UNITS_1: num_units_1,
HP_ACTIVATION_1: activation_1,
HP_NUM_UNITS_2: num_units_2,
HP_ACTIVATION_2: activation_2,
HP_NUM_UNITS_3: num_units_3,
HP_ACTIVATION_3: activation_3,
HP_NUM_UNITS_4: num_units_4,
HP_ACTIVATION_4: activation_4,
HP_L2REG: l2_reg_term,
HP_OPTIMIZER: optimizer
}
run_name = "log_run-%s" %(session_num)
print('--- Starting trial: %s' % run_name)
# Define model
model = create_model(hparams)
print({h.name: hparams[h] for h in hparams})
run_dir = os.path.join(log_dir,run_name)
run(model,run_dir, hparams, session_num)
session_num += 1
create_model построить модель в соответствии с приведенными выше hparams:
create_model(hparams):
reset_random_seeds(hparams[HP_SEEDS])
layers = [hparams[HP_NUM_UNITS_1],hparams[HP_NUM_UNITS_2],
hparams[HP_NUM_UNITS_3]]
activations = [hparams[HP_ACTIVATION_1], hparams[HP_ACTIVATION_2],
hparams[HP_ACTIVATION_3]]
model = Sequential()
for i, nodes in enumerate(layers):
if i == 0:
model.add(BatchNormalization(axis=1,input_shape=(3200,)))
model.add(Dense(nodes, activation= activations[i],
activity_regularizer= l2(hparams[HP_L2REG])))
else:
model.add(BatchNormalization(axis=1))
model.add(Dense(nodes,activation= activations[i],
activity_regularizer= l2(hparams[HP_L2REG])))
model.add(BatchNormalization(axis=1))
model.add(Dense(3,activation= 'softmax',
activity_regularizer= l2(hparams[HP_L2REG])))
model.compile(optimizer= hparams[HP_OPTIMIZER],
loss= 'categorical_crossentropy', metrics =['accuracy'])
return model
Когда я запускаю свой код только с 2 скрытыми слоями, детерминизм работает нормально:
1. Run and 2. Run:
Epoch 00001: val_accuracy improved from -inf to 0.92257, saving model to E:\user\seed_test\20200410-
140710_checkpoint_test1\checkpoint_run-0\cp.ckpt
383/383 - 11s - loss: 0.2929 - accuracy: 0.8974 - val_loss: 0.2247 - val_accuracy: 0.9226
Когда я запускаю свой код с более чем 2 слоями, например 3 слоями, детерминизм не работает:
1. Run
Epoch 00001: val_accuracy improved from -inf to 0.92308, saving model to E:\user\seed_test\20200410-
141307_checkpoint_test1\checkpoint_run-0\cp.ckpt
383/383 - 12s - loss: 0.2939 - accuracy: 0.8963 - val_loss: 0.2240 - val_accuracy: 0.9231
2. Run
Epoch 00001: val_accuracy improved from -inf to 0.92217, saving model to E:\user\seed_test\20200410-
141352_checkpoint_test1\checkpoint_run-0\cp.ckpt
383/383 - 11s - loss: 0.2939 - accuracy: 0.8963 - val_loss: 0.2239 - val_accuracy: 0.9222
Кто-нибудь знает, почему возникает эта проблема?
Если вам нужна дополнительная информация или фрагменты кода, дайте мне знать.
Спасибо!