分类神经网络的变量输入

Posted

技术标签:

【中文标题】分类神经网络的变量输入【英文标题】:Variable Input for a classification neural network 【发布时间】:2020-06-25 17:35:56 【问题描述】:

我目前正在从事一个项目,我在鞋中安装了一个传感器,用于记录加速度和陀螺仪传感器的 XYZ。每毫秒我得到 6 个数据点。现在的目标是,如果我做了一个动作,比如跳跃或踢腿,我将使用传感器的输出来预测正在执行的动作。

问题是:例如,如果我跳转,我可能会获得 1000 个数据点,但在另一次,我会获得 1200 个数量,这意味着输入的大小不同。到目前为止,我研究过的神经网络要求输入大小是恒定的,以预测 Y 值,然而,在这种情况下,它不是。我已经对如何制作具有可变大小的神经网络进行了一些研究,但还没有找到一个可行的。将输入裁剪到一定大小不是一个好主意,因为那样我会丢失数据。此外,如果我只是通过添加额外的 0 来调整较小试验的大小,它会扭曲模型。关于可行的模型或如何更好地清理数据的任何建议?

【问题讨论】:

在推理过程中,您是否尝试为每个时间步获取一个标签?意思是你的 y_train 看起来像[walk, walk, walk, jump, jump, jump, jump, walk, kick, kick, jump, jump]?哪里的信号段是可变长度的并且每个时间戳都有标记? 嗨!所以数据将包含许多行。每行对应一个活动,如步行、跳跃等。每行将包含一些变化量的列,每列是一个 3d 列表,其中包含时间 I 的 x、y、z 加速度。所以我有每个时间间隔的加速度,我有多个时间间隔。我想使用该数据来预测已完成的操作。例如,如果我跑步,我可能只有 10 个时间间隔,而如果我跳,我可能有 40 个时间间隔。请让我知道这是否更有意义。 您能否提供一些训练数据(X 和 y)的简图。不需要其他特征,只需要顺序特征。 【参考方案1】:

您需要的是RNNs。我的大部分代码都使用 TensorFlow,但在大多数其他 DL 库中也可以使用。 RNN 可以处理可变长度的数据,并用于许多事情,例如语音检测。 (语音可以是可变长度的,就像你说的,我们也不能缩短它或把它分成更小的盒子)。下面是一个小示例,它实现了一个适合您的模型要求的简单 NN。

我们还必须使用 ragged tensors 和 RNN 来完成您的任务。顾名思义,参差不齐的张量具有可变的内部形状,非常适合表示持续时间可变的情况。

import tensorflow as tf
import numpy as np


x = []
# Your action sequences stored as one-hot encoding.
y = tf.one_hot(np.array([np.random.randint(0, 4) for _ in range(100)]), 5)
# Your input data, each row is a np array of shape (random value between 600 and 1200, 5)
for i in range(100):
    temp = np.random.randint(600, 1200)
    x.append(np.random.rand(temp, 5))

x = tf.ragged.constant(x)

keras_model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=[None, 5], dtype=tf.float64, ragged=True),
    tf.keras.layers.LSTM(32),
    tf.keras.layers.Dense(32),
    tf.keras.layers.Activation(tf.nn.relu),
    tf.keras.layers.Dense(5)
])

keras_model.compile(optimizer='rmsprop', loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True))
keras_model.fit(x, y, epochs=100)

我已将内部模型的复杂性保持在最低限度,我希望通过进一步的测试您可以扩展它。最好的架构需要测试。我的建议是使用多个 Bidirectional GRUs 并以几个小的密集层结束。

【讨论】:

以上是关于分类神经网络的变量输入的主要内容,如果未能解决你的问题,请参考以下文章

PNN神经网络(Matlab)

如何使用 keras 实现多标签分类神经网络

仅分类神经网络的新数据

python 神经网络,分类变量编码,

bp神经网络只有一类样本怎么分类

较大数据集分类中的神经网络