cs231n assignment3 q4 Generative Adversarial Networks

文章目录

  • 嫌墨迹直接看代码
  • Q4 :Generative Adversarial Networks
    • sample_noise
      • 题面
      • 解析
      • 代码
      • 输出
    • discriminator
      • 题面
      • 解析
      • 代码
      • 输出
    • generator
      • 题面
      • 解析
      • 代码
      • 输出
    • discriminator_loss
      • 题面
      • 解析
      • 代码
      • 输出
    • generator_loss
      • 题面
      • 解析
      • 代码
    • get_optimizer
      • 题面
      • 解析
      • 代码
      • 输出
    • ls_discriminator_loss ls_generator_loss
      • 题面
      • 解析
      • 代码
      • 输出
    • build_dc_classifier
      • 题面
      • 解析
      • 代码
      • 输出
    • build_dc_generator
      • 题面
      • 解析
      • 代码
      • 输出

嫌墨迹直接看代码

Q4 :Generative Adversarial Networks

sample_noise

题面

在这里插入图片描述
在这里插入图片描述
就是让我们生成噪音,使用torch.rand就好了注意我们的噪音区间应该在 (-1,1)
而torch.rand生成的在(0,1)

解析

看代码就好了

代码

def sample_noise(batch_size, dim, seed=None):"""Generate a PyTorch Tensor of uniform random noise.Input:- batch_size: Integer giving the batch size of noise to generate.- dim: Integer giving the dimension of noise to generate.Output:- A PyTorch Tensor of shape (batch_size, dim) containing uniformrandom noise in the range (-1, 1)."""if seed is not None:torch.manual_seed(seed)# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return torch.rand(batch_size, dim) * 2 - 1# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)****

输出

在这里插入图片描述

discriminator

题面

在这里插入图片描述
在这里插入图片描述
让我们使用nn.Sequential来搭建一个识别网络

解析

没啥好说的,pytorch的使用在之前我们也学习过了,直接调用相关api就好了,如果又不懂得看代码就好了

代码

def discriminator(seed=None):"""Build and return a PyTorch model implementing the architecture above."""if seed is not None:torch.manual_seed(seed)model = None############################################################################### TODO: Implement architecture                                               ##                                                                            ## HINT: nn.Sequential might be helpful. You'll start by calling Flatten().   ################################################################################ *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****model = nn.Sequential(nn.Flatten(),nn.Linear(784, 256),nn.LeakyReLU(0.01),nn.Linear(256, 256),nn.LeakyReLU(0.01),nn.Linear(256, 1))# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****###############################################################################                               END OF YOUR CODE                             ###############################################################################return model

输出

在这里插入图片描述

generator

题面

在这里插入图片描述
在这里插入图片描述
就是让我们按照上面的网络结构搭建一个简单的生成器网络

解析

看代码就好了

代码

def generator(noise_dim=NOISE_DIM, seed=None):"""Build and return a PyTorch model implementing the architecture above."""if seed is not None:torch.manual_seed(seed)model = None############################################################################### TODO: Implement architecture                                               ##                                                                            ## HINT: nn.Sequential might be helpful.                                      ################################################################################ *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****model = nn.Sequential(nn.Linear(noise_dim, 1024),nn.ReLU(),nn.Linear(1024, 1024),nn.ReLU(),nn.Linear(1024, 784),nn.Tanh())# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****###############################################################################                               END OF YOUR CODE                             ###############################################################################return model

输出

在这里插入图片描述

discriminator_loss

题面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
让我们计算判别器的损失,具体怎么计算在上面的公式里写了,其中需要使用的bce_loss函数已经让我们使用了pytorch的函数

关于bce_loss 交叉熵损失函数的讲解

解析

结合上面的材料,同时我的代码注释吧

代码

def bce_loss(input, target):"""Numerically stable version of the binary cross-entropy loss function in PyTorch.Inputs:- input: PyTorch Tensor of shape (N, ) giving scores.- target: PyTorch Tensor of shape (N,) containing 0 and 1 giving targets.Returns:- A PyTorch Tensor containing the mean BCE loss over the minibatch of input data."""bce = nn.BCEWithLogitsLoss()# 注意,原来给的代码是下面的代码,使用了Input.squeezed().后来我发现这样的话会导致input的size变成(N,)而target的size变成(N,1)# 导致报错,所以我把squeeze()去掉了,这样就不会出现这个问题了,或者你也可以两个都加上squeeze()# return bce(input.squeeze(), target)# 下面是我修改后的代码return bce(input, target)def discriminator_loss(logits_real, logits_fake):"""Computes the discriminator loss described above.Inputs:- logits_real: PyTorch Tensor of shape (N,) giving scores for the real data.- logits_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.Returns:- loss: PyTorch Tensor containing (scalar) the loss for the discriminator."""loss = None# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****# 获取正确分类的标签true_labels = torch.ones_like(logits_real).type(dtype)# 获取错误分类的标签false_labels = torch.zeros_like(logits_fake).type(dtype)# 为什么公式里是两个减法,而这里是两个加法呢?# 因为bce_loss已经帮我们取负值了,所以加法就可以了loss = bce_loss(logits_real, true_labels) + bce_loss(logits_fake, false_labels)# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return loss

输出

在这里插入图片描述

generator_loss

题面

同上在这里插入图片描述

解析

看代码吧

代码

def generator_loss(logits_fake):"""Computes the generator loss described above.Inputs:- logits_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.Returns:- loss: PyTorch Tensor containing the (scalar) loss for the generator."""loss = None# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****# 为什么上面判别器loss的代码里fake的标签是0,而这里是1呢?# 因为这里是希望生成器生成的图片能够被判别器判别为真,所以标签是1false_label = torch.ones_like(logits_fake).type(dtype)loss = bce_loss(logits_fake, false_label)# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return loss

get_optimizer

题面

在这里插入图片描述
在这里插入图片描述

解析

看代码吧,这个就是个调用api

代码

def get_optimizer(model):"""Construct and return an Adam optimizer for the model with learning rate 1e-3,beta1=0.5, and beta2=0.999.Input:- model: A PyTorch model that we want to optimize.Returns:- An Adam optimizer for the model with the desired hyperparameters."""optimizer = None# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, betas=(0.5, 0.999))# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return optimizer

输出

之后就是模型的训练了,直接看模型的训练结果好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ls_discriminator_loss ls_generator_loss

题面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意我们现在不需要使用二元交叉熵的函数,因为上面这个公式里的loss计算公式

对于生成器而言,就是生成的图片经识别后被认为是真实的可能性与1的距离越小越好,
因此我们只需要(计算他们两之间的距离)而对于鉴别器而言,就是原始数据集的图片经识别后被认为是真实的可能性与1的距离越小越好,
生成的图片经识别后被认为是真实的可能性与0的距离越小越好,

所以有了上面的loss计算公式

解析

看上面和代码

代码

def ls_discriminator_loss(scores_real, scores_fake):"""Compute the Least-Squares GAN loss for the discriminator.Inputs:- scores_real: PyTorch Tensor of shape (N,) giving scores for the real data.- scores_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.Outputs:- loss: A PyTorch Tensor containing the loss."""loss = None# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****loss = 0.5 * torch.mean((scores_real - 1) ** 2) + 0.5 * torch.mean(scores_fake ** 2)# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return lossdef ls_generator_loss(scores_fake):"""Computes the Least-Squares GAN loss for the generator.Inputs:- scores_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.Outputs:- loss: A PyTorch Tensor containing the loss."""loss = None# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****loss = 0.5 * torch.mean((scores_fake - 1) ** 2)# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return loss

输出

在这里插入图片描述

build_dc_classifier

题面

在这里插入图片描述

在这里插入图片描述

解析

照着做就好了

代码

def build_dc_classifier(batch_size):"""Build and return a PyTorch model for the DCGAN discriminator implementingthe architecture above."""############################################################################### TODO: Implement architecture                                               ##                                                                            ## HINT: nn.Sequential might be helpful.                                      ################################################################################ *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return nn.Sequential(Unflatten(batch_size, 1, 28, 28),nn.Conv2d(1, 32, kernel_size=5, stride=1),nn.LeakyReLU(0.01),nn.MaxPool2d(kernel_size=2, stride=2),nn.Conv2d(32, 64, kernel_size=5, stride=1),nn.LeakyReLU(0.01),nn.MaxPool2d(kernel_size=2, stride=2),Flatten(),nn.Linear(1024, 4 * 4 * 64),nn.LeakyReLU(0.01),nn.Linear(4 * 4 * 64, 1))# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****###############################################################################                               END OF YOUR CODE                             ###############################################################################

输出

在这里插入图片描述

build_dc_generator

题面

在这里插入图片描述

在这里插入图片描述

解析

同上

代码

def build_dc_generator(noise_dim=NOISE_DIM):"""Build and return a PyTorch model implementing the DCGAN generator usingthe architecture described above."""############################################################################### TODO: Implement architecture                                               ##                                                                            ## HINT: nn.Sequential might be helpful.                                      ################################################################################ *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****return nn.Sequential(nn.Linear(noise_dim, 1024),nn.ReLU(),nn.BatchNorm1d(1024),nn.Linear(1024, 7 * 7 * 128),nn.ReLU(),nn.BatchNorm1d(7 * 7 * 128),Unflatten(-1, 128, 7, 7),nn.ConvTranspose2d(128, 64, kernel_size=4, stride=2, padding=1),nn.ReLU(),nn.BatchNorm2d(64),nn.ConvTranspose2d(64, 1, kernel_size=4, stride=2, padding=1),nn.Tanh(),)# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****###############################################################################                               END OF YOUR CODE                             ###############################################################################

输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

c语言函数指针和指针函数的区别,以及回调函数的使用。

函数指针是什么,函数指针本质也是指针,不过是指向函数的指针,存储的是函数的地址。 指针函数是什么,指针函数其实就是返回值是指针的函数,本质是函数。 函数指针是如何定义的呢,如下 void (*pfun)(int a,int b) 这…

服务器的介绍

1.服务器概述 1.1 服务器的基本概念 服务器是计算机的一种,是网络中为客户端计算机提供各种服务的高性能计算机; 服务器在网络操作系统的控制下,将与其相连的硬盘、磁带、 打印机及昂贵的专用通讯设备提供给网络上的客户站点共享&#xf…

2023年国赛 高教社杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

HTTP协议初识·上篇

目录 认识URL urlencode和urldecode 如何编码解码和验证过程 一个基本的网络服务器的流程 代码验证请求与响应 准备工作 HTTPServer.hpp Protocol.hpp makefile 1请求 HTTPServer.hpp 1.0函数handlerHttp-基本流程 再次处理 HttpServer.cc(新建文件) 测试1 -- 请…

iOS开发之查看静态库(.a/.framework)中包含的.o文件和函数符号(ar,nm命令)

.a/.framework其实是把编译生成的.o文件,打包成一个.a/.framework文件。a的意思是archive/归档的意思。 查看静态库.a文件包含的内容用下面的命令解压: ar x xxx.a 用ar命令打包静态库: 参数r是将后面的*.o或者*.a文件添加到目标文件中 参数…

031 - 浮点类型(近似值 FLOAT,DOUBLE)

-FLOAT,DOUBLE: FLOAT和DOUBLE类型代表近似数字数据值。MySQL将四个字节用于单精度值,并将八个字节用于双精度值。 对于FLOAT,SQL标准允许对FLOAT括号中的关键字后面的位以精度(而不是指数的范围)进行可选规…

全流程R语言Meta分析核心技术高阶应用

查看原文>>>全流程R语言Meta分析核心技术高阶应用 目录 专题一、Meta分析的选题与检索 专题二、Meta分析与R语言数据清洗及统计方法 专题三、R语言Meta分析与作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析 专题六、R语言Meta分析的不确定性 专题…

YoloV5环境搭建记录

https://github.com/ultralytics/yolov5/ 1、在Anaconda Promptx新建conda虚拟环境 conda create -n py39_yolov5 python3.9 2、激活虚拟环境 conda activate py39_yolov5 3、虚拟环境下装所需依赖 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cpuo…

代码仓库设置访问权限

通过设置IP白名单的IP范围和访问控制,限制用户的访问和上传下载权限,大大增强仓库的安全性。 对于测试环境和生产环境都不应该增加“允许提交代码”权限 只有开发环境才允许

嵌入式Linux人脸检测libfacedetection

人脸检测 此库依赖Opencv,所以首先要移植Opencv到板子上。 笔者使用LVGL搭建了一个界面,界面有些卡顿(主要原因是文件存取较慢),演示效果如下: OpenCV 首先要交叉编译Opencv 参考:https://…

一生一芯9——ubuntu22.04安装valgrind

这里安装的valgrind版本是3.19.0 下载安装包 在选定的目录下打开终端,输入以下指令 wget https://sourceware.org/pub/valgrind/valgrind-3.19.0.tar.bz2直至下载完成 解压安装包 输入下面指令解压安装包 tar -xvf valgrind-3.19.0.tar.bz2.tar.bz2注&#xf…

春秋云镜 CVE-2019-16113

春秋云镜 CVE-2019-16113 Bludit目录穿越漏洞 靶标介绍 在Bludit<3.9.2的版本中&#xff0c;攻击者可以通过定制uuid值将文件上传到指定的路径&#xff0c;然后通过bl-kernel/ajax/upload-images.php远程执行任意代码。 启动场景 漏洞利用 exp https://github.com/Kenun…

AWS 提示证书签名过期无法自动更新

如果域名没有通过验证的话&#xff0c;证书的过去是没有办法自动更新的。 验证的方式也非常简单&#xff0c;通过下面的配置&#xff0c;把 CNAME添加到你的域名上面&#xff0c;AWS 就可会自动完成验证了。 当添加完成后&#xff0c;AWS 验证需要的时间大致在 30 分钟到 1 个…

优美而高效:解决服务器通信问题

题目背景 在这个问题中&#xff0c;我们面临着一幅服务器分布图。图中的每个单元格可能有服务器&#xff08;标记为1&#xff09;或者没有&#xff08;标记为0&#xff09;。我们的任务是找出能够与至少一台其他服务器进行通信的服务器数量。 算法思路 为了解决这个问题&…

HTTP原理与实现

一、基本概念 一、基本原理* 1、全称&#xff1a; HyperText Transfer Protocol (超文本传输协议) 2、底层实现协议&#xff1a;建立在 TCP/IP 上的无状态连接。 3、基本作用&#xff1a;用于客户端与服务器之间的通信&#xff0c;规定客户端和服务器之间的通信格式。包括请…

婚恋交友h5多端小程序开源版开发

婚恋交友h5多端小程序开源版开发 以下是婚恋交友H5多端小程序的功能列表&#xff1a; 用户注册和登录&#xff1a;用户可以通过手机号码或第三方账号注册和登录。个人信息填写&#xff1a;用户可以填写个人基本信息&#xff0c;包括姓名、性别、年龄、身高、体重、学历、职业等…

Qt应用开发(拓展篇)——示波器/图表 QCustomPlot

一、介绍 QCustomPlot是一个用于绘图和数据可视化的Qt C小部件。它没有进一步的依赖关系&#xff0c;提供友好的文档帮助。这个绘图库专注于制作好看的&#xff0c;出版质量的2D绘图&#xff0c;图形和图表&#xff0c;以及为实时可视化应用程序提供高性能。 QCustomPl…

Docker-Consul

Docker-Consul 一、介绍1.什么是服务注册与发现2.什么是consul3.consul提供的一些关键特性&#xff1a; 二、consul 部署1.环境准备2.consul服务器3.查看集群信息4.通过 http api 获取集群信息 三、registrator服务器1.安装 Gliderlabs/Registrator2.测试服务发现功能是否正常3…

基于深度学习的图像风格迁移发展总结

前言 本文总结深度学习领域的图像风格迁移发展脉络。重点关注随着GAN、CUT、StyleGAN、CLIP、Diffusion Model 这些网络出现以来&#xff0c;图像风格迁移在其上的发展。本文注重这些网络对图像风格迁移任务的影响&#xff0c;以及背后的关键技术和研究&#xff0c;并总结出一…

Qt(C++)计算一段程序执行经过的时间

一、前言 在许多应用程序和系统中,需要对经过的时间进行计算和记录。例如 可能想要测量某个操作的执行时间,或者记录一个过程中经过的时间以进行性能分析。在这些场景下,准确地计时是非常重要的。 Qt提供了一个功能强大的计时器类QElapsedTimer,可以方便地记录经过的时间…