【发布时间】:2017-12-15 07:29:27
【问题描述】:
我想将完整的序列分为两类。我在网上搜索了很多,但没有找到任何结果。我首选的方法是使用 keras 的 LSTM 模型将可变行的“完整”序列分为两类。这种方法的问题是 X 和 y 的形状不同。这是我为解释我的问题而编写的示例代码。
import numpy as np
from keras.layers import Dense,LSTM
from keras.models import Sequential
#(no of samples, no of rows,step, feature)
feat= np.random.randint(0, 100, (150, 250, 25,10))
#(no of samples, binary_output)
target= np.random.randint(0, 2, (150, 1))
#model
model = Sequential()
model.add(LSTM(10, input_shape=(25, 10), return_sequences=True))
model.add(LSTM(10,return_sequences=False))
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop')
print model.summary()
for i in xrange(target.shape[0]):
X=feat[i]
y=target[i]
model.fit(X,y)
这里我有 150 个样本序列,我想将它们分类为 0 或 1。问题是这样的
ValueError:输入数组的样本数应与目标数组相同。找到 250 个输入样本和 1 个目标样本。
如果在深度学习方法中没有办法实现这一点,您能否推荐任何其他机器学习算法?
编辑
许多人对此表示怀疑
#(no of samples, no of rows,step, feature)
feat= np.random.randint(0, 100, (150, 250, 25,10))
150 是样本数(将其视为 150 个时间序列数据)。
250 和 10 是 250 行 10 列的时间序列数据。
(250, 25,10) 增加了 25 个时间步,这样它就可以传递给 keras lstm 输入
【问题讨论】:
-
你用的是什么后端?
-
“250、25、10”是什么意思? Keras 期望你拥有
X as (BatchSize =150, TimeSteps, SampleSize)和Y as (BatchSize=150,1) -
抱歉有任何困惑我已经编辑了这个问题以便更清楚
标签: python machine-learning classification keras lstm