使用 CNN 生成/合成数据

数据挖掘 卷积 生成模型
2022-02-21 05:11:37

是否可以使用经过训练的 CNN 来生成数据?在对 X 和相应 Y 的数据进行训练后,给定一个新的 Y 来生成 X?还是我必须使用 GAN 或 RNN?我对这个主题还很陌生,所以如果我必须朝这个方向发展,我很乐意有一些线索。

目前我正在学习 tensorflow 并尝试实现“Convolutional Sequence to Sequence Learning”论文

澄清:我想使用 CNN 生成文本序列。我有一个非常大的描述数据库,也是 1000 个类中的一个,并且想用 CNN 进行尝试(因为我来自图像分类)

1个回答

一般来说,如果你想生成 X 或 X、Y 对的数据,那么你应该从训练生成模型开始——而不是判别模型,这是大多数 NN 分类器的模型。生成模型有很多种。

变分自动编码器(VAE) 和生成对抗网络(GAN) 最近已经在图像上得到了有趣的结果——尽管两者都需要大量的训练数据和时间,并且仅限于相对较小的图像尺寸(例如 128x128)。这两种设计有许多子类型,包括试图结合两者优势的组合 VAEGAN 。

使用经过训练的 CNN,您可以生成数据。您可以从 X 和 Y 的任意值开始,然后使用反向传播来计算成本函数的梯度。但不是使用梯度来更新权重,而是一直反向传播到输入,并使用输入处的梯度来改变 X,重复该过程多次。

这本质上就是 Deep Dream 和 Style Transfer 的工作方式(尽管通常这些不使用 Y 值,而是在层内选择激活值)。这种方法有一个主要警告 - 您生成的 X 不会从网络训练过的 X 的任何分布中均匀采样。相反,您将为给定的 Y 生成“超级刺激”X。

你提到了RNN。这些可用于生成 X 的一种方法是从它们的输出中采样并将其反馈到输入中。对于文本序列,这往往会产生语法正确的废话。我不确定这是否会被视为严格的生成模型,因为我不清楚输入 X 是否被均匀采样。您可能也可以使用该方法来生成图像,尽管您必须小心定义序列是什么(只是逐行的像素序列可能不会产生任何可识别的图像)。