Python 使用Keras io进行最简单的Lstm培训

Python 使用Keras io进行最简单的Lstm培训,python,lstm,keras,Python,Lstm,Keras,我想使用keras python库创建最简单的LSTM 我有以下代码: import pandas as pd import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.layers.recurrent import LSTM X_train = pd.DataFrame( np.array([ [1, 2], [3, 4],

我想使用keras python库创建最简单的LSTM

我有以下代码:

import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.layers.recurrent import LSTM

X_train = pd.DataFrame( np.array([ [1, 2], [3, 4], [5, 6], [7, 8], [5.1, 6.1], [7.1, 8.1] ]))
y_train = pd.DataFrame( np.array([1, 2, 3, 4, 3, 4]) )
X_test = pd.DataFrame( np.array([ [1.1, 2.1], [3.1, 4.1] ]) )
y_test = pd.DataFrame( np.array([1, 2]) )

model = Sequential()
model.add(LSTM( output_dim = 10, return_sequences=False, input_dim=X_train.shape[1]))
model.add(Dense(input_dim = 10, output_dim=2))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, y_train)
但似乎不起作用

Epoch 1/100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/keras/models.py", line 489, in fit
    shuffle=shuffle, metrics=metrics)
  File "/usr/lib/python2.7/site-packages/keras/models.py", line 201, in _fit
    ins_batch = slice_X(ins, batch_ids)
  File "/usr/lib/python2.7/site-packages/keras/models.py", line 55, in slice_X
    return [x[start] for x in X]
  File "/usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 1908, in __getitem__
    return self._getitem_array(key)
  File "/usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 1952, in _getitem_array
    indexer = self.ix._convert_to_indexer(key, axis=1)
  File "/usr/lib/python2.7/site-packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/indexing.py", line 1121, in _convert_to_indexer
    raise KeyError('%s not in index' % objarr[mask])
KeyError: '[3 4 2 5] not in index'
纪元1/100
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/site packages/keras/models.py”,第489行
洗牌=洗牌,指标=指标)
文件“/usr/lib/python2.7/site packages/keras/models.py”,第201行
ins\U batch=slice\U X(ins,批次ID)
文件“/usr/lib/python2.7/site packages/keras/models.py”,第55行,在slice\u X中
返回[x]中x的x[开始]
文件“/usr/lib/python2.7/site packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py”,第1908行,位于__
返回self.\u getitem\u数组(键)
文件“/usr/lib/python2.7/site packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/frame.py”,第1952行,在_getitem_数组中
索引器=self.ix.\u转换为索引器(键,轴=1)
文件“/usr/lib/python2.7/site packages/pandas-0.17.0-py2.7-linux-x86_64.egg/pandas/core/index.py”,第1121行,在“convert_to_indexer”中
raise KeyError(“%s”不在索引“%objarr[mask]”中)
KeyError:“[3 4 2 5]不在索引中”
谁能解释一下到底出了什么问题


我还尝试转置矩阵,但不是这样。

我看到的第一个问题是使用熊猫数据帧。我想你应该在这里使用numpy数组。第二个问题是X矩阵。它应该是一个3D阵列。例如,如果我尝试使用

X_train = np.random.randn(6,2,2)

那就行了

运行代码时显示的错误是

ValueError:检查输入时出错:预期lstm_2_输入有3个维度,但得到了形状为(6,2)的数组

如用户108372所述,您可以通过输入一个3D numpy数组来解决这个问题

调试的一个好方法是打印model.summary(),这将为您提供每个层所需的输出形状。此外,您并不总是需要指定输出和输入形状。Keras将为您解决这一问题:)现在,一个有效的示例如下:

X_train = np.random.randn(6,2,2)
y_train = pd.DataFrame( np.array([1, 2, 3, 4, 3, 4]) ).values
X_test = np.random.randn(2,2,2)
y_test = pd.DataFrame( np.array([1, 2]) ).values

model = Sequential()
model.add(LSTM(32, 
               return_sequences=False, 
               input_dim=X_train.shape[1]))
# The shape of the last Dense layer should always correspond to y_train.shape[1]
model.add(Dense(y_train.shape[1])) 
model.add(Activation("linear"))
model.compile(loss="mean_squared_error",
              optimizer="rmsprop")

model.fit(X_train, y_train)
我建议您打印出上述示例的形状,并将您的形状与此处描述的形状对齐