def batch_train(batch_sz, epoch, X_train_t, Y_train_t, model, opt, cost_fn): train_cost = 0 batch_data_, batch_targets_ = \ batch.get_vars(batch_sz, X_train_t, Y_train_t) size = batch_sz for i in range(0, X_train_t.size(0), batch_sz): # Deal with potentially incomplete (last) batch if i + batch_sz > X_train_t.size(0): size = X_train_t.size(0) - i batch_data_, batch_targets_ = \ batch.get_vars(size, X_train_t, Y_train_t) batch_data_.data[:] = X_train_t[i:i+size] batch_targets_.data[:] = Y_train_t[i:i+size] opt.zero_grad() preds = model(batch_data_) batch_cost = cost_fn(preds, batch_targets_) batch_cost.backward() opt.step() ## Keep running average of loss train_cost += (batch_cost - train_cost) * size / (i + size) print('Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.4f}'.format( epoch, i+size, X_train_t.size(0), float(i+size)/X_train_t.size(0)*100, batch_cost.data[0])) return train_cost
def batch_train(batch_sz, epoch, X_train_t, Y_train_t, Y_train_int_t, model, cost_fn_news, nll, opt, lam): train_cost_agg = 0 train_nll_agg = 0 batch_data_, batch_targets_ = \ batch.get_vars(batch_sz, X_train_t, Y_train_t) _, batch_targets_int_ = \ batch.get_vars_scalar_out(batch_sz, X_train_t, Y_train_int_t) size = batch_sz for i in range(0, X_train_t.size(0), batch_sz): # Deal with potentially incomplete (last) batch if i + batch_sz > X_train_t.size(0): size = X_train_t.size(0) - i batch_data_, batch_targets_ = batch.get_vars( size, X_train_t, Y_train_t) _, batch_targets_int_ = batch.get_vars_scalar_out( size, X_train_t, Y_train_int_t) batch_data_.data[:] = X_train_t[i:i+size] batch_targets_.data[:] = Y_train_t[i:i+size] batch_targets_int_.data[:] = Y_train_int_t[i:i+size] opt.zero_grad() preds = model(batch_data_) train_cost = cost_fn_news(preds, batch_targets_) train_nll = nll(preds, batch_targets_int_) (train_cost + lam * train_nll).backward() opt.step() # Keep running average of losses train_cost_agg += \ (train_cost - train_cost_agg) * batch_sz / (i + batch_sz) train_nll_agg += \ (train_nll - train_nll_agg) * batch_sz / (i + batch_sz) print('Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.4f}'.format( epoch, i+batch_sz, X_train_t.size(0), float(i+batch_sz)/X_train_t.size(0)*100, train_cost.data[0])) return train_cost_agg, train_nll_agg