python - 为什么 LSTM 模型会在多个模型运行中产生不同的预测?
问题描述
我正在使用长期短期记忆 (LSTM) 来生成预测。我注意到,每次我运行 LSTM 模型时,它都会使用相同的数据生成略有不同的预测。我想知道为什么会发生这种情况,如果我做错了什么?
谢谢你
from numpy import array
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import TimeDistributed
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
# split a univariate sequence into samples
def split_sequence(sequence, n_steps):
X, y = list(), list()
for i in range(len(sequence)):
# find the end of this pattern
end_ix = i + n_steps
# check if we are beyond the sequence
if end_ix > len(sequence)-1:
break
# gather input and output parts of the pattern
seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
X.append(seq_x)
y.append(seq_y)
return array(X), array(y)
def LSTM_Model(Data, N_Steps, Epochs):
# define input sequence
raw_seq = Data
# choose a number of time steps
n_steps_og = N_Steps
# split into samples
X, y = split_sequence(raw_seq, n_steps_og)
# reshape from [samples, timesteps] into [samples, subsequences, timesteps, features]
n_features = 1
n_seq = 2
n_steps = 2
X = X.reshape((X.shape[0], n_seq, n_steps, n_features))
# define model
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(None, n_steps, n_features)))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=Epochs, verbose=2)
#Create Forcasting data
#Now take the last 4 days of the Model data for the forcast
Forcast_data = Data[len(new_data) - n_steps_og:]
# demonstrate prediction
x_input = array(Forcast_data)
x_input = x_input.reshape((1, n_seq, n_steps, n_features))
yhat = float(model.predict(x_input, verbose=0))
return(yhat)
解决方案
许多像这样的方法都是用系数的随机权重初始化的。然后他们为某种损失函数寻找一个好的局部最小值。这意味着他们将(希望)只找到众多近乎最优的解决方案之一,但不太可能找到单一的最佳解决方案,甚至也不会重复找到相同的解决方案。因此,您的结果是典型的,只要您的预测仅略有不同。
这更像是一个通用的机器学习问题,而不是特定于 Python,但我希望这会有所帮助。
推荐阅读
- django - 获取子查询的计数
- django - 需要使我的创建帖子 FBV 不包括当前登录的用户
- c# - 循环通过成员数据的 xunit 测试方法参数
- android - 长时间运行应用程序时使用哪个服务(Android)?
- swift - swift tablecell NSTextAttachment + GIF -> gif 图像不动画
- php - 带有 php 和 mysql 数据库的 Angular 8 跨域请求被阻止:
- arrays - 如何在 Swift 中创建全局数组并在两个 TableView 中保存值
- java - 无法使用 Mockito 模拟 MongoTemplate executeQuery
- java - 尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException
- r - 在 R 中合并大量 CSV 文件?