【问题标题】:How to use Conv1D and Bidirectional LSTM in keras to do multiclass classification of each timestep?如何在 keras 中使用 Conv1D 和双向 LSTM 对每个时间步进行多类分类?
【发布时间】:2018-05-15 17:18:27
【问题描述】:

我正在尝试在 keras 中使用 Conv1D 和双向 LSTM(很像 this question)进行信号处理,但对每个时间步进行多类分类。

问题在于,即使 Conv1D 和 LSTM 使用的形状有些相同:

Conv1D:(批次、长度、通道)
LSTM:(批次、时间步长、特征)

Conv1D 的输出为 = (length - (kernel_size - 1)/strides),因此不再匹配 LSTM 形状,即使不使用 MaxPooling1D 和 Dropout。

更具体地说,我的训练集 X 有 n 个样本,具有 1000 个时间步长和一个通道 (n_samples, 1000, 1),我使用了 LabelEncoder 和 OneHotEncoder,因此 y 有 n 个样本、1000 个时间步长和 5 个热编码类 (n_samples, 1000, 5)。

由于一个类比其他类更普遍(实际上是没有信号),我使用 loss='sparse_categorical_crossentropy'、sample_weight_mode="temporal" 和 sample_weight 为包含有意义类的时间步赋予更高的权重。

model = Sequential()
model.add(Conv1D(128, 3, strides=1, input_shape = (1000, 1), activation = 'relu'))
model.add(Bidirectional(LSTM(128, return_sequences=True)))
model.add(TimeDistributed(Dense(5, activation='softmax')))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'], sample_weight_mode="temporal")
print(model.summary())

Model

当我尝试拟合模型时,我收到以下错误消息:

检查目标时出错:预期 time_distributed_1 有形状 (None, 998, 1) 但得到了形状为 (100, 1000, 5) 的数组。

有没有办法让这样的神经网络配置工作?

【问题讨论】:

    标签: python deep-learning keras convolution recurrent-neural-network


    【解决方案1】:

    您的卷积正在切割序列的尖端。在卷积层中使用padding='same'。

    不过,该消息似乎不适合您的模型。您的模型显然有 5 个输出特征(因为 Dense(5)),但按摩说它需要 1 个。这可能是因为“稀疏”交叉熵而发生的。根据您的数据格式,您可能应该使用“categorical_crossentropy”。

    【讨论】:

    • 感谢padding='same' 部分。但是,即使我有Dense(5),我也不知道为什么会收到该错误消息。现在它说:“预计 time_distributed_1 的形状为 (None, 1000, 1) 但得到的数组的形状为 (100, 1000, 5)”。
    • 不是因为“稀疏”的分类交叉熵吗?如果您的数据包含所有 5 个元素,我认为您不需要稀疏。
    • 太好了,就是这样!改为“categorical_crossentropy”,效果很好!我想知道什么时候会使用“sparse_categorical_crossentropy”...
    • 稀疏张量通过消除零数据来尝试变得更小。对于使用“sparse_categorical_crossentropy”,您可能应该尝试在模型中使用所有可能的稀疏数据,并使您的数据也稀疏。 (但我不知道怎么做,没有稀疏模型的经验)
    • 稀疏张量通过消除零数据来尝试变得更小。对于使用“sparse_categorical_crossentropy”,您可能应该尝试在模型中使用所有可能的稀疏数据,并使您的数据也稀疏。 (但我不知道怎么做,没有稀疏模型的经验)
    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2021-10-20
    • 2018-03-08
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多