先训练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精简代码的更多相关文章

  1. asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  2. MVC过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  3. 二维码zxing源码分析(五)精简代码

    由于工作的需要,我并不是需要二维码扫描的所有的功能,我只是需要扫一扫,并显示出来图片和url就行,于是我们就要精简代码了,源码已经分析完了,精简起来就方便多了,源码分析请看 二维码zxing源码分析( ...

  4. Idea集成Lombok代码注释来精简代码

    转载http://www.cnblogs.com/holten/p/5729226.html Lombok介绍及使用方法 lombok简介 lombok是暑假来到公司实习的时候发现的一个非常好用的小工 ...

  5. [原]实例-简单设计&精简代码&复用代码

    引言 本文以实际项目为例谈一谈我个人对于软件开发的理解,偏细节   软件项目B 基于.net平台,使用WPF框架,c#语言,MVVM模式开发的桌面软件 该软件支持可视化的设计器功能,允许所见即所得的方 ...

  6. JavaScript精简代码 非一般的写法(转载)

    摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写. 转 ...

  7. 纯javascript验证,100行超精简代码。

    这篇文章转自--寒飞,原帖地址http://blog.csdn.net/luoyehanfei/article/details/42262249 QQ交流群235032949 纯javascript验 ...

  8. 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 ...

  9. Python核心技术与实战——二一|巧用上下文管理器和with语句精简代码

    我们在Python中对于with的语句应该是不陌生的,特别是在文件的输入输出操作中,那在具体的使用过程中,是有什么引伸的含义呢?与之密切相关的上下文管理器(context manager)又是什么呢? ...

  10. P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码

    题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...

随机推荐

  1. C# 数据结构之嵌套加法、嵌套乘法

    复杂性度量问题 1.大O复杂度:嵌套加法 找出以下代码片段的 Big O 复杂度. using System; namespace Chapter_1 { class Challenge_1 { st ...

  2. zk-复制安装

      Zookeeper系列一:Zookeeper介绍.Zookeeper安装配置.ZK Shell的使用   一.Zookeeper介绍 1. 介绍Zookeeper之前先来介绍一下分布式 1.1 分 ...

  3. 【C++】之前学习C++没有注意到的点或者学到了冷知识(待补充)

    1.string和c_str() string str = "hello"; const char* cstr = str.c_str(); str = "yep,i m ...

  4. python bottle小记

    # coding=utf-8import bottle @bottle.route('/url/url', method=['GET','POST'])def big_data(): # 获取请求参数 ...

  5. 高CPU Java应用分析

    模拟CPU 40%左右 import java.util.concurrent.CountDownLatch; public class Main extends Thread { private C ...

  6. python调用C库的方法

    主要介绍两种,一种是python的标准库内置的ctype,另一种是第三方的pybind11. 除此之外,还有其他的方案,例如,CFFI.Cython等等. 一.python的标准库ctype

  7. 如何理解JavaScript中常用的4种排序算法?

      如何理解JavaScript中常用的4种排序算法? 冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍: ...

  8. android studio 查看工程所有动画资源

  9. C语言学习--练习--合并两个字符串

    将两个字符串合并追加在一起, 类似于python的str1+str2 #include<stdio.h> #include<string.h> #include<stdl ...

  10. vscode个人常用插件

    1.个人常用插件记录一下,2020年7月6日