具有更多功能 /类的LSTM



我如何使用Python中的KERAS模型的顺序在LSTM上使用多个功能/类作为输入/输出?

要更具体,我想将其用作网络的输入和输出:[featurea] [featureb] [featurec]。Taperurea是一个分类类,具有100个不同可能的值,指示收集数据的传感器;功能B是一个开/关指示灯,为0或1;featurec也是一个具有5个唯一值的分类类。

数据示例:

 1. 40,1,5
 2. 58,1,2
 3. 57,1,5
 4. 40,0,1
 5. 57,1,4
 6. 23,0,3

使用原始数据和损失='cancorical_crossentropy'在model.com上,损失超过10.0。

将数据正常化为0-1之间的值并使用Mean_squared_error损失时,损失的平均为0.27。但是在预测进行测试时,结果没有任何意义。

这里有任何建议还是我可以咨询的教程?预先感谢。

  1. 您需要将功能性转换为二进制类别。平方误差是用于回归的,我可以告诉您,您正在尝试预测传感器和状态所属的某种一类的组合。由于有5个可能的课程,因此您可以认为您正在尝试预测该类是红色,绿色,蓝色,黄色还是紫色。目前,这些由数字表示,但是对于回归,您的模型将预测3.24之类的值,这是没有意义的。

    实际上,您将特征的值转换为5列的二进制值。由于这些类似乎是独有的,因此应该有一个1,而一行的其余列将是0。因此,如果第一行是"红色",则将是[1、0、0、0、0]

  2. 为了获得最佳效果,您还应该将功能曲将其转换为二进制分类功能。出于与上述相同的原因,传感器80不比传感器20高4倍,而是一个不同的实体。

  3. 模型的最后一层应为带有5个神经元的SoftMax类型。基本上,您的模型将尝试预测每个类的概率,最后。

看起来您正在使用dataFrame,因为有索引。因此,我会尝试:

import keras
import numpy as np
import pandas as pd # assume that this has probably already been done though
feature_a = data.loc[:, "FeatureA"].values  # pull out feature A
labels = data.loc[:, "FeatureC"].values   # y are the labels that  we're trying to predict
feature_b = data.loc[:, "FeatureB"].values  # pull out B to make things more clear later
# make sure that feature_b.shape = (rows, 1) otherwise reset the shape
# so hstack works later
feature_b = feature_b.reshape(feature_b.shape[0], 1)
labels -= 1  # subtract 1 from all labels values to zero base (0 - 4)
y = keras.utils.to_categorical(labels)
# labels.shape should be (rows, 5)
# convert 1-100 to binary columns
# zero base again
feature_a -= 1  
# Before: feature_a.shape=(rows, 1)
feature_a_data = keras.utils.to_categorical(feature_a)
# After: feature_a_data.shape=(rows, 100)
data = np.hstack([feature_a_data, feature_b])
# data.shape should be (rows, 101)
# y.shape should be (rows, 5)

现在您准备好训练/测试拆分等等。

以下是具有多级预测的东西:

https://github.com/keras-team/keras/blob/master/master/examples/mnist_cnn.py

最新更新