DAST精简代码
先训练G:
先不计算D的梯度: 判别器输入类型为(源域,0)或者(目标域,1),输出图片为真实图片(源域)的概率值
for param in model_D.parameters(): # model_D = nn.ModuleList([FCDiscriminator...]) 判别器是一个全卷积网络,其实就是一个二分类,输出一个条件概率,即输入样本属于源域或者目标域的概率
param.requires_grad = False 判别损失 Ld 是一个二分类交叉熵损失,判断输入属于源域还是目标域
怎么才算训练好判别器:判别器能对真图打高分,对假图打低分
输入图片:
images.size: torch.Size([1, 3, 512, 1024])
labels.size: torch.Size([1, 512, 1024])
源域图片S 的输出分割特征图:
feat_source: ([1, 2048, 65, 129])
pred_source: ([1, 19, 65, 129])
输出特征图接一个上采样后 pred_source 大小变成: ([1, 19, 512, 1024])
计算交叉熵损失:
loss_seg = seg_loss(pred_source, labels)
计算梯度值,并反传梯度值: (只是计算,不更新)
loss_seg.backward()
目标域图片T的大小、特征图大小 和上面的源域S一样,不同的是,经过分割网络时,得到一个加权的特征图(注:加权后的特征图大小不变)
和S一样,得到特征图后,接一个上采样:
pred_target = interp_target(pred_target)
先损失清零
loss_adv = 0
然后计算判别损失值,即对倒数第二层的T域特征图打分
D_out = model_D[0](feat_target) (判别器D[0]输入通道为2048,输出通道为1)
再用上面的判别损失值来计算对抗损失,即用bce_loss(即均方差MSELoss())来计算D_out和source_label的分布差
loss_adv += bce_loss(D_out, torch.FloatTensor(D_out.data.size()).fill_(source_label).to(device)) # source_label=0
先对最后一层的T域特征图打分:特征图先变成概率图(用softmax()),然后对概率图打分
D_out = model_D[1](F.softmax(pred_target, dim=1)) (判别器D[1]输入19,输出1)
然后计算对抗损失:
loss_adv += bce_loss(D_out, torch.FloatTensor(D_out.data.size()).fill_(source_label).to(device))
loss_adv = loss_adv * 0.01
计算梯度值,并将梯度反传:
loss_adv.backward()
更新模型参数:
optimizer.step()
再训练D:
DAST精简代码的更多相关文章
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- MVC过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- 二维码zxing源码分析(五)精简代码
由于工作的需要,我并不是需要二维码扫描的所有的功能,我只是需要扫一扫,并显示出来图片和url就行,于是我们就要精简代码了,源码已经分析完了,精简起来就方便多了,源码分析请看 二维码zxing源码分析( ...
- Idea集成Lombok代码注释来精简代码
转载http://www.cnblogs.com/holten/p/5729226.html Lombok介绍及使用方法 lombok简介 lombok是暑假来到公司实习的时候发现的一个非常好用的小工 ...
- [原]实例-简单设计&精简代码&复用代码
引言 本文以实际项目为例谈一谈我个人对于软件开发的理解,偏细节 软件项目B 基于.net平台,使用WPF框架,c#语言,MVVM模式开发的桌面软件 该软件支持可视化的设计器功能,允许所见即所得的方 ...
- JavaScript精简代码 非一般的写法(转载)
摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写. 转 ...
- 纯javascript验证,100行超精简代码。
这篇文章转自--寒飞,原帖地址http://blog.csdn.net/luoyehanfei/article/details/42262249 QQ交流群235032949 纯javascript验 ...
- PAT 甲级 1069 The Black Hole of Numbers (20 分)(内含别人string处理的精简代码)
1069 The Black Hole of Numbers (20 分) For any 4-digit integer except the ones with all the digits ...
- Python核心技术与实战——二一|巧用上下文管理器和with语句精简代码
我们在Python中对于with的语句应该是不陌生的,特别是在文件的输入输出操作中,那在具体的使用过程中,是有什么引伸的含义呢?与之密切相关的上下文管理器(context manager)又是什么呢? ...
- P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码
题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...
随机推荐
- sxt_(001_003)_spring_ioc
一.spring简介 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架.Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可 ...
- Generamba构建模板,让开发变得更高效
Generamba Generamba:是为使用 Xcode 而设计的代码生成器.它主要设计用于生成 VIPER 模块,但很容易自定义模板以生成任何其他模板(在 Objective-C 和 Swift ...
- Camstar报错:cannot be accessed through null object reference at CDO 'xxx'
- 「部署日记」Android Studio乱码解决方案
弄了一台新电脑,第一件事肯定是弄好打造台啦 于是VS.AS.CRD.NSIS.Adobe全家桶全安装完毕, 问题来了,在打开Android Studio时,出现乱码,比如 这样的: 这样的: 这样的: ...
- OSPF的安全认证
OSPF的安全认证 OSPF通过LSA报文同步状态信息,协议根据LSA提供的状态信息,快速实行全网路由的建立.也就是一通百通,一变则变.坏处就是有人搞破坏,一坏则百坏.为防止网络破坏活动,实行认证(明 ...
- testtesttest
test test 2022-09-24 #include<iostream> using namespace std; int main(){ cout<<&qu ...
- 使用nvm安装不同版本的NodeJS
下载及安装 下载地址:https://github.com/coreybutler/nvm-windows/releases 配置nodejs的镜像地址 nvm node_mirror https:/ ...
- Java 分布式锁实现的一些实践
近期换工作,闲下来有点时间写点东西,在这里分享一些心得体会 背景:我们在做后端开发时,无法避免的会遇到一些一致性问题,有时候我们前端的小伙伴或者rpc接口的调用方,在很短的时间间隔内给我们相同的请求, ...
- Anaconda之conda常用命令介绍
anaconda用法: 查看已经安装的包: pip list 或者 conda list 安装和更新: pip install requests pip install requests --upgr ...
- CF1033E 题解
题意 传送门 交互题,给定一个简单连通图,你可以询问一个点集 \(s\),返回其导出子图的边数.判断此图是否为二分图:若是,输出其中一部点的集合:否则输出任一个奇环.最多询问 \(20000\) 次. ...