繁体   English   中英

神经网络预测变成一条直线

[英]Neural network Prediction becomes a straight line

我实现了一个两层神经网络(根据 Kolmogorov-Arnold 定理,这足以表示 n 个变量的任何非线性函数)来预测时间序列。 然而,到神经网络结束时,接收到的预测波动率下降到几乎为零,并变成一条直线(我附上预测屏幕和神经网络的源代码)。 我增加了隐藏层的神经元数量、epoch 数、训练样本的大小、学习率,改变了训练样本数据的归一化范围,改变了初始权重的范围。 没有什么帮助。 训练样本大小为336个样本,训练方法为误差反向传播,归一化方法为minimax。 此外,当使用双曲正切作为激活函数时,情况有所改善,但图形看起来也很奇怪。 ReLU 输出“直接预测”。 有人对这个问题有任何想法吗?

import random
import sys
import numpy
import math

eta=0.0001 #learning rate
n=200 #number of training epoch. There were also 500, 1000, 5000
inp=30 #input layer size
m=60 #hidden layer size
y=0 #output signal
t=0 #target signal
e=0 #error
d_y=0 #local gradient for the last neuron
err=0 #calculated network error for output neuron
err_av=0 #average network error
path='dataTrain.txt' #training sample
path2='dataLaunch.txt' #launching a forecast
day = 365 #number of days of forecasting
...

其余的在网站上: https ://ideone.com/vV2QW6

截图(激活函数-sigmoid): https ://ibb.co/GHrTGLr

截图(激活函数-双曲正切): https ://ibb.co/WHFX3Sc

感谢关注。

这个问题很难回答,因为您正在尝试使用不是为此目的设计的工具来解决时间序列问题。 RNN 或 LSTM 会更合适。

根据我对您编写的代码的理解,您似乎已将输入大小(至 30 天)固定为预测第 31 天。 然后滑动 30 天窗口以包含该预测(并排除第 1 天),以便您可以预测第 32 天。 如果我的理解是正确的,你遇到的现象可以简单解释(我希望):

预计第 31 天和第 32 天的预测不会有那么大的不同,因为它们是由非常相似的输入做出的。 32 和 33 等相同。最终所有输入变得更加相似(因为这些包括我们已经建立的预测是相似的)并且输出变得更加相似,直到你得到看起来恒定的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM