如何使用DBN来重建具有衰落模式的稀疏矩阵图像

时间:2019-02-15 16:36:52

标签: machine-learning deep-learning rbm image-generation dbn

我有一个数据集,其中包含尺寸为30 x 15像素的图像。在此数据集中,存在从左到右沿y方向变化的轨迹。跟踪通常从(20,0)开始。每个下一个像素在右侧一个,在其上方,下方或相同高度是伪随机的。例如,以下数组包含向右前进的合理点[(19,1),(20,1),(21,1)]。

我现在想训练一个深度信任网络,该网络由2条受限Bolzman机器层(1200和2400过滤器)组成。测试数据集由相似(但不相同)的迹线组成,但迹线仅是长度的一半。

然后,我尝试利用DBN的生成特性来预测剩余像素。

我首先使用一个可以预测类似MNIST图像的网络作为健全性检查和起点。这很好。请参见下图。 mnist-like regeneration 图像:重新生成类似MNIST的图像。左:全迹;中:一半的痕迹;右:从网络生成的图像

然后,我修改了网络,生成了先前描述的输入数据并训练了网络。当删除数据的左侧部分时,网络能够重新生成数据(尽管并非完全正确,但它会生成像素)。请参见下图。

Re-generating a trace to the left 图像:重新生成左侧的迹线。左:全迹;中:一半的痕迹;右:从网络生成的图像

现在,我正在尝试重新生成右侧的内容。有时会生成单个像素,大多数情况下不会生成任何像素。请参见下图。 Re-generating a trace to the right 图片:重新生成右侧的跟踪。左:全迹;中:一半的痕迹;右:从网络生成的图像

为了确保网络能够真正学到一些东西,我对前20个过滤器进行了可视化处理。他们显示(20,0)的扇出。这是我所期望的一种模式,并向我表明该网络确实学到了一些东西。请参见下图。 enter image description here 图片:各种权重的可视化

为了确保我的网络可以实际生成类似的数据,我创建了带有水平条的数据集。我将条形切成两半,然后让网络生成剩余的像素。它可以做到这一点而没有任何问题。请参见下图。 horizontal bars 左:全迹;中:一半的痕迹;右:从网络生成的图像

我的原始数据集只包含0或1作为浮点变量中的值。我的一种预感是它不能通过特定的阈值从0跳到1。我还尝试在0和1之间分配统一的随机值。结果是它实际上删除了像素。 (见下图) Trace with uniform pixels 左:全迹;中:一半的痕迹;右:从网络生成的图像

权重也显得不太强烈: Weights for the uniform dataset

问题:为了使图像重新生成右侧丢失的像素,我应该更改什么?

注意:鉴于过滤器显示了我期望的模式,我认为培训时间更长/培训更多数据/使网络更深入/改变学习率并不一定是答案,但我不能排除它

可能的想法:

  • 在右侧增加权重
  • 强制/鼓励(以某种方式)对图像进行更多更改/降低(以某种方式)更改的阈值
  • 创建一个数据集,在该数据集中,右移时轨迹的像素值会增加和减小(与随机分配相反)

P.S。可以使用替代网络的技巧,但我确实正在寻找使用DBN / RBM的解决方案

0 个答案:

没有答案