<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      生成式對抗網(wǎng)絡(luò)(GAN)模型原理概述

      ??生成對抗網(wǎng)絡(luò)(Generative Adversarial Network, GAN)是一種通過對抗訓(xùn)練生成數(shù)據(jù)的深度學(xué)習(xí)模型,由生成器(Generator)和判別器(Discriminator)兩部分組成,其核心思想源于博弈論中的零和博弈。

      一、核心組成

      生成器(G)

      ??目標(biāo):生成逼真的假數(shù)據(jù)(如圖像、文本),試圖欺騙判別器。
      ??輸入:隨機(jī)噪聲(通常服從高斯分布或均勻分布)。
      ??輸出:合成數(shù)據(jù)(如假圖像)。

      判別器(D)

      ??目標(biāo):區(qū)分真實(shí)數(shù)據(jù)(來自訓(xùn)練集)和生成器合成的假數(shù)據(jù)。
      ??輸出:概率值(0到1),表示輸入數(shù)據(jù)是真實(shí)的概率。

      二、關(guān)于對抗訓(xùn)練

      1. 動態(tài)博弈

      ??1)生成器嘗試生成越來越逼真的數(shù)據(jù),使得判別器無法區(qū)分真假。
      ??2)判別器則不斷優(yōu)化自身,以更準(zhǔn)確地區(qū)分真假數(shù)據(jù)。
      ??3)兩者交替訓(xùn)練,最終達(dá)到納什均衡(生成器生成的數(shù)據(jù)與真實(shí)數(shù)據(jù)分布一致,判別器無法區(qū)分,輸出概率恒為0.5)。

      2. 優(yōu)化目標(biāo)(極小極大博弈)

      \[\min_{G}{\max_D}V(D,G)=E_{x\sim p_{data}}[logD(x)]+E_{z\sim p_z}[log(1-D(G(z)))] \]

      ??其中,
      ????\(D(x)\):判別器對真實(shí)數(shù)據(jù)的判別結(jié)果;
      ????\(G(z)\):生成器生成的假數(shù)據(jù);
      ????判別器希望最大化\(V(D,G)\)(正確分類真假數(shù)據(jù));
      ????生成器希望最小化\(V(D,G)\)(讓判別器無法區(qū)分)。

      3.交替更新

      1) 固定生成器,訓(xùn)練判別器:

      ??用真實(shí)數(shù)據(jù)(標(biāo)簽1)和生成數(shù)據(jù)(標(biāo)簽0)訓(xùn)練判別器,提高其鑒別能力。

      2) 固定判別器,訓(xùn)練生成器:

      ??通過反向傳播調(diào)整生成器參數(shù),使得判別器對生成數(shù)據(jù)的輸出概率接近1(即欺騙判別器)。

      三、典型應(yīng)用

      ??圖像生成:生成逼真的人臉、風(fēng)景、藝術(shù)畫(如 DCGAN、StyleGAN);
      ??圖像編輯:圖像修復(fù)(填補(bǔ)缺失區(qū)域)、風(fēng)格遷移(如將照片轉(zhuǎn)為油畫風(fēng)格);
      ??數(shù)據(jù)增強(qiáng):為小樣本任務(wù)生成額外的訓(xùn)練數(shù)據(jù);
      ??超分辨率重建:將低分辨率圖像恢復(fù)為高分辨率圖像。

      四、優(yōu)勢與挑戰(zhàn)

      優(yōu)勢

      ??無監(jiān)督學(xué)習(xí):無需對數(shù)據(jù)進(jìn)行標(biāo)注,僅通過真實(shí)數(shù)據(jù)即可訓(xùn)練(適用于標(biāo)注成本高的場景)。

      ??生成高質(zhì)量數(shù)據(jù):相比其他生成模型(如變分自編碼器 VAE),GAN 在圖像生成等任務(wù)中往往能生成更逼真、細(xì)節(jié)更豐富的數(shù)據(jù)。

      ??靈活性:生成器和判別器可以采用不同的網(wǎng)絡(luò)結(jié)構(gòu)(如卷積神經(jīng)網(wǎng)絡(luò) CNN、循環(huán)神經(jīng)網(wǎng)絡(luò) RNN 等),適用于多種數(shù)據(jù)類型(圖像、文本、音頻等)。

      挑戰(zhàn)

      ??訓(xùn)練不穩(wěn)定:容易出現(xiàn) “模式崩潰”(生成器只生成少數(shù)幾種相似數(shù)據(jù),缺乏多樣性)或難以收斂;

      ??平衡難題:生成器和判別器的能力需要匹配,否則可能一方過強(qiáng)導(dǎo)致另一方無法學(xué)習(xí)(如判別器太弱,生成器無需優(yōu)化即可欺騙它);

      ??可解釋性差:生成器的內(nèi)部工作機(jī)制難以解釋,生成結(jié)果的可控性較弱(近年通過改進(jìn)模型如 StyleGAN 緩解了這一問題)。

      五、Python示例

      ??使用 PyTorch 實(shí)現(xiàn)簡單 的GAN 模型,生成手寫數(shù)字圖像。

      import matplotlib
      matplotlib.use('TkAgg')
      
      import torch
      import torch.nn as nn
      import torch.optim as optim
      from torchvision import datasets, transforms
      from torch.utils.data import DataLoader
      import matplotlib.pyplot as plt
      import numpy as np
      
      plt.rcParams['font.sans-serif']=['SimHei']  # 中文支持
      plt.rcParams['axes.unicode_minus']=False  # 負(fù)號顯示
      
      # 設(shè)置隨機(jī)種子,確保結(jié)果可復(fù)現(xiàn)
      torch.manual_seed(42)
      np.random.seed(42)
      
      # 定義設(shè)備
      device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
      
      # 數(shù)據(jù)加載和預(yù)處理
      transform = transforms.Compose([
          transforms.ToTensor(),
          transforms.Normalize((0.5,), (0.5,))  # 將圖像歸一化到 [-1, 1]
      ])
      
      train_dataset = datasets.MNIST(root='./data', train=True,
                                     download=True, transform=transform)
      train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
      
      
      # 定義生成器網(wǎng)絡(luò)
      class Generator(nn.Module):
          def __init__(self, latent_dim=100, img_dim=784):
              super(Generator, self).__init__()
              self.model = nn.Sequential(
                  nn.Linear(latent_dim, 256),
                  nn.LeakyReLU(0.2),
                  nn.BatchNorm1d(256),
                  nn.Linear(256, 512),
                  nn.LeakyReLU(0.2),
                  nn.BatchNorm1d(512),
                  nn.Linear(512, img_dim),
                  nn.Tanh()  # 輸出范圍 [-1, 1]
              )
      
          def forward(self, z):
              return self.model(z).view(z.size(0), 1, 28, 28)
      
      
      # 定義判別器網(wǎng)絡(luò)
      class Discriminator(nn.Module):
          def __init__(self, img_dim=784):
              super(Discriminator, self).__init__()
              self.model = nn.Sequential(
                  nn.Linear(img_dim, 512),
                  nn.LeakyReLU(0.2),
                  nn.Dropout(0.3),
                  nn.Linear(512, 256),
                  nn.LeakyReLU(0.2),
                  nn.Dropout(0.3),
                  nn.Linear(256, 1),
                  nn.Sigmoid()  # 輸出概率值
              )
      
          def forward(self, img):
              img_flat = img.view(img.size(0), -1)
              return self.model(img_flat)
      
      
      # 初始化模型
      latent_dim = 100
      generator = Generator(latent_dim).to(device)
      discriminator = Discriminator().to(device)
      
      # 定義損失函數(shù)和優(yōu)化器
      criterion = nn.BCELoss()
      lr = 0.0002
      g_optimizer = optim.Adam(generator.parameters(), lr=lr, betas=(0.5, 0.999))
      d_optimizer = optim.Adam(discriminator.parameters(), lr=lr, betas=(0.5, 0.999))
      
      
      # 訓(xùn)練函數(shù)
      def train_gan(epochs):
          for epoch in range(epochs):
              for i, (real_imgs, _) in enumerate(train_loader):
                  batch_size = real_imgs.size(0)
                  real_imgs = real_imgs.to(device)
      
                  # 創(chuàng)建標(biāo)簽
                  real_labels = torch.ones(batch_size, 1).to(device)
                  fake_labels = torch.zeros(batch_size, 1).to(device)
      
                  # ---------------------
                  #  訓(xùn)練判別器
                  # ---------------------
                  d_optimizer.zero_grad()
      
                  # 計算判別器對真實(shí)圖像的損失
                  real_pred = discriminator(real_imgs)
                  d_real_loss = criterion(real_pred, real_labels)
      
                  # 生成假圖像
                  z = torch.randn(batch_size, latent_dim).to(device)
                  fake_imgs = generator(z)
      
                  # 計算判別器對假圖像的損失
                  fake_pred = discriminator(fake_imgs.detach())
                  d_fake_loss = criterion(fake_pred, fake_labels)
      
                  # 總判別器損失
                  d_loss = d_real_loss + d_fake_loss
                  d_loss.backward()
                  d_optimizer.step()
      
                  # ---------------------
                  #  訓(xùn)練生成器
                  # ---------------------
                  g_optimizer.zero_grad()
      
                  # 生成假圖像
                  fake_imgs = generator(z)
                  # 計算判別器對假圖像的預(yù)測
                  fake_pred = discriminator(fake_imgs)
                  # 生成器希望判別器將假圖像判斷為真
                  g_loss = criterion(fake_pred, real_labels)
                  g_loss.backward()
                  g_optimizer.step()
      
                  # 打印訓(xùn)練進(jìn)度
                  if i % 100 == 0:
                      print(f"Epoch [{epoch}/{epochs}] Batch {i}/{len(train_loader)} "
                            f"Discriminator Loss: {d_loss.item():.4f}, Generator Loss: {g_loss.item():.4f}")
      
              # 每個epoch結(jié)束后,生成一些樣本圖像
              if (epoch + 1) % 10 == 0:
                  generate_samples(generator, epoch + 1, latent_dim, device)
      
      
      # 生成樣本圖像
      def generate_samples(generator, epoch, latent_dim, device, n_samples=16):
          generator.eval()
          z = torch.randn(n_samples, latent_dim).to(device)
          with torch.no_grad():
              samples = generator(z).cpu()
      
          # 可視化生成的樣本
          fig, axes = plt.subplots(4, 4, figsize=(8, 8))
          for i, ax in enumerate(axes.flatten()):
              ax.imshow(samples[i][0].numpy(), cmap='gray')
              ax.axis('off')
      
          plt.tight_layout()
          plt.savefig(f"gan_samples/gan_samples_epoch_{epoch}.png")
          plt.close()
          generator.train()
      
      
      # 訓(xùn)練模型
      train_gan(epochs=50)
      
      # 生成最終樣本
      generate_samples(generator, "final", latent_dim, device)
      
      
      

      最終生成的樣本:
      gan_samples_epoch_final

      六、小結(jié)

      ??GAN通過對抗機(jī)制實(shí)現(xiàn)了強(qiáng)大的生成能力,成為生成模型領(lǐng)域的里程碑技術(shù)。衍生變體(如CGAN、CycleGAN等)進(jìn)一步擴(kuò)展了其應(yīng)用場景。



      End.

      posted @ 2025-07-13 00:09  歸去_來兮  閱讀(743)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品一区中文字幕| 毛片av在线尤物一区二区| 国产亚洲精品AA片在线爽| 天天影视色香欲综合久久| 日韩国产亚洲一区二区三区| 五月丁香激激情亚洲综合| 亚洲av麻豆aⅴ无码电影| 99热久久这里只有精品| 成人网站免费看黄a站视频| 高清无码18| 中文字幕人成乱码熟女| 国产激情一区二区三区不卡| 中文字幕日韩有码国产| 国产精品一区中文字幕| 婷婷99视频精品全部在线观看| 无码人妻丰满熟妇区毛片18| 国产精品国产三级在线专区| 日本一卡二卡不卡视频查询| 日本韩国一区二区精品| 国产精品99一区二区三区| 亚洲精品国产免费av| 2021亚洲国产精品无码| 天天爽夜夜爽人人爽一区二区| 丰满人妻熟妇乱又仑精品| 日本一道一区二区视频| 久久天天躁狠狠躁夜夜婷| 国产婷婷精品av在线| 一区二区和激情视频| 国产成人一区二区三区免费| 色五月丁香五月综合五月| 欧美不卡无线在线一二三区观| 凤阳县| 国产亚洲综合一区二区三区| 国产美熟女乱又伦AV果冻传媒 | 亚洲精品日韩在线丰满| 日韩无专区精品中文字幕| 在线观看AV永久免费| 欧美大胆老熟妇乱子伦视频| 国产精品永久免费无遮挡| 久久不卡精品| 伊人久久大香线蕉AV网|