LSTM with keras
问题描述:
我有一些培训数据x_train
和x_train
的一些相应标签,名为y_train
。下面是如何x_train
和y_train
构造:LSTM with keras
train_x = np.array([np.random.rand(1, 1000)[0] for i in range(10000)])
train_y = (np.random.randint(1,150,10000))
train_x
有10000行和1000列的每一行。 train_y
对于train_x中的每个样本具有介于1和150之间的标签并且代表每个train_x样本的代码。
我也有一个样本,称为样本,这是1行1000列,我想用这个LSTM模型预测。这个变量被定义为
sample = np.random.rand(1,1000)[0]
我想训练和预测使用Keras的这个数据的LSTM。我想采用这个特征向量,并使用这个LSTM来预测范围从1到150的代码之一。我知道这些是随机数组,但是我不能发布我拥有的数据。我尝试了以下方法,我认为应该可以工作,但是我面临一些问题
model = Sequential()
model.add(LSTM(output_dim = 32, input_length = 10000, input_dim = 1000,return_sequences=True))
model.add(Dense(150, activation='relu'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x, train_y,
batch_size=128, nb_epoch=1,
verbose = 1)
model.predict(sample)
任何对此管道的帮助或调整都会很好。我不确定output_dim
是否正确。我想在1000维数据的每个样本上传递LSTM,然后再生成1到150范围内的特定代码。谢谢。
答
我看到至少有三件事情你需要改变:
-
改变这一行:
model.add(Dense(150, activation='relu'))
到:
model.add(Dense(150, activation='softmax'))
的离开
'relu'
的激活使你的输出*的,而它需要有一个概率解释(如你使用categorical_crossentropy
)。 -
变动损失或目标:
当您使用
categorical_crossentropy
你需要改变你的目标是一个独热编码向量长度150的另一种方式是让你的目标,但改变亏损到sparse_categorical_crossentropy
。 -
更改目标范围:
Keras
具有基于0的数组索引(如在Python
,C
和C++
所以你的值应在范围[0, 150)
代替[1, 150]
所以当我。改变为一个长度为150的热点编码向量我在每个地方都会得到一串小数点作为预测,这些小数点代表什么?它们是1,2,3级,...,150级的概率吗? –
是的 - 但记住ab取出这个基于0的数组索引。第1类的概率是指数0, - 第2类 - 指数1等 –
好的非常感谢你!你可以用k热点编码矢量做这个吗?假设对于样本1,我们有[5,8,9],而样本2我们有[130,11,12,5,9],其中有不同数量的标签? –