tabensemb.model.AbstractNN.test_step_end#
method
- AbstractNN.test_step_end(*args: Any, **kwargs: Any) Tensor | Dict[str, Any] | None#
Use this when testing with DP because
test_step()will operate on only part of the batch. However, this is still optional and only needed for things like softmax or NCE loss.Note
If you later switch to ddp or some other mode, this will still be called so that you don’t have to change your code.
# pseudocode sub_batches = split_batches_for_dp(batch) step_output = [test_step(sub_batch) for sub_batch in sub_batches] test_step_end(step_output)
- Parameters:
step_output¶ – What you return in
test_step()for each batch part.- Returns:
None or anything
# WITHOUT test_step_end # if used in DP, this batch is 1/num_gpus large def test_step(self, batch, batch_idx): # batch is 1/num_gpus big x, y = batch out = self(x) loss = self.softmax(out) self.log("test_loss", loss) # -------------- # with test_step_end to do softmax over the full batch def test_step(self, batch, batch_idx): # batch is 1/num_gpus big x, y = batch out = self.encoder(x) return out def test_step_end(self, output_results): # this out is now the full size of the batch all_test_step_outs = output_results.out loss = nce_loss(all_test_step_outs) self.log("test_loss", loss)
See also
See the Multi GPU Training guide for more details.