我正在尝试使用 keras 包在 R 中运行一维 CNN。我正在尝试创建具有以下规范的一维卷积神经网络(CNN)架构
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")
但它给了我以下错误
Error in py_call_impl(callable, dots$args, dots$keywords) : ValueError: Negative dimension size caused by subtracting 4 from 1 for 'conv1d_20/conv1d' (op: 'Conv2D') with input shapes: [?,1,1,128], [1,4,128,256].
如何解决这个错误?
另一个问题,如何优化filters
、kernel_size
、pool_size
、rate
、units
?
在我的问题中 input_shape=c(100, 10)
是一个任意值。如何决定输入大小?
最佳答案
您的最大池化层太多,最大池化层会根据其参数减少输入向量的维度。
尝试减少 pool_size 参数,或者删除最后 2 个最大池化层。对于所有层,您可以尝试使用 pool_size=2 的值。
关于参数你应该了解一下它们的含义: 在这里您可以找到卷积层和最大池化层参数(如过滤器、内核大小和池大小)的说明: Convolutional layer
dropout层是一种正则化,它最大化层权重的有效性,每个时期它都会将权重的不同百分比(“速率”参数的大小)归零。比率越大,过度拟合的情况就越少,但训练时间就越长。在这里了解它: Dropout layer
单位是全连接层的大小。 Fully Connected layer
当记录数不算在内时,输入形状是数据的维度。在 1d 向量中,当 N 是向量长度且 C 是您拥有的 channel 数时,它是 (N,C),如果您有 1 个 channel ,则它是 (N,1)。 在二维向量中它是(高度,宽度, channel )。
关于python - 在 R 中对一维数据运行 CNN 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64311427/