Я разрабатываю функцию оптимизации гиперпараметров на основе этой модели Луча: https://ray.readthedocs.io/en/latest/auto_examples/plot_hyperparameter.html.
Метод ниже, execute_single_rs , аналогичен define_hyperparameters метод в этом примере, включая вызов метода моего поезда, trainmodel , который следует.
@ray.remote(num_cpus=4)
def perform_single_rs(srch_num, X_train, X_test, y_train, y_test,
model=None, params=None,sample_weights=None, best_model_path=None, data_CNN=None):
print('Search {0:3d}'.format(srch_num))
model = create_model_cnn(params)
best_model, X_train_CNN, X_test_CNN = \
trainmodel(X_train, X_test, y_train, y_test, model=model,params=params,
sample_weights=sample_weights, best_model_path=best_model_path, data_CNN=data_CNN)
best_model = load_model(best_model_path)
results = {'best model': best_model,'params':p,
'X_train_CNN': X_train_CNN, 'X_test_CNN': X_test_CNN}
return results
def trainmodel(x_train, x_test, y_train, y_test,
model=None, params=None, best_model_path=None, sample_weights=None,data_CNN=None):
# Random search code gens params
if params is None:
#TODO remove squaring up of train/test from setmodelparams
x_train_sq,x_test_sq,params = setmodelparams(x_train,x_test)
else:
# RS squares up train/test
x_train_sq = x_train
x_test_sq = x_test
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1,
patience=25, min_delta=0.0001)
# csv_logger = CSVLogger(os.path.join(OUTPUT_PATH, 'log_training_batch.log'), append=True)
rlp = ReduceLROnPlateau(monitor='val_loss', factor=0.02, patience=10, verbose=1, mode='min',
min_delta=0.001, cooldown=1, min_lr=0.0001)
mcp = ModelCheckpoint(str(best_model_path), monitor='val_loss', verbose=0,
save_best_only=True, save_weights_only=False, mode='min', period=1)
y_cv = y_test
history = model.fit(data_CNN['X_train'],
y_train,
epochs=params['epochs'],
verbose=50,
batch_size=params['batch_size'], shuffle=True,
validation_data=(data_CNN['X_cv'], y_cv),
callbacks=[es, mcp, rlp],
sample_weight=sample_weights
)
# load best model for return
return data_CNN['X_train'], data_CNN['X_test']
Однако, когда я вызываю метод, rs_id = perform_single_rs.remote(...
trainmodel выполнен и примерка начинается. Почему я не получаю идентификатор объекта Ray, как ожидается при удаленном вызове?
Большое спасибо.