Try replacing final ReLU activation (in decoder) with softplus.
Place a breakpoint at F.poisson_nll_loss line and check if network output ranges are sensible.
Use torch.autograd.set_detect_anomaly(True) to find where NaNs appear.