我正在尝试使用Keras进行序列学习。我的数据如下所示。
h h h l l l i r
h h l l l l i r
h l l l l l i r
h m h m h h c u
...
我所做的是对X
和y
的编码进行一次热编码,这样我的数据将按以下方式转换
[[1. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0.]
[1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0.]
...
[0. 1. 0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0.]
[1. 0. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0.]]
和我的y
的样子
[[1. 0. 0. 0. 0. 1. 0. 0.]
[1. 0. 0. 0. 0. 1. 0. 0.]
...
[0. 0. 0. 1. 0. 0. 1. 0.]
[1. 0. 0. 0. 0. 1. 0. 0.]]
对训练集进行一键编码的函数如下
def one_hot_encode_xy(seq_x, seq_y, n_uniq_x, n_uniq_y):
encoding_x = list()
encoding_y = list()
nsize_x = len(n_uniq_x)
nsize_y = len(n_uniq_y)
for val in seq_x:
vector = [0 for _ in xrange(nsize_x)]
index = n_uniq_x.index(val)
vector[index] = 1
encoding_x += vector
for val in seq_y:
vector = [0 for _ in xrange(nsize_y)]
index = n_uniq_y.index(val)
vector[index] = 1
encoding_y += vector
X0 = array(encoding_x)
y0 = array(encoding_y)
return X0, y0
我遇到的问题是,当我尝试拟合模型X
和y
时,会不断出现形状不兼容错误。我正在使用的模型如下
model = Sequential()
model.add(LSTM(150, input_shape=(1, 18)))
model.add(RepeatVector(1))
model.add(LSTM(150, return_sequences=True))
model.add(TimeDistributed(Dense(18, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.fit(X, y, epochs=100, verbose=2)
我应该如何重塑X
的{{1}}和/或模型,以便对此进行简单的seq2seq学习?有人可以帮忙吗?任何帮助表示赞赏。
我遇到的错误示例如下
y
文件“ build / bdist.linux-x86_64 / egg / keras / engine / training.py”,第958行,适合 _standardize_user_data中的第757行的文件“ build / bdist.linux-x86_64 / egg / keras / engine / training.py” 在standardize_input_data中的第128行,文件“ build / bdist.linux-x86_64 / egg / keras / engine / training_utils.py” ValueError:检查输入时出错:预期lstm_1_input具有3维,但数组的形状为(18,18)
这就是我初始化model.fit(X, y, epochs=100, verbose=2)
,X
和y
的方式。我有一个18行的玩具数据集(如上所示),并想在2种情况下对其进行测试。
X_test
答案 0 :(得分:0)
“火车”输入形状应为3个维度(样本,时间步长,特征)
**Samples**. One sequence is one sample. A batch is comprised of one or more samples.
**Time Steps**. One time step is one point of observation in the sample.
**Features**. One feature is one observation at a time step.
在您的情况下,输入数据,如果您没有很多功能,只需在输入数据中再添加一个维度,或者您可以使用回溯来创建序列的短期变化,那么它将起作用
X = X.reshape(X.shape[0],X.shape[1],1)
y = y.reshape(y.shape[0],1,y.shape[1])
输入形状时,将X [0] .shape作为输入 。 example