《昇思 25 天学习打卡营第 19 天 | 生成式对抗网络(GAN)实践指南 》

《昇思 25 天学习打卡营第 19 天 | 生成式对抗网络(GAN)实践指南 》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029


GAN 模型概述

生成式对抗网络(GAN)是一种前沿的无监督学习模型,由 Goodfellow 等人于 2014 年提出。GAN 由两部分组成:生成器(Generator)和判别器(Discriminator)。生成器负责生成逼真的假图像,而判别器则负责区分图像是真实的还是生成器生成的。

模型组成

  1. 生成器(G):从标准正态分布中采样隐码(latent code),并将其映射到数据空间,生成假图像。
  2. 判别器(D):接收输入图像,并预测图像为真实或假的概率。

训练过程

GAN 的训练是一个动态的博弈过程,生成器和判别器相互竞争,共同进步。

  • 初始阶段:生成器生成质量较差的图像,判别器容易区分真假。
  • 训练过程中:生成器不断学习生成更逼真的图像,判别器则提高其识别能力。
  • 平衡点:理想情况下,生成器生成的图像与真实图像分布一致,判别器无法区分。

数据集

本案例使用 MNIST 手写数字数据集,包含 60000 张训练样本和 10000 张测试样本,图像大小为 28x28。

数据加载与预处理

使用 MindSpore 的MnistDataset接口加载数据集,并进行必要的预处理,如归一化和数据增强。

train_dataset = ds.MnistDataset(dataset_dir='./MNIST_Data/train')
test_dataset = ds.MnistDataset(dataset_dir='./MNIST_Data/test')

模型构建

生成器

生成器采用五层全连接层,每层后接 BatchNorm 和 ReLU 激活层,输出通过 Tanh 函数以产生[-1, 1]范围内的图像数据。

class Generator(nn.Cell):# 定义生成器结构# ...def construct(self, x):img = self.model(x)return ops.reshape(img, (-1, 1, 28, 28))

判别器

判别器使用一系列全连接层和 LeakyReLU 激活层,最后通过 Sigmoid 激活函数输出概率。

class Discriminator(nn.Cell):# 定义判别器结构# ...def construct(self, x):x_flat = ops.reshape(x, (-1, img_size * img_size))return self.model(x_flat)

损失函数与优化器

使用二元交叉熵损失函数(BCELoss)和 Adam 优化器。

adversarial_loss = nn.BCELoss(reduction='mean')
optimizer_d = nn.Adam(net_d.trainable_params(), learning_rate=lr)
optimizer_g = nn.Adam(net_g.trainable_params(), learning_rate=lr)

模型训练

训练过程包括训练判别器和生成器,记录损失并在每个 epoch 结束时生成图像以跟踪进度。

for epoch in range(total_epoch):# 训练循环# ...gen_imgs = net_g(test_noise)save_imgs(gen_imgs.asnumpy(), epoch)

效果展示

训练过程中,生成器生成的图像质量逐渐提高,最终可生成与真实图像相似的假图像。GAN 模型的强大之处在于其生成高质量图像的能力,但其训练过程可能不稳定,需要仔细调整参数。此外,GAN 的应用不仅限于图像生成,还可以扩展到其他领域,如风格迁移、数据增强等、 通过本实践指南,学习了如何使用 MindSpore 框架构建和训练 GAN 模型,并使用 MNIST 数据集进行训练。见证了从模型初始化到训练,再到生成高质量图像的整个过程。随着技术的不断发展,GAN 有望在更多领域展现其潜力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode-101. 对称二叉树

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 思路 1) 如果同时root1…

【c++刷题笔记-单调栈】day48: 739. 每日温度 、496.下一个更大元素 I 、503.下一个更大元素II

739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;使用单调栈遍历&#xff0c;循环找栈中比栈顶数小的就出栈&#xff0c;并且记录值。比栈顶数大的就入栈&#xff0c;形成单调递增的栈 class Solution { public:vector<int> dailyTemperatures(…

ES6-11(第一部分)

ES6-11&#xff08;第一部分&#xff09; ECMA ECMA是一个组织ECMAScript是由Ecma国际通过ECMA-262标准化的脚本程序设计语言Ecma国际指定了很多标准&#xff0c;ECMA-262只是其中之一TC39定期开会维护ECMA-262 ES6 let: let 是 ES6 中引入的一种新的变量声明方式&#xff0…

【调试笔记-20240723-Linux-gitee 仓库同步 github 仓库,并保持所有访问链接调整为指向 gitee 仓库的 URL】

调试笔记-系列文章目录 调试笔记-20240723-Linux-gitee 仓库同步 github 仓库&#xff0c;并保持所有访问链接调整为指向 gitee 仓库的 URL 文章目录 调试笔记-系列文章目录调试笔记-20240723-Linux-gitee 仓库同步 github 仓库&#xff0c;并保持所有访问链接调整为指向 gite…

Langchain: 语言学习的新篇章

在当今全球化的世界中&#xff0c;语言学习已成为许多人追求的目标。Langchain是一种新兴的语言学习平台&#xff0c;它利用最新的技术&#xff0c;为用户提供了一个全新的语言学习体验。本文将介绍Langchain的基本概念、核心特性、学习方法以及如何通过Langchain提高语言学习效…

Ubuntu20.04版本升级openssh9.8p1方法

一、问题描述&#xff1a; 8.5p1 和 9.7p1 之间的openssh版本漏洞可能会导致linux系统以root身份进行RCE&#xff0c;所以需安装最新版本 二、解决方法&#xff1a; 将当前openssh版本升级到最新的版本即openssh-9.8p1版本&#xff0c;OpenSSL大版本升级且OpenSSH有新稳定版本…

微调大型语言模型 (LLM) 和 RAG 的区别、优势和劣势

本篇文章有ChatGPT生成&#xff0c;觉得说的有理&#xff0c;给予刊登。 微调大型语言模型 描述&#xff1a; 微调是指在一个预训练的语言模型基础上&#xff0c;使用特定任务或领域的特定数据集进行进一步训练。这一过程会更新模型的权重&#xff0c;以提高其在新数据集上…

Unity Shader入门精要——笔记

第1篇 基础篇 第2章&#xff1a;渲染流水线 GPU流水线 顶点数据–> 几何阶段&#xff1a;&#xff08;顶点着色器–> 曲面细分着色器–>几何着色器–>裁剪–>屏幕映射&#xff09;–>光栅化阶段&#xff08;三角形设置–>三角形遍历–>片元着色器–…

Zabbix监控应用

一.监控tomcat 1.在tomcat服务器上安装zabbix-agent服务 [rootnode2 etc]#vim zabbix_agentd.conf 94 Server192.168.240.13 #指向当前zabbix server ##### Passive checks related #被动检查相关配置### Option: ListenPort ListenPort10050 #监听端口 默认的无需修改11…

SPF配置教程:如何安全构建邮件发送策略?

SPF配置教程的步骤详解&#xff01;SPF记录配置方法策略有哪些&#xff1f; SPF通过允许域名所有者指定哪些主机可以代表该域发送邮件&#xff0c;从而减少电子邮件欺诈和垃圾邮件的风险。AokSend将详细介绍SPF配置教程&#xff0c;并指导您如何安全地构建邮件发送策略。 SPF…

《白话机器学习的数学》第4章——评估

4.1模型评估 1.由于像多重回归这样的问题会导致无法在图上展示&#xff0c;所以需要能够够定量地表示机器学习模型的精度。 4.2交叉验证 4.2.1回归问题的验证 1.把获取的全部训练数据分成两份&#xff1a;一份用于测试&#xff0c;一份用于训练。然后用前者来评估模型。 一般…

C# 数组常用遍历方式

// 假设数组Point[] points new Point[2];// 第一种遍历 forfor (int i 0; i < points.Length; i){Point p points[i];Console.WriteLine($"X{p.X},y{p.Y}");}// 第二种遍历 foreachforeach (Point p in points){Console.WriteLine($"X{p.X},y{p.Y}"…

TCP三次握手和四次挥手的理解

三次握手 第一次握手&#xff1a; 客户端发出 请求报文其中SYN应1&#xff0c;选择一个序列号x 第二次握手&#xff1a; 服务端接收到之后回复 确认报文&#xff0c;其中SYN应1&#xff0c;ACK1&#xff0c;确认号是x1&#xff0c;同时为自己初始化序列号y 第三次握手&…

spring —— AOP(前置通知)

一、pom 中需要增加的依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>6.0.2</version> </dependency> <dependency><groupId>org.springframework</g…

Hadoop架构

一、案列分析 1.1案例概述 现在已经进入了大数据(Big Data)时代&#xff0c;数以万计用户的互联网服务时时刻刻都在产生大量的交互&#xff0c;要处理的数据量实在是太大了&#xff0c;以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代…

ubuntu22.04,AX101网卡,打不开蓝牙

安装完ubuntu 22.04后&#xff0c;发现蓝牙可以识别&#xff0c;但是打不开。查看/var/log/dmesg日志&#xff1a; [ 2.587972] kernel: Bluetooth: hci0: Failed to load Intel firmware file intel/ibt-1040-1050.sfi (-2) [ 2.589252] kernel: Bluetooth: hci0: Fail…

Linux(CentOS)的“应用商城” —— yum

Linux&#xff08;CentOS&#xff09;的“应用商城” —— yum 关于 yum 和软件包Linux 系统&#xff08;CentOS&#xff09;的生态yum 相关操作yum 本地配置yum 安装 lrzsz.x86_64 关于 yum 和软件包 首先 yum 是软件下载安装管理的客户端&#xff0c;类似各种手机里的“应用…

WEB前端10- Fetch API(同步/异步/跨域处理)

Fetch API Fetch API 可以用来获取远程数据&#xff0c;用于在 Web 应用程序中发起和处理 HTTP 请求。它基于 Promise&#xff0c;提供了一种简单而强大的方式来处理网络通信&#xff0c;替代了传统的 XMLHttpRequest。 Promise对象 Promise 对象是 JavaScript 中处理异步操…

阿里云OSS对象存储的项目实战操作

目录 一.什么是阿里云OSS&#xff1f; 二.阿里云OSS的使用&#xff1a; 1.导入依赖到 pom.xml 配置文件&#xff1a; 2.在application.yml配置文件中配置OSS的相关信息&#xff1a; 3.在properties包下创建OSS的配置属性类来封装配置文件的配置项&#xff1a; 4.在utils包…

0723,UDP通信(聪明小辉聪明小辉),HTTP协议

我就是一个爱屋及乌的人&#xff01;&#xff01;&#xff01;&#xff01; #include "network_disk_kai.h" 昨天的epoll&#xff1a; 可恶抄错代码了 epoll_s.csockect return listenfdsetsockoptsockaddr_in bind listenfd & serveraddr…