什么是最适合用于时间序列预测的激活函数

2024-10-02 02:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Keras的序列模型,具有密集层类型。我写了一个函数,它递归地计算预测,但是这些预测离我很远。我想知道什么是我的数据最好的激活函数。目前我正在使用硬乙状体函数。输出数据值的范围为5到25。输入数据具有形状(6,1),输出数据为单个值。当我绘制预测图时,它们从不减少。谢谢你的帮助!!在

# create and fit Multilayer Perceptron model
model = Sequential();
model.add(Dense(20, input_dim=look_back, activation='hard_sigmoid'))
model.add(Dense(16, activation='hard_sigmoid'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=200, batch_size=2, verbose=0)

#function to predict using predicted values
numOfPredictions = 96;

for i in range(numOfPredictions):
    temp = [[origAndPredictions[i,0],origAndPredictions[i,1],origAndPredictions[i,2],origAndPredictions[i,3],origAndPredictions[i,4],origAndPredictions[i,5]]]
    temp = numpy.array(temp)
    temp1 = model.predict(temp)   
    predictions = numpy.append(predictions, temp1, axis=0)
    temp2 = []
    temp2 = [[origAndPredictions[i,1],origAndPredictions[i,2],origAndPredictions[i,3],origAndPredictions[i,4],origAndPredictions[i,5],predictions[i,0]]]
    temp2 = numpy.array(temp2)
    origAndPredictions = numpy.vstack((origAndPredictions, temp2))

enter image description here

更新: 我用这段代码实现了swish。在

^{pr2}$

New plot of predictions using swish.

更新: 使用此代码:

^{3}$

enter image description here

谢谢你的帮助!!在


Tags: 数据函数numpyaddmodelactivationpredicttemp
2条回答

虽然没有最好的激活函数,但是我发现^{}对于时间序列问题尤其有效。AFAIK keras不提供Swish内置,您可以使用:

from keras.utils.generic_utils import get_custom_objects
from keras import backend as K
from keras.layers import Activation

def custom_activation(x, beta = 0.999):
        return (K.sigmoid(beta * x) * x)

get_custom_objects().update({'custom_activation': Activation(custom_activation)})

然后在模型中使用:

^{pr2}$

您的输出数据范围从525,并且您的输出ReLU激活将为您提供从0到{}的值。因此,您尝试的是“参数化”您的输出或规范化您的标签。这意味着,使用sigmoid作为激活(在(0,1)中的输出)并通过减去5并除以20来转换标签,因此它们将(几乎)处于与输出相同的间隔[0,1]。或者你可以使用sigmoid,在计算损耗之前,将输出乘以20再加上5。在

很有兴趣看看结果。在

相关问题 更多 >

    热门问题