我想将完整序列分为两类。我在网上搜索了很多但发现没有结果。我首选的方法是使用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输入
答案 0 :(得分:2)
问题是当你做
时<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:for-each select="/html/body/table/tr/td/ol/li">
<xsl:value-of select="/html/body/table/tr/td/ol/li"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这将删除第一个轴,从而导致X=feat[i]
y=target[i]
和X.shape = (250, 25, 10)
。当您致电y.shape == (1,)
keras时,假设model.fit(X, y)
有250个样本,X
只有一个样本。这就是你得到这个错误的原因。
您可以通过提取y
和feat
的切片来解决此问题,例如通过调用
target
其中X=feat[i:i+batch_size]
y=target[i:i+batch_size]
是每次迭代要使用的样本数。如果设置batch_size
,则应该在代码中获得预期的行为。