MCPcopy Create free account
hub / github.com/CrossmodalGroup/LAPS / train

Function train

train.py:159–238  ·  view source on GitHub ↗
(opt, train_loader, model, model_without_ddp, optimizer, epoch)

Source from the content-addressed store, hash-verified

157
158
159def train(opt, train_loader, model, model_without_ddp, optimizer, epoch):
160
161 # switch to train mode
162 model.train()
163
164 logger = logging.getLogger(__name__)
165 batch_time = AverageMeter()
166 data_time = AverageMeter()
167 train_logger = LogCollector()
168
169 if utils.is_main_process() and epoch == 0:
170 logger.info('image encoder trainable parameters: {}M'.format(count_params(model_without_ddp.img_enc)))
171 logger.info('txt encoder trainable parameters: {}M'.format(count_params(model_without_ddp.txt_enc)))
172 logger.info('criterion trainable parameters: {}M'.format(count_params(model_without_ddp.criterion)))
173
174 n_batch = len(train_loader)
175
176 end = time.time()
177
178 for i, train_data in enumerate(train_loader):
179
180 optimizer.zero_grad()
181
182 # warmup_alpha is [0, 1], loss = loss * warmup_alpha
183 warmup_alpha = float(i) / n_batch if epoch == opt.embedding_warmup_epochs else 1.
184
185 # measure data loading time
186 data_time.update(time.time() - end)
187
188 images, captions, lengths, ids, img_ids = train_data
189
190 # to device
191 images = images.cuda(non_blocking=True)
192 captions = captions.cuda(non_blocking=True)
193 lengths = lengths.cuda(non_blocking=True)
194 img_ids = img_ids.cuda(non_blocking=True)
195
196 loss = model(images, captions, lengths, img_ids=img_ids, warmup_alpha=warmup_alpha)
197
198 if torch.isnan(loss) or torch.isinf(loss):
199 loss = torch.zeros([], requires_grad=True, device=images.device)
200
201 loss.backward()
202
203 if opt.grad_clip > 0:
204 clip_grad_norm_(model.parameters(), opt.grad_clip)
205
206 optimizer.step()
207
208 batch_time.update(time.time() - end)
209 end = time.time()
210
211 model_without_ddp.logger = train_logger
212 model_without_ddp.logger.update('Iter', model_without_ddp.Eiters)
213 model_without_ddp.logger.update('lr', optimizer.param_groups[0]['lr'])
214 model_without_ddp.logger.update('Loss', loss.item(), opt.batch_size)
215 model_without_ddp.Eiters += 1
216

Callers 1

mainFunction · 0.85

Calls 7

updateMethod · 0.95
AverageMeterClass · 0.90
LogCollectorClass · 0.90
count_paramsFunction · 0.85
tb_logMethod · 0.80
backwardMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected