昇思Mindspore25天學習打卡Day20:DCGAN生成漫畫頭像

昇思Mindspore25天學習打卡Day20:DCGAN生成漫畫頭像

  • 1 GAN基礎原理
  • 2 DCGAN原理
  • 3 數據準備與處理
    • 數據處理
  • 4 構造網絡
    • 4.1 生成器
    • 4.2 判別器
  • 5 模型訓練
    • 損失函數
    • 優化器
    • 訓練模型
  • 6 結果展示
  • 7 訓練結束打上標簽和時間

在下面的教程中,我們將通過示例代碼說明DCGAN網絡如何設置網絡、優化器、如何計算損失函數以及如何初始化模型權重。在本教程中,使用的動漫頭像數據集共有70,171張動漫頭像圖片,圖片大小均為96*96.

1 GAN基礎原理

這部分原理介紹參考Link:GAN圖像生成

2 DCGAN原理

DCGAN(深度卷積對抗生成網絡,Deep Convolutional Generative Adversarial Networks)是GAN的直接擴展。不同之處在于,DCGAN會分別在判別器和生成器中使用卷積和轉置卷積層。

它最早由Radford等人在論文Link:Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks中進行描述。判別器由分層的卷積層、BatchNorm層和LeakReLU激活層組成。輸入是3x64x64的圖像,輸出是該圖像為真圖像的概率。生成器則是由轉置卷積層、BatchNorm層和ReLU激活層組成。輸入是標準正態分布中提取出的隱向量z,輸出是3x64x64的RGB圖像。

本教程將使用動漫頭像數據集來訓練一個生成式對抗網絡,接著使用該網絡生成動漫頭像圖片。

3 數據準備與處理

首先我們將數據集下載到指定目錄下并解壓。示例代碼如下:
在這里插入圖片描述

數據處理

在這里插入圖片描述
定義 create_dataset_imagenet 函數對數據進行處理和增強操作.

在這里插入圖片描述
通過 create dict iterator 函數將數據轉換成字典迭代器,然后使用 matplotlib 模塊可視化部分訓練數據。
在這里插入圖片描述

4 構造網絡

當處理完數據后,就可以來進行網絡的搭建了。按照DCGAN論文中的描述,所有模型權重均應從 mean為0,sigma為0.02的正態分布中隨機初始化。

4.1 生成器

生成器 G的功能是將隱向量z 映射到數據空間。由于數據是圖像,這一過程也會創建與真實圖像大小相同的 RG8 圖像。在實踐場景中,該功能是通過一系列
Conv2dTranspose 轉置卷積層來完成的,每個層都與 BatchNorm2d 層和 ReLu 激活層配對,輸出數據會經過 tanh 函數,使其返回[-1,1]的數據范圍內。

DCGAN論文生成圖像如下所示:

在這里插入圖片描述

  • 圖片來源: Liuk:Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Networks
    我們通過輸入部分中設置的 nz、ngf 和 nc 來影響代碼中的生成器結構。 nz 是隱向量 z的長度,
    ngf 與通過生成器傳播的特征圖的大小有關,nc 是輸出圖像中的通道數。
    以下是生成器的代碼實現:
    在這里插入圖片描述

4.2 判別器

如前所述,判別器D是一個二分類網絡模型,輸出判定該圖像為真實圖的概率。通過一系列的 conv2d、
BatchNorm2d 和 LeakyReLu 層對其進行處理,最后通過 Sigmoid 激活函數得到最終概率。
DCGAN論文提到,使用卷積而不是通過池化來進行下采樣是一個好方法,因為它可以讓網絡學習自己的池化特征。
判別器的代碼實現如下:
在這里插入圖片描述

5 模型訓練

損失函數

當定義了 D和G后,接下來將使用Mindspore中定義的二進制交叉熵損失函數Link:BCELoss
在這里插入圖片描述

優化器

這里設置了兩個單獨的優化器,一個用于D,另一個用于G。這兩個都是 1r=0.8002 和 beta1 = 0.5 的Adam優化器。
在這里插入圖片描述

訓練模型

訓練分為兩個主要部分:訓練判別器和訓練生成器.

  • 訓練判別器
    訓練判別器的目的是最大程度地提高判別圖像真偽的概率。按照Goodfelow的方法,是希望通過提高其隨機梯度來更新判別器,所以我們要最大化
    l o g D ( x ) + l o g ( 1 ? D ( G ( z ) ) logD(x)+log(1-D(G(z)) logD(x)+log(1?D(G(z))的值,
  • 訓練生成器
    如DCGAN論文所述,我們希望通過最小化 l o g ( 1 ? D ( G ( z ) ) ) log(1- D(G(z))) log(1?D(G(z)))來訓練生成器,以產生更好的虛假圖像,。

在這兩個部分中,分別獲取訓練過程中的損失,并在每個周期結束時進行統計,將 fixed_noise 批量推送到生成器中,以直觀地跟蹤 G的訓練進度.

下面實現模型訓練正向邏輯:
在這里插入圖片描述
循環訓練網絡,每經過50次迭代,就收集生成器和判別器的損失,以便于后面繪制訓練過程中損失函數的圖像。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

6 結果展示

運行下面代碼,描繪 D和G損失與訓練迭代的關系圖
在這里插入圖片描述
可視化訓練過程中通過隱向量 fixed noise 生成的圖像。
在這里插入圖片描述
在這里插入圖片描述
從上面的圖像可以看出,隨著訓練次數的增多,圖像質量也越來越好。如果增大訓練周期數,當 num_epochs 達到50以上時,生成的動漫頭像圖片與數據集中的較為相似,下面我們通過加載生成器網絡模型參數文件來生成圖像,代碼如下:

7 訓練結束打上標簽和時間

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42454.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么裁員先裁技術人員?網友給答復

網友1:技術崗本身就是項目制的,項目完成,后續項目運營的收益與技術無關。之前是項目多,所以收益持續走高,現在都在減項目,自然先減技術崗。 網友2:房子蓋起來了,還需要農民工么? …

基于STM主題模型的主題提取分析-完整代碼數據

直接看結果: 代碼: import re from collections import defaultdict import random import matplotlib.pyplot as plt import numpy as npimport pandas as pd import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from nltk.corpus…

在Morelogin中使用IPXProxy海外代理IP的設置指南

Morelogin指紋瀏覽器是市場上較受歡迎的指紋瀏覽器,允許用戶管理多個賬號并進行自動化操作。它提供免費環境供用戶進行體驗,并且操作起來非常簡單。大多數人都會將Morelogin指紋瀏覽器和海外代理IP進行使用,來應用于多種場景,如電…

用ce修改植物大戰僵尸雜交版銀幣

第一步打開游戲 用ce打開圖中進程 第二步 輸入你原始銀幣 點首次搜索 第三步 找到這個地址 把地址拖下來 第四步 雙擊直接修改下面數值即可 金幣 鉆石 都和這個方法一樣 不一樣的是首次搜索可能會有很多地址 我們改變游戲里面的值 然后再次搜索游戲被改變的值即可準確找到地址

MySQL中字段的實際長度

在MySQL中,字段的實際長度(即存儲數據的實際字節數)可能因數據類型和存儲的具體內容而異。對于字符類型(如CHAR, VARCHAR, TEXT等)字段,實際長度取決于存儲的字符串長度以及字符集的編碼方式(如…

新加坡工作和生活指北:租房篇

本文首發于公眾號 Keegan小鋼 前段時間已經分享了工作篇,現在接著聊聊生活篇。因為生活這塊涉及到多個方面,內容比較多,所以我再細分了一下,本篇先聊聊租房。 先來看看新加坡的地區分布圖,如下: 上圖將新加…

使用Python繪制累積直方圖并分析數據

使用Python繪制累積直方圖并分析數據 在這篇博客中,我們將探討如何使用Python中的pandas庫和matplotlib庫來繪制累積直方圖,并分析數據文件中的內容。累積直方圖是一種常用的圖表類型,用于展示數據的累積分布情況。 數據: 鏈接…

(C++鏈表01) 移除鏈表元素

203、移除鏈表元素 不帶頭節點 class Solution { public:ListNode* removeElements(ListNode* head, int val) {while(head ! NULL && head->val val) {ListNode* tem head;head head->next;delete tem;}ListNode* cur head;while(cur ! NULL && c…

LDA算法進行相似性分析

import gensim from gensim import corpora from gensim.models import LdaModel from gensim.matutils import cossim import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize import string# 如果您尚未下載nltk的停用詞列表,請…

使用sklearn的基本流程

scikit-learn,通常簡稱為 sklearn,是一個開源的Python庫,是基于 Python 編程語言的一個非常流行的機器學習庫。它建立在 NumPy 和 SciPy 這兩個科學計算庫之上,并與 Matplotlib 配合使用,為數據預處理、模型訓練、評估…

Atom編輯器插件Minimap使用樣例

Atom編輯器插件Minimap是一個強大的工具,它為開發者提供了快速、直觀的代碼預覽功能。以下是Minimap的使用樣例和一些關鍵特性的介紹: 1. 安裝Minimap 首先,你需要在Atom編輯器中安裝Minimap插件。這通常可以通過Atom的插件市場&#xff08…

vue緩存頁面,當tab切換時保留原有的查詢條件

需求: 切換tab時,查詢條件不變 路由頁面: 單個頁面上加這句話:

bert-base-chinese模型離線使用案例

import torch import torch.nn as nn from transformers import BertModel, BertTokenizer# 通過torch.hub(pytorch中專注于遷移學的工具)獲得已經訓練好的bert-base-chinese模型 # model torch.hub.load(huggingface/pytorch-transformers, model, bert-base-chinese) model…

超過35歲的網工,你該何去何從?

在網絡工程師這個職業中,35歲往往被視為一個重要的門檻,這個年齡段的工程師,既擁有豐富的經驗和技能,也面臨著職業發展的諸多挑戰。 隨著技術的飛速發展和年輕一代的不斷涌入,不少35歲以上的網工都在迷茫的路口&#x…

雅思詞匯7~9

生活類詞匯 英文中文fridge冰箱washing machine洗衣機dishwasher洗碗機water heater熱水器microwave oven微波驢stereo system音箱radiator電暖爐toaster烤面包機dryer烘干機air conditioner空調accmodation住宿,膳宿tenant租客landlord房東couple夫婦veterinarian…

【資源下載】《數據倉庫工具箱》

歡迎來到我的博客,很高興能夠在這里和您見面!歡迎訂閱相關專欄: 歡迎關注微信公眾號:野老雜談 ?? 全網最全IT互聯網公司面試寶典:收集整理全網各大IT互聯網公司技術、項目、HR面試真題. ?? AIGC時代的創新與未來&a…

SpringBoot報錯:The field file exceeds its maximum permitted size of 1048576 bytes

報錯信息 The field file exceeds its maximum permitted size of 1048576 bytes原因是 SpringBoot內嵌的 tomcat 默認的所有上傳的文件大小為 1MB 解決辦法 修改配置 spring:servlet:multipart:max-file-size: 50MBmax-request-size: 50MB或者 spring.servlet.multipart.…

拖地機檢測液位的原理-管道液位傳感器

在現代洗地機中,確保水箱液位充足是保證清潔效率和質量的關鍵之一。為了實現這一功能,洗地機通常配備了管道光電液位傳感器,這種傳感器利用先進的光學感應原理來準確檢測水箱中的液位情況。 管道光電液位傳感器的工作原理基于光學傳感技術&a…

VOS歷史話單的非法呼叫話單解決方案,IPSS模塊安裝到VOS服務器,可大幅度提高安全性!

由于VOS的普及性,不得不承認VOS確實是非常優秀的軟交換,但是很多客戶在使用過程中都會遇到各種安全問題,比如話費被盜用了,歷史話單一堆的非法呼叫話單,嚴重的影響到了話務安全,并不是那點話費的事了&#…

Flutter【組件】標簽

簡介 flutter 標簽組件。標簽組件是一種常見的 UI 元素,用于顯示和管理多個標簽(或標簽集合)。 github地址: https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/packages/jac_uikit 使用方式&…