How can I implement this snippet from keras that is used to generate image-morphs from a latent vector z by a VAE? (the main article is here 5):
# display a 2D manifold of the digits
n = 15  # figure with 15x15 digits
digit_size = 28

# linearly spaced coordinates on the unit square were transformed
# through the inverse CDF (ppf) of the Gaussian to produce values
# of the latent variables z, since the prior of the latent space
# is Gaussian

z1 = norm.ppf(np.linspace(0.01, 0.99, n))
z2 = norm.ppf(np.linspace(0.01, 0.99, n))
z_grid = np.dstack(np.meshgrid(z1, z2))

x_pred_grid = decoder.predict(z_grid.reshape(n*n, latent_dim)) \
                     .reshape(n, n, digit_size, digit_size)

plt.figure(figsize=(10, 10))
plt.imshow(np.block(list(map(list, x_pred_grid))), cmap='gray')
plt.show()

I came up with the following snippet, but the outcome is different!
n = 10  # figure with 10x10 digits
digit_size = 28

# linearly spaced coordinates on the unit square were transformed
# through the inverse CDF (ppf) of the Gaussian to produce values
# of the latent variables z, since the prior of the latent space
# is Gaussian

z1 = torch.linspace(0.01, 0.99, n)
z2 = torch.linspace(0.01, 0.99, n)

z_grid = np.dstack(np.meshgrid(z1, z2))
z_grid = torch.from_numpy(z_grid).to(device)
z_grid = z_grid.reshape(-1, embeddingsize)

x_pred_grid = model.decoder(z_grid)
x_pred_grid= x_pred_grid.cpu().detach().numpy().reshape(-1, 1, 28, 28).transpose(0,2,3,1)

plt.figure(figsize=(10, 10))
plt.imshow(np.block(list(map(list, x_pred_grid))), cmap='gray')
plt.show()

The problem that I have is  that, first I dont know what the counter part for norm.ppf in Pytorch is, so I just ignored it for now. second, the way the line :
x_pred_grid = decoder.predict(z_grid.reshape(n*n, latent_dim)) \
                     .reshape(n, n, digit_size, digit_size)

reshapes the input is impossible for me! he is feeding the (nxn,latent_dim), which for n=10, and latent_dim =10, is (100,10) .
However, when I reshape like(nxn, latent_dim) I get the error :

RuntimeError : shape ‘[100, 10]’ is invalid for input of size 200

So I had to reshape like (-1, embeddingsize) and this I guess is why my output is different .
for the record the keras output is like this :
                    
            
          


and mine is like this :

vs.png95×771 16.1 KB

So how can I closely replicate this keras code in Pytorch? where am I going off road?
Thank you all in advance