我有一个数据集,其中包含尺寸为30 x 15像素的图像。在此数据集中,存在从左到右沿y方向变化的轨迹。跟踪通常从(20,0)开始。每个下一个像素在右侧一个,在其上方,下方或相同高度是伪随机的。例如,以下数组包含向右前进的合理点[(19,1),(20,1),(21,1)]。
我现在想训练一个深度信任网络,该网络由2条受限Bolzman机器层(1200和2400过滤器)组成。测试数据集由相似(但不相同)的迹线组成,但迹线仅是长度的一半。
然后,我尝试利用DBN的生成特性来预测剩余像素。
我首先使用一个可以预测类似MNIST图像的网络作为健全性检查和起点。这很好。请参见下图。 图像:重新生成类似MNIST的图像。左:全迹;中:一半的痕迹;右:从网络生成的图像
然后,我修改了网络,生成了先前描述的输入数据并训练了网络。当删除数据的左侧部分时,网络能够重新生成数据(尽管并非完全正确,但它会生成像素)。请参见下图。图像:重新生成左侧的迹线。左:全迹;中:一半的痕迹;右:从网络生成的图像
现在,我正在尝试重新生成右侧的内容。有时会生成单个像素,大多数情况下不会生成任何像素。请参见下图。 图片:重新生成右侧的跟踪。左:全迹;中:一半的痕迹;右:从网络生成的图像
为了确保网络能够真正学到一些东西,我对前20个过滤器进行了可视化处理。他们显示(20,0)的扇出。这是我所期望的一种模式,并向我表明该网络确实学到了一些东西。请参见下图。 图片:各种权重的可视化
为了确保我的网络可以实际生成类似的数据,我创建了带有水平条的数据集。我将条形切成两半,然后让网络生成剩余的像素。它可以做到这一点而没有任何问题。请参见下图。 左:全迹;中:一半的痕迹;右:从网络生成的图像
我的原始数据集只包含0或1作为浮点变量中的值。我的一种预感是它不能通过特定的阈值从0跳到1。我还尝试在0和1之间分配统一的随机值。结果是它实际上删除了像素。 (见下图) 左:全迹;中:一半的痕迹;右:从网络生成的图像
问题:为了使图像重新生成右侧丢失的像素,我应该更改什么?
注意:鉴于过滤器显示了我期望的模式,我认为培训时间更长/培训更多数据/使网络更深入/改变学习率并不一定是答案,但我不能排除它
可能的想法:
P.S。可以使用替代网络的技巧,但我确实正在寻找使用DBN / RBM的解决方案