在 R 中对一维数据运行 CNN 时出错

我正在尝试使用 Rkeras包运行一维 CNN。我正在尝试创建具有以下规范的一维卷积神经网络(CNN)架构

https://img1.sycdn.imooc.com/653a07f7000116ce03710279.jpg

library(keras)

library(deepviz)


#create a neural network with a convolutional layer and train the model

model <- keras_model_sequential() %>%

  layer_conv_1d(filters=32, kernel_size=4, activation="relu", input_shape=c(100, 10)) %>%

  layer_max_pooling_1d(pool_size=2) %>%

  layer_conv_1d(filters=64, kernel_size=4, activation="relu") %>%

  layer_max_pooling_1d(pool_size=5) %>%

  layer_conv_1d(filters=128, kernel_size=4, activation="relu") %>%

  layer_max_pooling_1d(pool_size=5) %>%

  layer_conv_1d(filters=256, kernel_size=4, activation="relu") %>%

  layer_max_pooling_1d(pool_size=5) %>%

  layer_dropout(rate=0.4) %>%

  layer_flatten() %>%

  layer_dense(units=100, activation="relu") %>%

  layer_dropout(rate=0.2) %>%

  layer_dense(units=1, activation="linear")

但它给了我以下错误


py_call_impl(callable,dots$args,dots$keywords)中的错误:ValueError:由于输入形状为:[?,1,1,128]的“conv1d_20/conv1d”(op:“Conv2D”)从1中减去4而导致负尺寸大小,[1,4,128,256]。


如何解决错误?


还有一个问题,如何优化filters、、、、?在我的问题中是一个任意值。如何决定输入大小?kernel_sizepool_sizerateunitsinput_shape=c(100, 10)


DIEA
浏览 102回答 1
1回答

牧羊人nacy

您有太多最大池化层,最大池化层通过其参数减少输入向量的维度。尝试减少 pool_size 参数,或者删除最后 2 个最大池层。对于所有层,您可以尝试使用 pool_size=2 的值。至于参数,你应该了解它们的含义:在这里你可以找到卷积层和最大池化层参数的解释,如过滤器、内核大小和池大小:卷积 层dropout 层是一种正则化,可以最大化层权重的有效性,每个时期都会将权重的不同百分比(“速率”参数的大小)归零。比率越大,过度拟合的情况就越少,但训练时间就越长。在这里了解它: Dropout 层单位是全连接层的大小。 全连接层当记录数不算在内时,输入形状是数据的维度。在 1d 向量中,当 N 是向量长度且 C 是您拥有的通道数时,它是 (N,C),如果您有 1 个通道,则它是 (N,1)。在二维向量中它是(高度,宽度,通道)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python