404ic:

Is it possible that the model is just not learning very well and the data isn’t actually normalized but for some coincidental reason the model is just outputting in that range?


That might be the case, although it would be very coincidental.
I get values outside of this range using random inputs, so as you explained, it doesn’t seem to come from the model:
image_size = 64
nc = 1
nz = 100
ngf = 64
ndf = 64
num_epochs = 30
lr = 0.0002
beta1 = 0.5
ngpu = 0

def weights_init(m):
    classname = m.__class__.__name__
    if classname.find('Conv') != -1:
        nn.init.normal_(m.weight.data, 0.0, 0.02)
    elif classname.find('BatchNorm') != -1:
        nn.init.normal_(m.weight.data, 1.0, 0.02)
        nn.init.constant_(m.bias.data, 0)

class Generator(nn.Module):
    def __init__(self, ngpu):
        super(Generator, self).__init__()
        self.ngpu = ngpu
        self.main = nn.Sequential(
            # input is Z, going into a convolution
            nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),
            nn.BatchNorm2d(ngf * 8),
            nn.ReLU(True),
            # state size. (ngf*8) x 4 x 4
            nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),
            nn.BatchNorm2d(ngf * 4),
            nn.ReLU(True),
            # state size. (ngf*4) x 8 x 8
            nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),
            nn.BatchNorm2d(ngf * 2),
            nn.ReLU(True),
            # state size. (ngf*2) x 16 x 16
            nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),
            nn.BatchNorm2d(ngf),
            nn.ReLU(True),
            # state size. (ngf) x 32 x 32
            nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),
            #nn.Tanh() removed because i do not want to rescale lmao
            # state size. (nc) x 64 x 64
        )

    def forward(self, input):
        return self.main(input)

# Create the generator
netG = Generator(0)
netG.apply(weights_init)

fixed_noise = torch.randn(64, nz, 1, 1, device='cpu')
fake = netG(fixed_noise).detach().cpu()
print(fake.min(), fake.max())
> tensor(-1.3334) tensor(1.3301)

Are you getting exactly -1 and 1 as the boundaries?