【问题标题】:implementation of 1D convolutional neural network for tmie series classfication in keras R在keras R中实现时间序列分类的一维卷积神经网络
【发布时间】:2019-01-23 08:52:08
【问题描述】:

我正在尝试在 keras R 中构建一维卷积神经网络以进行时间序列分类。我的训练数据由 1169 个向量组成。其中每个向量包含 30 个时间点并具有分类标签(类别总数为 7,我使用一个热编码对它们进行了编码)。我的代码如下

model<-keras::keras_model_sequential() %>%
layer_conv_1d(filters = 30, kernel_size = 2 , activation = "relu",    
input_shape = c(1169, 30), strides = 1L)%>%
layer_max_pooling_1d()%>%
layer_conv_1d(filters = 15, kernel_size = 2, activation = "relu")%>%
layer_max_pooling_1d() %>%
layer_flatten() %>%
layer_dense(7, activation = "softmax")

model %>% compile(
optimizer = "adam",
metrics = 'accuracy',
loss = 'categorical_crossentropy'
)
summary(model)
history<-model %>%
fit(training_data, 
  training_label,
  epochs= 100,
  batch_size = 32,
  validation_split = 0.3
)

尝试拟合模型后,出现以下错误

 Error in py_call_impl(callable, dots$args, dots$keywords) : 
 ValueError: Error when checking input: expected conv1d_71_input to have 
 3 dimensions, but got array with shape (1169, 30)

我知道我的问题类似于Keras: convolutional layer for 1D input,但我无法让它发挥作用。首先,我想知道第一个卷积层输出的合适大小应该是多少(有没有好的猜测作为起点)。其次,任何人都可以向我推荐 Keras R 中单维时间序列分类的结构化教程,以便我更详细地以交互方式学习基础理论。不过,我也希望能快速解决上述问题,以便我自己进行实验。

【问题讨论】:

    标签: r keras conv-neural-network


    【解决方案1】:

    为了帮助您处理错误消息:Conv1D 期望其 input_shape 参数指定序列的长度以及它将看到的序列的通道数。和 Keras 一样,在定义模型时不应明确指定批次维度。因此,根据您当前的规范,您的Conv1D 层预计会看到长度为 1169 的序列,每个序列有 30 个通道。要获得所需的行为,您应该将input_shape 指定为(30,1)

    【讨论】:

    • 不欣赏这里的反对票;大声喊叫,我可以删除我的代码;答案本身就是正确的。
    • 我真的很讨厌人们投反对票并且不提供解释。
    • 是的,我自己找到了你指向的确切原因
    【解决方案2】:

    您需要重塑您的数据,使特征的数量成为它所要求的第 3 个维度。在这种情况下,当然只有一维。输入的形状应该是 (1169, 30, 1)。一种选择是使用 reshape2 的 melt 函数来获取长格式数据。像这样:

    library(reshape2) long_training_data <- melt(training_data)

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      相关资源
      最近更新 更多