这通常是通过递归神经网络(RNN)来完成的,当接收到下一个输入时,RNN会保留上一个输入的一些内存。多数民众赞成在简短的解释发生了什么,但是互联网上有很多资源可以更好地总结您对它们如何工作的理解。
让我们通过一个简单的示例对此进行分解。假设您有5个样本和5个数据特征,并且您希望两个数据交错排列而不是20行,而不是2行。这是您的数据(假设有1只股票,并且最早的价格是第一位)。我们可以将每一行视为一周中的一天
ar = np.random.randint(10,100,(5,5))[[43, 79, 67, 20, 13], #<---Monday--- [80, 86, 78, 76, 71], #<---Tuesday--- [35, 23, 62, 31, 59], #<---Wednesday--- [67, 53, 92, 80, 15], #<---Thursday--- [60, 20, 10, 45, 47]] #<---Firday---
要使用
LSTMin
keras,您的数据需要是3D的,而现在的数据是2D的结构,每个小数的符号是
(samples,timesteps,features)。目前只有您拥有,
(samples,features)因此您需要扩充数据。
a2 = np.concatenate([ar[x:x+2,:] for x in range(ar.shape[0]-1)])a2 = a2.reshape(4,2,5)[[[43, 79, 67, 20, 13], #See Monday First [80, 86, 78, 76, 71]], #See Tuesday second ---> Predict Value originally set for Tuesday [[80, 86, 78, 76, 71], #See Tuesday First [35, 23, 62, 31, 59]], #See Wednesday Second ---> Predict Value originally set for Wednesday [[35, 23, 62, 31, 59], #See Wednesday Value First [67, 53, 92, 80, 15]], #See Thursday Values Second ---> Predict value originally set for Thursday [[67, 53, 92, 80, 15], #And so on [60, 20, 10, 45, 47]]])
请注意数据是如何交错和3维的。现在只需建立一个
LSTM网络。由于这是多对一结构,因此Y仍为二维,但是您需要裁剪第一个值。
model = Sequential()model.add(LSTM(hidden_dims,input_shape=(a2.shape[1],a2.shape[2]))model.add(Dense(1))
这只是一个让您动起来的简短示例。有许多有效的设置(包括不使用RNN),您需要为数据找到正确的设置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)