【问题标题】:Neural network Prediction becomes a straight line神经网络预测变成一条直线
【发布时间】:2022-07-05 21:25:37
【问题描述】:

我实现了一个两层神经网络(根据 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

感谢关注。

【问题讨论】:

    标签: python machine-learning neural-network


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2012-05-06
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多