在 keras R 中实现用于 TMIE 系列分类的一维卷积神经网络



我正在尝试在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:用于 1D 输入的卷积层,但我无法使其工作。首先,我想知道第一个卷积层的输出大小应该是多少(是否有任何好的猜测作为起点(。其次,任何人都可以向我推荐 Keras R 中单维时间序列分类的结构化教程,以便我以更详细和交互的方式学习基础理论。但是,我也会感谢对上述问题的快速修复,以便我可以自己进行实验。

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

您需要重塑数据,使要素数量成为它要求的三维。在这种情况下,当然只有 1 个维度。输入的形状应为 (1169, 30, 1(。一种选择是使用 reshape2 的熔融函数来获取长格式的数据。喜欢这个:

library(reshape2) long_training_data <- melt(training_data)

最新更新