【问题标题】:Input shape for 1-Dimensional CNN一维 CNN 的输入形状
【发布时间】:2020-10-20 09:49:34
【问题描述】:

我是机器学习的初学者。虽然,这个问题类似于123,但在为我的数据选择输入形状时我真的很困惑。 我在时间序列数据上使用一维 CNN。数据的维度是(6400, 4)。有 4 个特征(列),其中一个是目标变量。 拆分后:

dim(xtrain) -> 5000, 3
dim(ytrain) -> 5000, 1
dim(xtest) -> 1400, 3
dim(ytest) -> 1400, 1

我在为 CNN 选择输入形状时感到困惑。这是我尝试过的(我一直保持输入 shape = c(3, 1)):

model = keras_model_sequential() %>%
  layer_conv_1d(filters = 64, kernel_size = 2,
                input_shape = c(3, 1), activation = "relu") %>%
  layer_max_pooling_1d(pool_size = 2) %>%
  layer_flatten() %>%
  layer_dense(units = 32, activation = "relu") %>%
  layer_dropout(rate = 0.2) %>%
  layer_dense(units = 1, activation = "linear")

xtrain <- as.matrix(train[, c(1, 2, 3)])
ytrain <- as.matrix(train[, c(4)])
xtest = as.matrix(test[, c(1, 2, 3)])
ytest = as.matrix(test[, c(4)])

# Transforming 2-D matrix into 3-D matrix
xtrain = array(xtrain, dim = c(nrow(xtrain), 3, 1))
xtest = array(xtest, dim = c(nrow(xtest), 3, 1))

# fitting model
model %>% fit(xtrain, ytrain, epochs = 50, batch_size = 128, verbose = 1, validation_split = 0.20)

这执行得很好,但我不确定它是否正确。请告知设置输入形状的正确方法。

【问题讨论】:

    标签: r machine-learning keras deep-learning conv-neural-network


    【解决方案1】:

    您在那里做了某种移动平均线类比。最后,这一切都取决于您想要实现的目标以及时间序列的性质。

    假设你的内核权重是c(0.3,0.7),你的时间序列是c(1.2,1.3,1.25)

    你的内核会做 2 个暗色向量:

    a = c( 0.3 * 1.2 + 0.7*1.3 , 0.3 * 1.3 + 0.7*1.25)
    

    您可以在此处看到与移动平均线的相似性,然后您将应用最大值并对其进行 RELU。在示例中将返回 a[1]

    现在,如果您相信您可以通过几乎线性变换(忽略模型的其余部分)从时间序列中提取所有内容,那么就可以了。但如果你认为在你的短时间序列中可能存在一些非线性关系,不妨试试 RNN 甚至 LSTM。

    从技术上看,如果你有 instance_1 = (1,2,3,4), instance_2 = (2,3,4,5) 等等,你想要做重叠来创建一个目标变量,它我想你在某种程度上做到了。再次取决于您的追求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多