{
  "source_file": "0930",
  "source_platform": "Dev.to",
  "author": "Mitansh Gor",
  "title_listed": "GEN-AI-3 : VAE",
  "keywords": "",
  "domain": "大模型算法",
  "content_type": "技术教程",
  "is_paid_flag": "否",
  "url": "https://dev.to/mitanshgor/gen-ai-5-wgan-and-wgan-gp-2245",
  "publish_date": "2025-04-20",
  "corpus_stage": "",
  "notes": "",
  "id": "1c4e84fa3734",
  "collected_at": "2026-10-02T13:53:20",
  "title": "GEN-AI-3 : VAE - DEV Community",
  "body_markdown": "So far, we’ve seen how Autoencoders (AEs) can take data—like images, audio, or text—and compress it into a lower-dimensional space, only to reconstruct it again like a digital magician pulling a rabbit out of a hat. Pretty neat, right?\nBut there’s a catch: while AEs are great at learning compact representations, they’re not exactly dreamers. Their latent space—the core of their compressed understanding—isn’t built for imagination. Try sampling from it randomly, and you’re more likely to get noise than meaningful data.\nNow, what if we wanted a model that not only compresses data but can also generate new, meaningful samples that look like they came from the original dataset? A model that understands probability, uncertainty, and can dream up new content with finesse?\n🎉 Enter the Variational Autoencoder (VAE).\nIn this post, we’re going to unpack how VAEs work, why they’re a major leap forward from traditional autoencoders, and how they lay the groundwork for some of the most exciting generative models in AI today.\nLet’s dive in.\nThe Problem with Regular Autoencoders 🧩\nTraditional autoencoders compress data by learning a direct mapping from input to a latent vector, and then decompress it using a decoder. While effective for feature learning, they suffer from:\nDisorganized Latent Space: Nearby latent points don’t necessarily produce similar outputs.\nPoor Generative Ability: Sampling randomly from the latent space usually results in noisy, incoherent outputs.\nNo Uncertainty Modeling: The model doesn't capture how confident it is in the latent representation.\nWe needed structure, smoothness, and the ability to reason probabilistically.\nVariational Autoencoders\nVAEs solve these issues by introducing two key ideas:\nInjecting randomness into the encoding process.\nImposing constraints on the distribution of the latent space.\nInstead of encoding an input to a fixed point, the VAE encodes it to a\nprobability distribution—specifically\n, a multivariate normal distribution centered at a point in the latent space.\nOr in other words,\nInstead of encoding input into a fixed latent vector, it encodes it into a\ndistribution\n(usually Gaussian), from which it\nsamples\n.\nBy doing so, it not only compresses data, but VAEs\nlearn to imagine variations\n.\n🎯 Constraints on the latent space\nTo bring structure to the latent space, we constrain how encodings are distributed:\n🌀 Centering: Each encoded distribution should be centered as close to the origin (0, 0, ..., 0) as possible.\n📏 Unit Variance: The spread (standard deviation) of each distribution should be close to 1.\nThe further the encoder deviates from these goals, the higher the loss during training.\nWhy? This forces all encoded samples to live near the same area in latent space, enabling smooth interpolation and consistent generation.\nChanges in VAE Encoder\nThe encoder no longer outputs just a point, but rather, it parameterizes a distribution from which we can sample.\nx → (μ, σ) → z ~ N(μ, σ²)\nWe do this because we want to generate new data by sampling from a continuous, meaningful latent space.\nz_mean (μ): The center of the distribution where we want our encoding to be.\nz_log_var (log(σ²)): The (log of) the variance, controlling the spread of that distribution.\nTogether, they define a normal distribution, from which we will later sample to get a latent variable z for decoding.\nNow the question is why log(σ²) and not just σ² ?\nThere are two  major reasons: positivity constraint, numerical stability\nVariance Must Be Positive: If we try to output σ directly from a neural network, we need to ensure that the network only produces positive values. But neural nets naturally output values from (−∞,∞). Hence, log(σ²) guarantees that σ>0, always.\nWe work in the log domain, where multiplications become additions, and exponentials become linear. It avoids premature underflow for tiny variances or instability from tiny gradients when optimizing \nσ directly.\nImagine we want to allow the encoder to learn variances from 0.0001 to 1000:\nIf we output σ directly, the network must learn to span that huge dynamic range. But if we output log(σ²), the values range from about:\nlog(0.0001)=−9.2\nto\nlog(1000)=6.9\n.\nA much more manageable range!\nBut wait on!!\nThere is one problem.\nLet's go through it using the example\nLet’s imagine the encoder outputs:\nμ=0.5\nσ=1.0\nIf we directly sample\nz = np.random.normal(mu, sigma)\nThis operation:\nPicks a random number (say 0.23 or 1.42) with no guarantee\nThere's no way to know how the output Z would change if μ or\nσ changed — because the randomness hides the function's slope\nAnd without a gradient, the network can’t learn.\nHow can we deal with it?\nReparameterization Trick\nHere’s the twist:\nInstead of sampling like this:\nz∼N(μ,σ2)\nWe reparameterize it as:\nz = μ+ σ⋅ε where ε∼N(0,1)\nHere :\nε = Random noise from a fixed distribution\nμ, σ = Output from the encoder (learnable)\nz = Latent vector to feed into the decoder\nWhy this works:\nε is independent of the network, so its randomness doesn’t interfere with gradient flow.\nμ and σ are now involved in a deterministic operation (addition and multiplication), so gradients can be calculated\nNow, you can compute:\n∂z/∂μ = 1\n∂z/∂σ = ε\nBackpropagation is happy again. 🎉\nThis tiny trick makes backpropagation work through the stochastic layer. Without it, training would collapse.\nChanges in VAE Decoder wrt AE\nThe decoder no longer sees a fixed vector in the latent space.\nInstead, it gets:\nz=μ+σ⋅ε\nThe decoder must be able to take any nearby sample around μ and still reconstruct a very similar output.\nVAE Loss Function: More Than Just Reconstruction\nWe used reconstruction loss for AutoEncoders. We cannot use just the reconstruction loss anymore.  We’re now dealing with probability distributions, and we need to keep the latent distributions close to a standard normal (N(0,1)).\nSo we add a Kullback–Leibler (KL) divergence term:\nLoss = ReconstructionLoss + β∗KLDivergence\nKL measures how much our learned distribution (μ, σ²) deviates from the standard normal. A higher KL means our encoding is straying too far.\nThink of it like this:\nReconstruction loss: \"How well did we recreate the input?\"\nKL divergence: \"How wild is our latent distribution? Should we calm it down?\"\nWhat's the use case of the β Parameter?\nThe β coefficient balances reconstruction and regularization.\nIf\nβ is too small\n, the KL divergence is ignored. The latent space becomes disorganized, similar to a vanilla AE. Good reconstructions, bad generation.\nIf\nβ is too large\n, the model prioritizes matching N(0,1) over reconstruction. All samples start looking the same—blurry outputs, poor expressiveness.\n✅ Sweet spot: When β is balanced, we get coherent generation and meaningful reconstructions.\n🧱 Disadvantages of VAEs\nTends to generate\nblurry images\nKL term is\ntricky to balance\nwith reconstruction loss\nNot ideal for high-resolution data\n(GANs often outperform here)\nTL;DR: VAEs are smarter but also harder to tame.\n🧭 Wrap-up: When to Use What and Why It All Matters\nUse\nAutoencoders\nwhen you need compression, denoising, or anomaly detection.\nUse\nVAEs\nwhen you need controlled generation, diversity, and smooth interpolation.\nUse\nGANs\nwhen you need photo-realism.\nThe future of generative models lies in\nhybrids\n— combining VAEs, GANs, and Diffusion models.",
  "metadata": {
    "title": "GEN-AI-3 : VAE - DEV Community",
    "description": "So far, we’ve seen how Autoencoders (AEs) can take data—like images, audio, or text—and compress it... Tagged with deeplearning, vae, autoencoder, generativeai.",
    "keywords": "deeplearning, vae, autoencoder, generativeai, software, coding, development, engineering, inclusive, community",
    "author": null,
    "og:type": "article",
    "og:url": "https://dev.to/mitanshgor/gen-ai-5-wgan-and-wgan-gp-2245",
    "og:title": "GEN-AI-3 : VAE",
    "og:description": "So far, we’ve seen how Autoencoders (AEs) can take data—like images, audio, or text—and compress it...",
    "og:site_name": "DEV Community",
    "og:image": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wxg4stntuvzfuelfl2f.jpeg",
    "twitter:site": "@thepracticaldev",
    "twitter:creator": "@",
    "twitter:title": "GEN-AI-3 : VAE",
    "twitter:description": "So far, we’ve seen how Autoencoders (AEs) can take data—like images, audio, or text—and compress it...",
    "twitter:card": "summary_large_image",
    "twitter:widgets:new-embed-design": "on",
    "twitter:image:src": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wxg4stntuvzfuelfl2f.jpeg"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5kvoc1suag2yjgn3667.png",
      "bytes": 215254,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/002.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5kvoc1suag2yjgn3667.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4jb8wgld9qpoxj38sh7.png",
      "bytes": 52886,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/003.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4jb8wgld9qpoxj38sh7.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwds1p7qngk33z7lfa6s6.png",
      "bytes": 26520,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/004.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwds1p7qngk33z7lfa6s6.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faeyel02ruwfwdwbpnjdq.png",
      "bytes": 97826,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/005.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faeyel02ruwfwdwbpnjdq.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynnt1sj7uwv3fux9gwrj.png",
      "bytes": 198430,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/006.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynnt1sj7uwv3fux9gwrj.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3wkg1a19i7zfwfu56aj.png",
      "bytes": 46986,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/007.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3wkg1a19i7zfwfu56aj.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl0h0wu3ww3pry99yl3r.png",
      "bytes": 48688,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/008.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl0h0wu3ww3pry99yl3r.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp15wzbenoh861qgt3px.png",
      "bytes": 44012,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/009.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp15wzbenoh861qgt3px.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8duwhgbungvqbjoygara.png",
      "bytes": 61834,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/010.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8duwhgbungvqbjoygara.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r6j5cn84w8jssmdq7ju.png",
      "bytes": 52260,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/011.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r6j5cn84w8jssmdq7ju.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0x5ro5zk3uubjp1zz7w.png",
      "bytes": 30728,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/012.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0x5ro5zk3uubjp1zz7w.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hxif5cocmb8k1c9w07i.png",
      "bytes": 119122,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/013.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hxif5cocmb8k1c9w07i.png",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ju6apoe8ksc86mhxear.jpg",
      "bytes": 17686,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/014.jpg",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ju6apoe8ksc86mhxear.jpg",
      "alt": " ",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx032anta80601q6lu48r.png",
      "bytes": 40626,
      "reused": true,
      "local_path": "attachments/1c4e84fa3734/images/015.png",
      "src": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx032anta80601q6lu48r.png",
      "alt": " ",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5kvoc1suag2yjgn3667.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4jb8wgld9qpoxj38sh7.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwds1p7qngk33z7lfa6s6.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faeyel02ruwfwdwbpnjdq.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynnt1sj7uwv3fux9gwrj.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3wkg1a19i7zfwfu56aj.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl0h0wu3ww3pry99yl3r.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp15wzbenoh861qgt3px.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8duwhgbungvqbjoygara.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r6j5cn84w8jssmdq7ju.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0x5ro5zk3uubjp1zz7w.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hxif5cocmb8k1c9w07i.png",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ju6apoe8ksc86mhxear.jpg",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx032anta80601q6lu48r.png",
      "label": "",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:48:48Z",
  "source_url": "https://dev.to/mitanshgor/gen-ai-5-wgan-and-wgan-gp-2245",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 7312,
  "expected_body_images": 14,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/1c4e84fa3734/pages/source.html",
  "local_html": "attachments/1c4e84fa3734/pages/article.html",
  "body_base_path": "attachments/1c4e84fa3734/pages/",
  "body_markdown_path": "attachments/1c4e84fa3734/pages/article.md"
}