Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow VQ-VAE-2文件的实现_Tensorflow_Autoencoder - Fatal编程技术网

Tensorflow VQ-VAE-2文件的实现

Tensorflow VQ-VAE-2文件的实现,tensorflow,autoencoder,Tensorflow,Autoencoder,我正在尝试构建一个2阶段的VQ-VAE-2+像素CNN,如论文所示: “使用VQ-VAE-2生成各种高保真图像”()。 我有3个实施问题: 该文件提到: 我们允许层次结构中的每个级别分别依赖于像素 我知道VQ-VAE-2中的第二个潜在空间必须 条件是第一个潜在空间和 图像的下采样版本。对吗 “使用PixelCNN解码器的条件图像生成”(Conditional Image Generation with PixelCNN Decoders)一文说: h是一个单键编码,它指定了一个与之等价的类 在

我正在尝试构建一个2阶段的VQ-VAE-2+像素CNN,如论文所示: “使用VQ-VAE-2生成各种高保真图像”()。 我有3个实施问题:

  • 该文件提到: 我们允许层次结构中的每个级别分别依赖于像素

  • 我知道VQ-VAE-2中的第二个潜在空间必须 条件是第一个潜在空间和 图像的下采样版本。对吗

  • “使用PixelCNN解码器的条件图像生成”(Conditional Image Generation with PixelCNN Decoders)一文说: h是一个单键编码,它指定了一个与之等价的类 在每一层添加一个依赖于类的偏移

  • 据我所知,这个条件是作为一维张量输入的,通过卷积注入偏置。现在对于一个2阶段的条件PixelCNN,需要对类向量进行条件处理,但也需要对前一阶段的潜在代码进行条件处理。我看到的一种可能性是附加它们并提供一个3D张量。有没有人能想出其他办法

  • 损失和优化在两个阶段中保持不变。只需将每个阶段的损失添加到优化的最终损失中。对吗

  • 与论文作者之一讨论后,我收到了所有这些问题的答案,并在下面分享

    问题1

    这是正确的,但图像的下采样是通过跨步卷积实现的,而不是通过非参数调整大小。这可以作为编码器体系结构的一部分吸收到类似的内容中(每个变量后面的数字表示它们的空间尺寸,例如h64是[B,64,64,D]等等)

    现在,为了获得h32和q32,我们可以:

       h32 = Relu(Conv2D(h64,  stride=(2, 2)))
       h32 = ResNet(h32)
       q32 = Quantize(h32)
    
    通过这种方式,渐变一直流回到图像,因此我们在h32和image256之间存在依赖关系

    在任何地方,您都可以使用1x1卷积来调整最后一个维度(要素层)的大小,使用阶梯式卷积进行下采样,使用阶梯式转置卷积进行上采样空间维度。 因此,对于这个量化底层的示例,您需要首先在空间上向上采样q32,使其成为64x64,并将其与h64组合,然后将结果馈送到量化器。为了获得额外的表现力,我们还在中间插入了一个剩余堆栈。看起来是这样的:

        hq32 = ResNet(Conv2D(q32, (1, 1)))
        hq64 = Conv2DTranspose(hq32, stride=(2, 2))
        h64 = Conv2D(concat([h64, hq64]), (1, 1))
        q64 = Quantize(h64)
    
    问题2

    最初的PixelCNN论文还描述了如何使用卷积进行空间调节。将类嵌入作为全局条件进行展平和附加不是一个好主意。您要做的是应用转置卷积来对齐空间维度,然后应用1x1卷积将特征维度与像素CNN的隐藏重复匹配,然后添加它

    问题3

    分开训练他们是个好主意。除了隔离损失等,并能够为每个阶段调整适当的学习速率外,您还能够为每个阶段使用GPU/TPU的全部内存容量。这些前科在更大范围内做得越来越好,所以不要否认这一点是个好主意

        hq32 = ResNet(Conv2D(q32, (1, 1)))
        hq64 = Conv2DTranspose(hq32, stride=(2, 2))
        h64 = Conv2D(concat([h64, hq64]), (1, 1))
        q64 = Quantize(h64)