这是训练250epoch左右的成果。
之前的文章里面,我们使用了残差网络的形式实现生成器与辨别器,它理论上可以实现很不错的效果,但有一个很致命的缺点,就是训练太慢,很难见到成果。
这一次,我们实现了一个利用自注意力机制制作的对抗生成网络。自注意力机制是我们在深度学习道路上,除了RNN,CNN以外,不得不了解的一种模块。非常有意思。简而言之,这个模块,相比于之前单纯使用卷积网络的GAN,它更加能注重上下文,举个例子,在生成人物眼睛的时候,它会注意到鼻子👃,头发等其他部位,从而将眼睛放在合适的位置,总之,能更好的学习到整体特征。
以下是生成器的代码。注意attn1与attn2层都是我们的自注意力模块,其他是我们所熟悉的DCGAN中使用过的反卷积。默认生成64*64像素的图片,如果想修改图片大小,请修改image_size,以及,后面层次中的channel大小以及selfattention的参数。
class Generator(nn.Module):
def __init__(self, image_size = 64, z_dim = 100, conv_dim =64):
super().__init__()
repeat_num = int(np.log2(image_size)) - 3
mult = 2 **