2017-09-11 139 views
0

我有两个ndarrays,输入和结果,二者由多个阵列看起来像这样:整形Keras输入为LSTM

inputs = [ 
    [[1,2],[2,2],[3,2]], 
    [[2,1],[1,2],[2,3]], 
    [[2,2],[1,1],[3,3]], 
    ... 
] 
results = [ 
    [3,4,5], 
    [3,3,5], 
    [4,2,6], 
    ... 
] 

我设法起来分成训练集和测试阵列,其中列车含有66%的阵列和测试其他33%。现在我想重塑它们以便在我的LSTM中进一步使用,但是在将它们输入到np.reshape()函数中时脚本失败。

split = int(round(0.66 * results.shape[0])) 
train_results = results[:split, :] 
train_inputs = inputs[:split, :] 
test_results = results[split:, :] 
test_inputs = inputs[split:, :] 
X_train = np.reshape(train_inputs, (train_inputs.shape[0], train_inputs.shape[1], 1)) 
X_test = np.reshape(test_inputs, (test_inputs.shape[0], test_inputs.shape[1], 1)) 

请告诉我如何在这种情况下正确使用np.reshape()。

基本上我松散下面这个教程:https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent

+0

这取决于你的输入数据,你能形容此行的投入? '[[1,2],[2,2],[3,2]]' –

+0

感谢您的回答。这些数组是时间步骤,每个都有两个特征。但是,这些时间步只是许多序列中的一部分。 因此,例如在第1小时1你有1个苹果和2个桔子。第1天2小时,你有2个苹果和2个橙子...第2天1小时你有2个苹果和2个橙子等等.. – sbz

+0

看起来你不需要重塑 –

回答

2

你只传递一个元组np.reshape

对于LSTM图层,需要形状如(NumberOfExamples, TimeSteps, FeaturesPerStep)

所以,我们需要知道你的序列有多少个步骤。通过X阵列的外观,我会假设你有3个步骤和2个特征。

如果是这样的话:

X_train = train_inputs.reshape((split,3,2)) 
X_test = X_test.reshape((test_inputs.shape[0], 3, 2)) 

否则,如果你想6个步骤一个特征,形状(split,6,1)。只要形状中三个元素的乘积必须始终保持相同,您可以执行任何操作。

对于结果。你是否希望结果成为顺序结果,匹配输入步骤?或者它们只是单个输出(整个序列的两个独立输出)?

既然你已经有了3分的结果,我假设你有3个时间步长,我会认为这3个结果顺序一样,所以,我将重塑他们作为:

Y_train = train_results.reshape((split,3,1)) #three steps, one result per step 
#for this to work, your last LSTM layer should use `return_sequences=True`. 

但如果是3个独立的结果:

Y_train = train_results.reshape((split,3)) 
#for this to work, you must have 3 cells in the last layer, be it a Dense or an LSTM. But this LSTM must have `return_sequences=False`. 
+0

嗨丹尼尔,非常感谢你帮助。你的假设正确,结果顺序以及每个结果对应于一个序列。现在Numpy接受我的输入。现在用Keras使用我的输入,我正在做'model.add(LSTM(3,input_dim =(3,2),return_sequences = True))'但是出现错误'只能连接元组(不是“int”)为元组”。你能请这么好心帮忙吗? – sbz

+0

您必须使用'input_shape'而不是'input_dim'。 ---'input_shape'采用“元组”,而'input_dim'采用整数。 ('input_dim'只适用于不需要二维输入形状的图层) –