从本节开始,我们介绍一种人工智能实现无缝变脸的网络名为可变自动编解码器,英文名称:variational autoencoder。在前面章节中我们曾介绍过,很多事物看起来似乎很复杂,但只要抓住其关键变量,那就等同于抓住事物的本质,例如一个圆柱体,它的关键变量就是底部圆的半径,和高度,掌握了这两个变量的信息,我们可以轻易的将圆柱构造出来。
其实像人脸这种复杂图案,它也包含了对应关键信息,如果能抽取出这些信息,我们就能对人脸图像进行各种平滑变化,而抽取这些信息的责任就得由神经网络来承当。抓取人脸关键信息其实不难,我们只要使用多个卷积网络识别人脸图片,把识别结果转换成一个一维向量,该向量里面的分量其实就是人脸图像的关键信息,在深入人脸变换之前,我们先看一个简单的自动编解码器,首先我们构造编码器,也就是识别输入数据对应的关键信息:
class AutoEncoder():
def __init__(self, input_dim, encoder_conv_filters, encoder_conv_kernel_size, encoder_conv_strides,z_dim,
use_batch_norm = False, use_dropout = False):
'''
input_dim是输入数据的格式,encoder_conv_filters指定每层卷积层包含几个kernel,
encoder_conv_kernel_size指定kernel的大小,encoder_conv_strides指定kernel的跨度,
z_dim表示关键向量的长度
'''
self.input_dim = input_dim
self.encoder_conv_filters = encoder_conv_filters
self.encoder_conv_kernel_size = encoder_conv_kernel_size
self.encoder_conv_strides = encoder_conv_strides
self.z_dim = z_dim
self.use_batch_norm = use_batch_norm
self.use_dropout = use_dropout
self.n_layers_encoder = len(encoder_conv_filters)
self._build() #根据参数构建网络层
def _build(self):
encoder_input
def __init__(self, input_dim, encoder_conv_filters, encoder_conv_kernel_size, encoder_conv_strides,z_dim,
use_batch_norm = False, use_dropout = False):
'''
input_dim是输入数据的格式,encoder_conv_filters指定每层卷积层包含几个kernel,
encoder_conv_kernel_size指定kernel的大小,encoder_conv_strides指定kernel的跨度,
z_dim表示关键向量的长度
'''
self.input_dim = input_dim
self.encoder_conv_filters = encoder_conv_filters
self.encoder_conv_kernel_size = encoder_conv_kernel_size
self.encoder_conv_strides = encoder_conv_strides
self.z_dim = z_dim
self.use_batch_norm = use_batch_norm
self.use_dropout = use_dropout
self.n_layers_encoder = len(encoder_conv_filters)
self._build() #根据参数构建网络层
def _build(self):
encoder_input