受到博客文章http://blog.avenuecode.com/using-deep-convolutional-neural-networks-dcnns-for-time-series-forecasting-using-tensorflow-part-1的启发,该文章将电力消耗时间序列转换为图像表示进行预测,我在思考如何使用同样的概念预测时间序列的下一个值来构建一个拼图游戏。然而,时间序列是以图像形式表示的。我不理解的一点是标签/预测器输出应该是什么?例如,在下面的代码中,图像A
之后是B
,因为B
是从A
之后的下一个时间点生成的。目标是模型应该能够按顺序排列图像以构建拼图。
问题1)在训练过程中,标签应该是什么?我将会有多个这样的图像。然后,在测试过程中,我会打乱序列,模型应该给我正确的顺序,即预测下一个图像。这是可能的吗?
问题2)我将图像表示为灰度图。是否有更好的彩色可视化方式,使其在视觉上更容易区分,而不是仅仅是盐和胡椒的可视化?
对建议表示非常感激
clear alldata=100*rand(3000,1);x1= data(1:1024);img1=reshape(x1,32,32);img11=double(repmat(img1,[1 1 3]));imwrite(uint8(img11), 'A.jpg');x2= data(1025:2048);img2=reshape(x2,32,32);img22=double(repmat(img2,[1 1 3]));imwrite(uint8(img22), 'B.jpg');
回答:
那么你想使用时间序列进行预测?
嗯,使用图像来表示时间序列数据实际上并不太合理。你真正想要的是数据点本身,而不是数据点的某种可视化。有一些神经网络是专门为时间序列分析进行预测而设计的,据我所知,它们都不接受图像作为输入。你真正想要的是一种被称为循环神经网络(RNN)的技术。在你的使用案例中,你可能会发现长短期记忆(LSTM)网络特别有用。
如果你真的被困在使用图像上,我没有足够的经验来告诉你什么可能是最好的方法。然而,确实有研究表明已经这样做了。这里还有一个额外的例子。
- 在训练过程中,标签应该是什么?
嗯,你需要某种编码,你提出的字母数字序列应该足够;但使用整数可能会更容易。
然后,在测试过程中,我会打乱序列,模型应该给我正确的顺序,即预测下一个图像。这是可能的吗?
当然,为什么不可能呢?但以这种方式测试存在一个问题,称为信息泄露。你真正想要的是向分类器提供一个它从未见过的来自原始时间序列的新图像,然后看看它是否能预测它在它已经见过的(已训练的)图像序列中的位置。
我将图像表示为灰度图。是否有更好的彩色可视化方式,使其在视觉上更容易区分,而不是仅仅是盐和胡椒的可视化?
查看你提供的教程,最终结果是一个二进制值矩阵(要么是0,要么是1)。黑白图像是表示零和一的矩阵的自然选择。你进一步将其转换为灰度图,现在你使用了0 - 255
所有可能的像素强度值,这是uint8
数据类型可以达到的。在可视化方面你还能做什么?很多,但仅就表示数据矩阵而言不行。如果你希望得到一个RGB图像,过程与灰度图像相同,只是重复三次(红色、绿色和蓝色通道)。然而,在你的问题领域,我实在看不出如何轻松做到这一点。例如,红色通道是什么构成的?绿色和蓝色呢?这告诉我,你当前的可视化技术可能是最好的选择。