我正在尝试使用 Rkeras包运行一维 CNN。我正在尝试创建具有以下规范的一维卷积神经网络(CNN)架构library(keras)library(deepviz)#create a neural network with a convolutional layer and train the modelmodel <- 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)
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
您有太多最大池化层,最大池化层通过其参数减少输入向量的维度。
尝试减少 pool_size 参数,或者删除最后 2 个最大池层。对于所有层,您可以尝试使用 pool_size=2 的值。
至于参数,你应该了解它们的含义:在这里你可以找到卷积层和最大池化层参数的解释,如过滤器、内核大小和池大小:卷积 层
dropout 层是一种正则化,可以最大化层权重的有效性,每个时期都会将权重的不同百分比(“速率”参数的大小)归零。比率越大,过度拟合的情况就越少,但训练时间就越长。在这里了解它: Dropout 层
单位是全连接层的大小。 全连接层
当记录数不算在内时,输入形状是数据的维度。在 1d 向量中,当 N 是向量长度且 C 是您拥有的通道数时,它是 (N,C),如果您有 1 个通道,则它是 (N,1)。在二维向量中它是(高度,宽度,通道)。
添加回答
举报
0/150
提交
取消