Code测试(1.5):Fixed-Point PK StarGan

19年ICCV出的 Fixed-point 是真的在STARGAN 基础上进行的improvement

There are only a very little different,but it is just most important.

Why?

Not only because of its new items, but also for its new application for medical images.

By the way ,the network design is the same as STARGAN expert for tanh() function, for fixed-point gan,

it uses tanh() in its solver.py

So…let us start with its improvement for generator.

______No, firstly we will see the model design from both of them

1) InstanceNorm

一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。


layers.append(nn.InstanceNorm2d(conv_dim, affine=True, track_running_stats=True))

【PyTorch学习之归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)】https://blog.csdn.net/shanglianlm/article/details/85075706

2) nn.Sequential()

Defination:

A sequential container. Modules will be added to it in the order they are passed in the constructor. Alternatively, an ordered dict of modules can also be passed in.

一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行,同时以神经网络模块为元素的有序字典也可以作为传入参数。

先看一下初始化函数__init__,在初始化函数中,首先是if条件判断,如果传入的参数为1个,并且类型为OrderedDict,通过字典索引的方式将子模块添加到self._module中,否则,通过for循环遍历参数,将所有的子模块添加到self._module中。注意,Sequential模块的初始换函数没有异常处理,所以在写的时候要注意,注意,注意了

因为每一个module都继承于nn.Module,都会实现__call__与forward函数,具体讲解点击这里,所以forward函数中通过for循环依次调用添加到self._module中的子模块,最后输出经过所有神经网络层的结果


通过Squential将网络层和激活函数结合起来,输出激活后的网络节点。

reference:

https://blog.csdn.net/dss_dssssd/article/details/82980222

3)ReLU function()

activate function

4)Repeat()

repeat是属于ndarray对象的方法,使用它可以通过两个管道:

(1)numpy.repeat(a,repeats,axis=None);

(2)object(ndarray).repeat(repeats,axis=None):

【Numpy攻略系列:repeat函数】

https://blog.csdn.net/u010496337/article/details/50572866/

5)Cat()

cat()连接字符串 

Series.str.cat(others=None, sep=None, na_rep=None)

参数:

others : 列表或复合列表,默认为None,如果为None则连接本身的元素

sep : 字符串 或者None,默认为None

na_rep : 字符串或者 None, 默认 None。如果为None缺失值将被忽略。

返回值:

concat : 序列(Series)/索引(Index)/字符串(str)

6) Conv2d()

主要实现了输入张量与设定卷积核的卷积操作,将两个4维的向量input(样本数据矩阵)和filter(卷积核)做卷积运算,输出卷积后的矩阵

tf.nn.conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

input,filter自然是设定的输入和卷积核了,参数strides,padding分别决定了卷积操作中滑动步长和图像边沿填充的方式。

input的形状:[batch, in_height ,in_width, in_channels]

batch: 样本的数量

in_height :每个样本的行数

in_width: 每个样本的列数

in_channels:每个样本的通道数,如果是RGB图像就是3

filter的形状:[filter_height, filter_width, in_channels, out_channels]

filter_height:卷积核的高

filter_width:卷积核的宽

in_channels:输入的通道数

out_channels:输出的通道数

https://www.jianshu.com/p/3671fac97d43

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论