pytorch生成对抗网络
# 生成对抗网络
import os
import torch
import torchvision
import torch.nn as nn
from torchvision import transforms
from torchvision.utils import save_image
# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 超参数
latent_size = 64 # 潜在空间(latent space)的维度数量
hidden_size = 256
image_size = 784
num_epochs = 200
batch_size = 100
sample_dir = 'samples'
# Create a directory if not exists
if not os.path.exists(sample_dir):
os.makedirs(sample_dir)
# Image processing
# transform = transforms.Compose([
# transforms.ToTensor(),
# transforms.Normalize(mean=(0.5, 0.5, 0.5), # 3 for RGB channels
# std=(0.5, 0.5, 0.5))])
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5], # 1 for greyscale channels
std=[0.5])])
# MNIST dataset
mnist = torchvision.datasets.MNIST(root='./datasets',
train=True,
transform=transform,
download=True)
data_loader = torch.utils.data.DataLoader(dataset=mnist,
batch_size=batch_size,
shuffle=True)
for i,_ in data_loader:
print(i.shape,i.max(),i.min(),torch.unique(_))
break
# 鉴别器
D = nn.Sequential(
nn.Linear(image_size, hidden_size),
nn.LeakyReLU(0.2),
nn.Linear(hidden_size, hidden_size),
nn.LeakyReLU(0.2),
nn.Linear(hidden_size, 1),
nn.Sigmoid())
# 生成器
G = nn.Sequential(
nn.Linear(latent_size, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, image_size),
nn.Tanh())
# Device setting
D = D.to(device)
G = G.to(device)
# Binary cross entropy loss and optimizer
criterion = nn.BCELoss()
d_optimizer = torch.optim.Adam(D.parameters(), lr=0.0002)
g_optimizer = torch.optim.Adam(G.parameters(), lr=0.0002)
def denorm(x):
out = (x + 1) / 2
return out.clamp(0, 1) # 裁剪到0-1
def reset_grad():
d_optimizer.zero_grad()
g_optimizer.zero_grad()
torch.zeros(4, 1).shape
torch.randn(4,50).shape
# 生成对抗中有生成器和鉴别器,生成器是把潜在向量作为输入,网络输出图片的一维向量形式,在模型训练时,
# 判别器对真实图片和生成图片进行判别(打分),这是个二分类,这里用1表示真,0表示假,所以鉴别器损失就由
# 真实图片和全1的损失,生成图片和全0的损失,这两个损失组成,之后反向传播,这时候更新的就是鉴别器的参数
# 鉴别器训练的目的是为了辨别真实和生成,而生成器呢,生成器的目的是让生成的图片尽量接近真实,但是你怎么判断
# 它接近真实,就是传入鉴别器,鉴别器打分越高,说明它越真实,所以生成器损失就是全1标签和鉴别logits间的误差
# 特别注意的是:在鉴别器损失反向传播时,更新的只是鉴别器模型中的参数,而生成器损失反向传播时,更新的也只是
#生成器模型中的参数
# 训练
total_step = len(data_loader) # 总批次数
for epoch in range(num_epochs):
# 遍历每个批次数据
for i, (images, _) in enumerate(data_loader):
images = images.reshape(batch_size, -1).to(device)
# 创建稍后用作BCE损失输入的标签(全1表示真,全0表示假)
real_labels = torch.ones(batch_size, 1).to(device)
fake_labels = torch.zeros(batch_size, 1).to(device)
# 训练鉴别器
outputs = D(images) # 获取鉴别器对真实图片的鉴别分数
d_loss_real = criterion(outputs, real_labels) # 真实鉴别损失
real_score = outputs # 真实鉴别分数
# z是随机初始化的生成图片(latent_size是用这个大小的向量表示图片)
z = torch.randn(batch_size, latent_size).to(device)
fake_images = G(z) # 获取生成的图片
outputs = D(fake_images) # 获取鉴别器对生成图片的鉴别分数
d_loss_fake = criterion(outputs, fake_labels) # 计算生成(假)的鉴别损失
fake_score = outputs
# Backprop and optimize
d_loss = d_loss_real + d_loss_fake # 这两个加起来是鉴别器损失
reset_grad()
# 鉴别器损失反向传播
d_loss.backward()
# 根据梯度更新参数
d_optimizer.step()
# 训练生成器
# 随机初始化一个噪音图片(用一定大小的向量表示)
z = torch.randn(batch_size, latent_size).to(device)
# 通过生成器生成图片
fake_images = G(z)
outputs = D(fake_images) # 鉴别器对生成图片的鉴别得分
# 生成器的目的是使生成的图片足够真实,也就是最小化全1标签和鉴别logits间的误差
g_loss = criterion(outputs, real_labels)
# 清理之前梯度,用生成器损失反向传播,用g_optimizer更新参数
reset_grad()
g_loss.backward()
g_optimizer.step()
# 每隔200批次打印日志
if (i+1) % 200 == 0:
print('Epoch [{}/{}], Step [{}/{}], d_loss: {:.4f}, g_loss: {:.4f}, D(x): {:.2f}, D(G(z)): {:.2f}'
.format(epoch, num_epochs, i+1, total_step, d_loss.item(), g_loss.item(),
real_score.mean().item(), fake_score.mean().item()))
# 真实图片只需要保存一次
if (epoch+1) == 1:
images = images.reshape(images.size(0), 1, 28, 28)
save_image(denorm(images), os.path.join(sample_dir, 'real_images.png'))
# 每个轮次都会保存一次生成器生成的图片
fake_images = fake_images.reshape(fake_images.size(0), 1, 28, 28)
save_image(denorm(fake_images), os.path.join(sample_dir, 'fake_images-{}.png'.format(epoch+1)))
# Save the model checkpoints (把模型中各个层的参数字典保存到磁盘)
torch.save(G.state_dict(), 'G.ckpt')
torch.save(D.state_dict(), 'D.ckpt')
上面是真实图片,下面是经过200个轮次后的生成图片
相关文章:
pytorch生成对抗网络
# 生成对抗网络 import os import torch import torchvision import torch.nn as nn from torchvision import transforms from torchvision.utils import save_image # Device configuration device torch.device(cuda if torch.cuda.is_available() else cpu) # 超参数 late…...
flask简易版的后端服务创建接口(python)
1.pip install安装Flask和CORS 2.创建http_server.py文件,内容如下 """ ============================ 简易版的后端服务 ============================ """ from flask import Flask, request, jsonify from flask_cors import CORS app = F…...
gitlab 生成并设置 ssh key
一、介绍 🎯 本文主要介绍 SSH Key 的生成方法,以及如何在GitLab上添加SSH Key。GitLab 使用SSH协议与Git 进行安全通信。当您使用 SSH密钥 对 GitLab远程服务器进行身份验证时,您不需要每次都提供您的用户名和密码。SSH使用两个密钥&#x…...
ssh远程升级Ubuntu20.04到Ubuntu 22.04
ssh远程升级Ubuntu20.04到Ubuntu 22.04 陈拓 2024/10/16-2024/10/26 1. 简介 本文介绍了如何通过ssh将Ubuntu系统从20.04升级到22.04。 在进行系统升级之前,建议备份重要数据,以防升级过程中出现问题。 2. 更新当前系统 硬件系统架构 当前操作系统版…...
Qt开源控件:图像查看器工具V1.1
一、项目概述 本项目是一款基于 Qt 框架 开发的 图像查看工具,可以显示带坐标轴的图像,并实时获取图像中任意像素点的坐标和颜色信息。工具具有图像缩放、动态坐标轴绘制、鼠标交互等功能,使用起来方便直观。 二、功能亮点 1. 图像加载与显…...
【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)
目录 详细解释更改文件内容4 运行模块(run):README.namelist5 输出模块(share):share/module_check_a_mundo.Fshare/output_wrf.F参考SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解的前两部分内容可参见-【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放A…...
【C#】新建窗体文件,Form、UserControl
从用途、功能性和架构方面进行描述。 1. 继承自 Form 的窗体(通常是窗口): 在 C# 中,Form 是用于创建应用程序的主窗口或对话框窗口的类。当您继承自 Form 时,您创建的是一个完整的窗口,可以显示内容、与…...
优化SEO策略掌握长尾关键词的力量
内容概要 在数字营销领域,SEO(搜索引擎优化)是帮助网站获得更多流量的关键。然而,随着在线竞争的加剧,单纯依赖短尾关键词已难以满足用户的搜索需求。这时,长尾关键词的引入便显得尤为重要。长尾关键词通常…...
MySQL分页查询
分页查询: 数据记录条数过多的时候,需要分页来显示。 语法: select 查询字段 from 表名 where ....等等前面学过的所有写法 limit offset(开始记录索引,是从0开始的),size(要取出的条数)&…...
执行“go mod tidy”遇到“misbehavior”错误
执行“go mod tidy”报错下错误,执行“go clean -modcache”和删除“go env GOMODCACHE”指定目录均无效: SECURITY ERROR go.sum database server misbehavior detected!old database:go.sum database tree3397826xyyhzdyAOat5li/EXx/MK1gONQf3LAGqArh…...
【机器学习】——windows下安装anaconda并在vscode上进行配置
一、安装anaconda 1.进入清华的镜像网站,下载自己电脑对应的anaconda版本。网站:https://repo.anaconda.com/archive/ 这里我下载的版本是anaconda3-2024.10-1-Windows-x86-64 2.下载完毕后开始安装anaconda 3.配置anaconda环境变量 在设置中找到编…...
第6章:布局 --[CSS零基础入门]
CSS 布局是网页设计中至关重要的一个方面,它决定了页面上元素的排列和展示方式。以下是几种常见的 CSS 布局方法和技术: 1. 浮动布局(Float Layout) 浮动布局(Float Layout)曾经是网页设计中创建多列布局…...
kubeadm安装K8s集群基础环境配置
kubeadm安装K8s集群基础环境配置 1.首先确保所有机器可以通信,然后配置主机hosts文件;2.关闭所有节点关闭防火墙、selinux、swap;3.将桥接的IPv4流量传递到 iptables;4.安装常用工具包;5.安装时间同步工具ntpdate&…...
计算机毕业设计Python医疗问答系统 医疗可视化 BERT+LSTM+CRF深度学习识别模型 机器学习 深度学习 爬虫 知识图谱 人工智能 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
本文涵盖的内容仅供个人学习使用,如果侵犯学校权利,麻烦联系我删除。 初衷 研究生必修选逃, 期末复习怕漏过重点题目,但是看学在西电的录播回放课一卡一卡的,于是想在空余时间一个个下载下来,然后到时候就…...
攻防世界杂项刷题笔记(引导模式)13-23
引言:14包括提取文件和流量分析,22很新颖!!其他的都是常规隐写 13.base64stego 经过上一次如来十三掌的磨练,这题在看到题干“十三掌”的时候我是丝毫不慌张的。附件给了压缩包,考虑是不是伪加密…...
基于单片机的智能农田灌溉节水系统设计及应用
摘 要 : 针对传统的灌溉方法浪费水资源节水系统设计。该系统从节水角度出发,对传感器和主电路进行了设计,主要采集灌溉地的湿度与温度数据,根据测量土壤中的温度与湿度作为主要参数,对农田灌溉节水系统进行实时控制&am…...
高校毕业生离校就业数据分析管理平台的设计与实现(Java毕业设计)教务管理、就业统计
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
1、SQL语言
分类方式 类别描述 部署方式 嵌入式/单机/双机/集群/分布式/云数据库 业务类型 OLTP数据库/OLAP数据库/流数据库/时序数据库 存储介质 内存数据库/磁盘数据库/SSD数据库/SCM数据库 年代 第一代是单机数据库/第二代是集群数据库/第三代是分布式数据库和云原生数据库/第…...
spark sql 环境安装,java 默认路径和 安装配置!
yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…...
【CMD、PowerShell和Bash设置代理】
【CMD、PowerShell和Bash设置代理】 1. CMD(命令提示符)临时设置代理(只对当前会话有效):查看当前代理设置:清除临时代理设置:永久设置代理(对所有新的 CMD 会话有效)&am…...
分区之间的一种度量方法-覆盖度量(Covering Metric)
分区之间的一种度量方法——覆盖度量(Covering Metric),用于量化一个分区如何被另一个分区覆盖或近似。以下是逐步详细解释: 1. 背景与符号说明 分区的概念: 分区是将一个集合(这里是 { 1 , … , n } \{…...
HarmonyOS(64) wrapBuilder 全局@Builder使用利器
WrapBuilder 全局Builder是什么什么时候使用wrapBuilderBuilder的限制参考资料 全局Builder是什么 局部Builder的定义方法如下: //定义局部Builder Builder MyBuilderFunction() {} //使用方法 this.MyBuilderFunction()全局Builder定义语法如下: //全…...
【计算机毕设】基于Spark猫眼电影票房数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
目录 【计算机毕设】基于Spark猫眼电影票房数据分析预测推荐系统(完整系统源码数据库开发笔记详细部署教程虚拟机分布式启动教程)✅ 一、项目背景 二、研究目的 三、项目意义 四、项目功能 五、项目创新点 六、开发技术介绍 七、算法介绍 八、数…...
问卷调查模板
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>问卷调查</title><style>body {font-fam…...
hadoop单机安装
步骤 1:安装 Java 安装 OpenJDK bash sudo yum install -y java-1.8.0-openjdk 验证 Java 安装 bash java -version 输出类似以下内容表示成功: arduino openjdk version “1.8.0_xxx” 步骤 2:下载 Hadoop 下载 Hadoop 安装包 前往 Hadoop 官方下载页面,获取最新稳…...
Android笔记【15】跳转页面返回信息
一、问题 学习一段代码 val intent Intent(thisSecondActivity, MainActivity::class.java) intent.putExtra("extra_data", data) startActivity(intent) 二、内容 这段代码是在 Android 应用中启动一个新的活动(Activity),具…...
MATLAB深度学习(七)——ResNet残差网络
一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在,每两个网络层之间加入一个残差连接,缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里,设想一个包含诺干层自网络,子网络的函数用H(x)来表示&#x…...
推荐几种主流数据仓库:深度剖析与对比
引言 随着数据量的不断增长,数据仓库技术在企业的数据管理和分析中扮演着越来越重要的角色。不同的数据仓库系统在性能、架构、功能和适用场景上各有特点。本文将详细介绍目前市场上几种主流的数据仓库,帮助你更好地了解各个数据仓库的特性,选…...
编译原理——词法分析器的实现
实验目的 深入理解有限自动机及其应用编辑一个词法分析器,了解计算机识别源程序字符串的过程。 实验内容和要求 实验内容:处理c语言源程序,对源程序进行编译预处理(去除注释、无用的回车换行找到包含的文件等)之后&a…...
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…...
hive分区分桶、数据倾斜总结
一、hive的基本概念 hive是一个构建在hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供数据查询功能 二、hive的特点 (1)数据是存储在hdfs上 (2)底层是将sql转换为MapReduce任务进行计算 …...
MySQL 函数
在 MySQL 中,函数(Function)是一种用于封装一段逻辑处理的编程结构,可以在 SQL 语句中调用并返回单个值。函数和存储过程类似,都是存储在服务器端的程序单元,但它们的应用场景和使用方式有所不同。函数通常…...
Java 并发舞台:多线程小精灵的奇幻冒险之旅
1.线程池的拒绝策略有哪些? Java中的线程池提供了几种不同的拒绝策略,当线程池无法处理新的任务时(比如因为线程池已满并且工作队列也满了),这些策略会决定如何处理新提交的任务。ThreadPoolExecutor类中定义了以下四…...
PostgreSQL 性能优化全方位指南:深度提升数据库效率
PostgreSQL 性能优化全方位指南:深度提升数据库效率 别忘了请点个赞收藏关注支持一下博主喵!!! 在现代互联网应用中,数据库性能优化是系统优化中至关重要的一环,尤其对于数据密集型和高并发的应用而言&am…...
【Go 基础】并发相关
并发相关 CAS CAS算法(Compare And Swap),是原⼦操作的⼀种,,CAS 算法是⼀种有名的⽆锁算法。⽆锁编程,即不使⽤锁的情况下实现多线程之间的变量同步。可⽤于在多线程编程中实现不被打断的数据交换操作,从…...
5G CPE终端功能及性能评测(四)
5G CPE 功能性能评测 本文选取了几款在工业应用领域应用较多的5G CPE,对其功能和性能进行了对比评测。功能方面主要对比了网络接口数量,VPN功能 支持情况。以下测试为空口测试,测试结果受环境影响较大,性能仅供参考。总体看,高通X55芯片下行最优,速率稳定。 功能 对比CPE…...
开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将介绍如何…...
JS进阶DAY3|事件(一)事件监听及事件类型
目录 一、事件监听方式(绑定) 1.1 DOM0级事件 1.2 DOM2级事件 1.3 区别 二、事件类型 2.1 鼠标事件 2.2 键盘事件 2.3 焦点事件 2.4 表单事件 2.5 加载和卸载事件 2.6 滚动事件 2.7 触摸事件(在支持触摸的设备上) 一…...
数据结构与算法之美:单链表
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《数据结构与算法之美》、《编程之路》、《题海拾贝》 欢迎点赞,关注! 目录 …...
从ctfwiki开始的pwn之旅 6.ret2reg
原理 Ret2reg,即攻击绕过地址混淆(ASLR),返回到寄存器地址 一般用于开启ASLR的ret2shellcode题型。 出现该漏洞的代码的典型特征是:程序中存在strcpy的字符串拷贝函数。 ret2reg(返回到寄存器地址攻击)是一种利用技…...
GESP202412 7级 T2
闲话 花了一个小时。 主要原因:条初始值硬控我半小时,题目看错硬控我半小时(悲)。 正文 看题目,就是求从哪个点出发所得到的所有单调下降序列的总长度最长(这个描述好奇怪,不过意思是对的)。 题目中说…...
LeetCode---426周赛
题目列表 3370. 仅含置位位的最小整数 3371. 识别数组中的最大异常值 3372. 连接两棵树后最大目标节点数目 I 3373. 连接两棵树后最大目标节点数目 II 一、仅含置位位的最小整数 题目要求我们返回二进制数位全为1,且大于 n 的最小的整数,我们可以直…...
git 拉取代码时报错 gitignore Please move or remove them before you merge.
git 拉取代码时报错, The following untracked working tree files would be overwritten by merge: .gitignore Please move or remove them before you merge. 当你在使用 Git 进行代码拉取(通常是执行 git pull 或 git merge 命令)时遇到这…...
devops-Dockerfile+Jenkinsfile方式部署Java前后端应用
文章目录 概述部署前端Vue应用一、环境准备1、Dockerfile2、.dockerignore3、nginx.conf4、Jenkinsfile 二、Jenkins部署1、新建任务2、流水线3、Build Now 构建 & 访问 Springboot后端应用1. 准备工作2. 创建项目结构3. 编写 Dockerfile后端 Dockerfile (backend/Dockerfi…...
华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)
注意:考试链接地址:华为云鸿蒙应用入门级学习认证_华为云鸿蒙应用入门级开发者认证_华为云开发者学堂-华为云 当前认证打折之后是1元,之后原价700元,大家尽快考试!考试题库里面答案不一定全对,但是可以保证…...
Lua元表和元方法的使用
元表是一个普通的 Lua 表,包含一组元方法,这些元方法与 Lua 中的事件相关联。事件发生在 Lua 执行某些操作时,例如加法、字符串连接、比较等。元方法是普通的 Lua 函数,在特定事件发生时被调用。 元表包含了以下元方法࿱…...
自动驾驶算法——卡尔曼滤波器平滑感知车道线参数【C++代码实现】
1.算法原理 在工程实践中,由于感知识别到的车道线偶尔存在较大的跳变,导致后端控制算法计算出的控制角度也存在较大的跳变,所以我们需要对感知输入的车道线系数进行平滑处理。 已知卡尔曼滤波算法主要分为以下几大步骤: 感知将车道线以三次螺旋曲线方程 y = c 0 + c 1 x +…...
浅谈Scala语言
一、Scala语言基础 1.1 语法结构 Scala的语法是一种融合了多种编程范式的设计,它结合了函数式编程和面向对象编程的优点。这种语法结构使得Scala既具有高度的表达能力,又保持了代码的简洁性。例如,Scala支持类型推断,这意味着在…...
可视化建模以及UML期末复习篇----UML图
这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国! 一、UML图 总共有如下几种: 用例图(Use Ca…...