代码理解误区
1、在定义生成器的函数中,对于第一层卷积层,输入256*256*3的遮挡图,使用64个4*4的卷积核,步长为2,same填充,对于输出的图像尺寸一开始总觉得是256*256,因为一直觉得same填充时尺寸不发生改变,但是查了查步长的作用发现即使是用same填充,步长也会影响尺寸的大小,所以总结得出:求尺寸面对same填充时根据步长尺寸进行成倍的缩小,而面对valid填充时可以直接使用上一层的输出尺寸减去卷积层或者池化层的尺寸(Conv2D或者MaxPooling2D)然后是指减法结果除以步长,然后再加上1即可。
Stride的作用:是成倍缩小尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3。
未解决内容:Conv2D或者MaxPooling2D是什么含义?
3*3*1的张量和4*4*1的张量与2*2的卷积核在步长为2的same填充时输出结果都是2*2,不太搭步长成比减少的定义,需要延申探讨?
2、解码器是使用上采样层+卷积来完成的:输入为8*8*512,添加上采样层后,再进行卷积核改为256个,尺寸为4*4、步长为1、same填充的卷积操作后,为什么输出是16*16*256,16的由来与编码器时的步长无关嘛,还是说不管在编码器中卷积所用的步长为任意数,解码器在进行完第一层上采样+卷积之后尺寸都是会扩大2倍;如果编码器是步长都是3,那么在解码器在进行完第一层上采样+卷积后输出的特征图的尺寸会是输入图尺寸的3倍嘛?
3、在编码器与解码器的这个过程中所减少和增加的尺寸是只是对输入图进行放大缩小(所得到的区域是输入图的全部)还是通过对输入图进行放大缩小获得不同区域的图片(所得到的区域是输入图的某一部分)。?
4、生成器逐块进行summary展示
5、判别器中为什么拉伸之后变成一维的4*4*512*2=16384个元素的张量?
6、判别器中的全连接层里的内容为何是那样(输入神经元个数为1,是因为二分类嘛)?为什么是二分类?
7、生成器和判别器返回前的尺寸定义可以写在卷积之前嘛?
8、如何判别cpu与gpu的内存大小?
9、网络中参数?
10、自动编码器是什么,为什么说是通过与自动编码器的类比,提出了上下文编码器?
11、GAN对抗学习来优化模型?
12、如果使用AlexNet网络进行特征提取、修复,它使用的也是编码器,解码器,但它解码生成的是原始尺寸大小的。该怎么做?
13、全通道连接层使得解码器中的每个单元可以对整个图像内容进行推理去解码,怎么解码?
14、optimizer = Adam(0.0002, 0.5)#优化器,并设置相关参数:参数有什么含义吗?
15、中间层怎么办?
16、
# 准备联合训练
self.discriminator.trainable = False#首先将判别器设置为不可训练
masked_img = Input(shape=self.img_shape)#送入生成器的遮挡图像的Input尺寸
gen_missing = self.generator(masked_img)
valid = self.discriminator(gen_missing)#将valid等于由判别器产生的结果,输入为生成的遮挡图像
#编译联合输入模型,模型的输入是遮挡图像masked_img,第一个输出是生成的遮挡修复内容gen_missing,第二个输出是将修复内容送到判别器网络给出的是真实的概率
self.combined = Model(masked_img, [gen_missing, valid])
#由第一个输入到第一个输出使用的损失函数是mse L2的损失,第二个也就是判别器我们使用的损失函数是二进制交叉熵损失函数
self.combined.compile(loss=['mse', 'binary_crossentropy'],
loss_weights=[0.999, 0.001],#损失函数的相关拉姆达量
optimizer=optimizer)
17、判别器哪来的全连接?
18、validity = model(img)中的img与self.img_shape中的img是不是撞了?