我正在努力实现的目标。我试图根据下表的多个输入参数预测天然气的开盘价(“NG Open”)。我遵循了一些教程,但它们没有解释特定格式背后的原因。经过多次试验和错误,代码正在工作,但需要对重新塑造数据有一些了解。数据集 - 只有几行。Contract NGLast NGOpen NGHigh NGLow NGVolumes COOpen COHigh COLow2018-12-01 4.487 4.50 4.60 4.03 100,000 56.00 58.00 50.002019-01-01 4.450 4.52 4.61 4.11 93000 51.00 53.00 45.00代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt from keras.layers import Dense from keras.models import Sequential from keras.layers import LSTM import date time from keras import metrics from sklearn.preprocessing import MinMaxScaler data = pd.read_excel("C:\Futures\Futures.xls") data['Contract'] = pd.to_datetime(data['Contract'],unit='s').dt.date data['NG Last'] = data['NG Last'].str.rstrip('s') data['CO Last'] = data['CO Last'].str.rstrip('s') COHigh = np.array([data.iloc[:,8]]) COLow = np.array([data.iloc[:,9]]) NGLast = np.array([data.iloc[:,1]]) NGOpen = np.array([data.iloc[:,2]]) NGHigh = np.array([data.iloc[:,3]]) X = np.concatenate([COHigh,COLow, NGLast,NGOpen], axis =0) X = np.transpose(X) Y = NGHigh Y = np.transpose(Y) scaler = MinMaxScaler() scaler.fit(X) X = scaler.transform(X) scaler.fit(Y) Y = scaler.transform(Y) **X = np.reshape(X,(X.shape[0],1,X.shape[1]))** print(X.shape) model = Sequential() **model.add(LSTM(100,activation='tanh',input_shape=(1,4),** recurrent_activation='hard_sigmoid')) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics = [metrics.mae]) model.fit(X,Y,epochs = 10,batch_size=1,verbose=2) Predict = model.predict(X,verbose=1)题上面用星号标记的代码背后的原因是什么?1> 我有四列作为输入所以不应该是X = np.reshape(X,(X.shape[0],1,X.shape[1], X.Shape[2],X.shape[ 3])) ? 等等所有被视为输入的列?2> 我需要解释下面这一行中的参数。model.add(LSTM(100,activation='tanh',input_shape=(1,4), recurrent_activation='hard_sigmoid'))
1 回答
大话西游666
TA贡献1817条经验 获得超14个赞
您的数据当前是一个形状为 (x,4) 的数组,其中 x 是行数。所以在你提供的玩具数据中,
X.shape
应该返回 (2,4)。如果稍后查看 LSTM 线,您会注意到它正在寻找形状为 (1,4) 的张量——这就是input_shape
参数。这np.reshape
条线是让你到达那里的原因。它正在将您的 2-d 数组转换为 3-d 数组。同样,对于您的示例,X.shape
在您对其进行整形后将返回 (2,1,4)。基本上,您现在有一个长度为 2 的 (1,4) 数组列表,它与 LSTM 层想要的相匹配。我建议您查看LSTM上的 Keras文档,但这基本上是正在发生的事情。100 是该层将拥有的单元(或神经元)的数量。输入形状如上所述。激活是用于计算每个神经元输出的函数。tanh 函数在这个基本设置中是非常标准的,但其他函数也是可能的。看看Keras 提供的开箱即用的激活列表。
添加回答
举报
0/150
提交
取消