本文整理汇总了Python中utils.Params方法的典型用法代码示例。如果您正苦于以下问题:Python utils.Params方法的具体用法?Python utils.Params怎么用?Python utils.Params使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类utils
的用法示例。
在下文中一共展示了utils.Params方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: main
# 需要导入模块: import utils [as 别名]
# 或者: from utils import Params [as 别名]
def main():
# Load the 'reference' parameters from parent_dir json file
global param_template, gpu_ids, args, search_params, model_dir
args = parser.parse_args()
model_dir = os.path.join('experiments', args.model_name)
json_file = os.path.join(model_dir, 'params.json')
assert os.path.isfile(json_file), f'No json configuration file found at {args.json}'
param_template = utils.Params(json_file)
gpu_ids = args.gpu_ids
logger.info(f'Running on GPU: {gpu_ids}')
# Perform hypersearch over parameters listed below
search_params = {
'lstm_dropout': np.arange(0, 0.501, 0.1, dtype=np.float32).tolist(),
'lstm_hidden_dim': np.arange(5, 60, 10, dtype=np.int).tolist()
}
keys = sorted(search_params.keys())
search_range = list(product(*[[*range(len(search_params[i]))] for i in keys]))
start_pool(search_range, len(gpu_ids))
示例2: launch_training_job
# 需要导入模块: import utils [as 别名]
# 或者: from utils import Params [as 别名]
def launch_training_job(search_range):
'''Launch training of the model with a set of hyperparameters in parent_dir/job_name
Args:
search_range: one combination of the params to search
'''
search_range = search_range[0]
params = {k: search_params[k][search_range[idx]] for idx, k in enumerate(sorted(search_params.keys()))}
model_param_list = '-'.join('_'.join((k, f'{v:.2f}')) for k, v in params.items())
model_param = copy(param_template)
for k, v in params.items():
setattr(model_param, k, v)
pool_id, job_idx = multiprocessing.Process()._identity
gpu_id = gpu_ids[pool_id - 1]
logger.info(f'Worker {pool_id} running {job_idx} using GPU {gpu_id}')
# Create a new folder in parent_dir with unique_name 'job_name'
model_name = os.path.join(model_dir, model_param_list)
model_input = os.path.join(args.model_name, model_param_list)
if not os.path.exists(model_name):
os.makedirs(model_name)
# Write parameters in json file
json_path = os.path.join(model_name, 'params.json')
model_param.save(json_path)
logger.info(f'Params saved to: {json_path}')
# Launch training with this config
cmd = f'{PYTHON} train.py ' \
f'--model-name={model_input} ' \
f'--dataset={args.dataset} ' \
f'--data-folder={args.data_dir} ' \
f'--save-best '
if args.sampling:
cmd += ' --sampling'
if args.relative_metrics:
cmd += ' --relative-metrics'
logger.info(cmd)
check_call(cmd, shell=True, env={'CUDA_VISIBLE_DEVICES': str(gpu_id),
'OMP_NUM_THREADS': '4'})
示例3: train
# 需要导入模块: import utils [as 别名]
# 或者: from utils import Params [as 别名]
def train(model: nn.Module,
optimizer: optim,
loss_fn,
train_loader: DataLoader,
test_loader: DataLoader,
params: utils.Params,
epoch: int) -> float:
'''Train the model on one epoch by batches.
Args:
model: (torch.nn.Module) the neural network
optimizer: (torch.optim) optimizer for parameters of model
loss_fn: a function that takes outputs and labels per timestep, and then computes the loss for the batch
train_loader: load train data and labels
test_loader: load test data and labels
params: (Params) hyperparameters
epoch: (int) the current training epoch
'''
model.train()
loss_epoch = np.zeros(len(train_loader))
# Train_loader:
# train_batch ([batch_size, train_window, 1+cov_dim]): z_{0:T-1} + x_{1:T}, note that z_0 = 0;
# idx ([batch_size]): one integer denoting the time series id;
# labels_batch ([batch_size, train_window]): z_{1:T}.
for i, (train_batch, idx, labels_batch) in enumerate(tqdm(train_loader)):
optimizer.zero_grad()
batch_size = train_batch.shape[0]
train_batch = train_batch.permute(1, 0, 2).to(torch.float32).to(params.device) # not scaled
labels_batch = labels_batch.permute(1, 0).to(torch.float32).to(params.device) # not scaled
idx = idx.unsqueeze(0).to(params.device)
loss = torch.zeros(1, device=params.device)
hidden = model.init_hidden(batch_size)
cell = model.init_cell(batch_size)
for t in range(params.train_window):
# if z_t is missing, replace it by output mu from the last time step
zero_index = (train_batch[t, :, 0] == 0)
if t > 0 and torch.sum(zero_index) > 0:
train_batch[t, zero_index, 0] = mu[zero_index]
mu, sigma, hidden, cell = model(train_batch[t].unsqueeze_(0).clone(), idx, hidden, cell)
loss += loss_fn(mu, sigma, labels_batch[t])
loss.backward()
optimizer.step()
loss = loss.item() / params.train_window # loss per timestep
loss_epoch[i] = loss
if i % 1000 == 0:
test_metrics = evaluate(model, loss_fn, test_loader, params, epoch, sample=args.sampling)
model.train()
logger.info(f'train_loss: {loss}')
if i == 0:
logger.info(f'train_loss: {loss}')
return loss_epoch
示例4: evaluate
# 需要导入模块: import utils [as 别名]
# 或者: from utils import Params [as 别名]
def evaluate(model, loss_fn, dataloader, metrics, params):
"""Evaluate the model on `num_steps` batches.
Args:
model: (torch.nn.Module) the neural network
loss_fn: a function that takes batch_output and batch_labels and computes the loss for the batch
dataloader: (DataLoader) a torch.utils.data.DataLoader object that fetches data
metrics: (dict) a dictionary of functions that compute a metric using the output and labels of each batch
params: (Params) hyperparameters
num_steps: (int) number of batches to train on, each of size params.batch_size
"""
# set model to evaluation mode
model.eval()
# summary for current eval loop
summ = []
# compute metrics over the dataset
for data_batch, labels_batch in dataloader:
# move to GPU if available
if params.cuda:
data_batch, labels_batch = data_batch.cuda(async=True), labels_batch.cuda(async=True)
# fetch the next evaluation batch
data_batch, labels_batch = Variable(data_batch), Variable(labels_batch)
# compute model output
output_batch = model(data_batch)
loss = loss_fn(output_batch, labels_batch)
# extract data from torch Variable, move to cpu, convert to numpy arrays
output_batch = output_batch.data.cpu().numpy()
labels_batch = labels_batch.data.cpu().numpy()
# compute all metrics on this batch
summary_batch = {metric: metrics[metric](output_batch, labels_batch)
for metric in metrics}
summary_batch['loss'] = loss.data[0]
summ.append(summary_batch)
# compute mean of all metrics in summary
metrics_mean = {metric:np.mean([x[metric] for x in summ]) for metric in summ[0]}
metrics_string = " ; ".join("{}: {:05.3f}".format(k, v) for k, v in metrics_mean.items())
logging.info("- Eval metrics : " + metrics_string)
return metrics_mean