当前位置: 首页 > 知识库问答 >
问题:

一维CNN的输入形状

郭业
2023-03-14

我是机器学习的初学者。虽然,这个问题类似于1,2,3,但我在为我的数据选择输入形状时真的很困惑。我在时间序列数据上使用1-D 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)

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

共有1个答案

魏波娃
2023-03-14

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

假设内核权重为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)

你们可以在这里看到移动平均线的相似性,然后你们可以应用最大值并依赖它。在本例中,它将返回a[1]。

现在,如果你相信你可以用几乎线性的变换从时间序列中提取所有的东西(忽略模型的其余部分),那么没关系。但是如果你相信在你的短时间序列中可能有一些非线性关系,也许试试RNN甚至LSTM。

在技术视图中,如果您有instance\u 1=(1,2,3,4),instance\u 2=(2,3,4,5)等等,那么您需要进行重叠以创建一个目标变量,我认为您以某种方式做到了这一点。再次取决于你在追求什么。

 类似资料:
  • 我正在使用Keras构建一个CNN,以下Conv1D是我的第一层: 我正在培训以下功能: 其中,train\u df是一个由两列组成的pandas数据帧,其中,对于每一行,标签是一个int(0或1),有效载荷是一个用零填充/截断为1000的浮点数组。train\U df中的培训示例总数为15641。 模型编译,但在训练期间,我得到这个错误: 我看了这篇文章,试图将输入更改为1000个浮点长列表的数

  • 第一个Conv2D层中的输入形状应该是(100, 100, 1)但是输出是(无,98, 98, 200)。我知道200和无决定了什么,但我不确定98是参数。此外,除此之外,我随机选择了200个作为Conv2D模型的过滤器数量。我应该如何确定适合我的模型的过滤器数量。是基于试错吗?请帮忙。谢谢!! (100, 100, 1)模式:sequential_3 conv2d_5(conv2d)(无,98,

  • 本文向大家介绍解决Keras中CNN输入维度报错问题,包括了解决Keras中CNN输入维度报错问题的使用技巧和注意事项,需要的朋友参考一下 想要写分类器对图片进行分类,用到了CNN。然而,在运行程序时,一直报错: ValueError: Negative dimension size caused by subtracting 5 from 1 for ‘conv2d_1/convolution'

  • 问题是卷积神经网络的数学细节。假设网络的体系结构(其目标是图像分类)是这样的 输入图像32x32 第一个隐藏层3x28x28(由3个大小为5x5的滤波器卷积而成,步幅=0,无填充),随后是激活 池化层(在2x2区域上池化),产生3x14x14输出 第二隐藏层6x10x10(由6个大小为5x5的滤波器卷积而成,步幅=0,无填充),随后激活 池化层(在2x2区域上池化),产生6x5x5输出 具有100

  • 我正在尝试为数字数据集构建1D CNN。我的数据集有520行和13个特征。下面是代码。 它给出了“ValueError:layer sequential\u 21的输入0与layer不兼容::expected min\u ndim=3,found ndim=2。接收到的完整形状:(1,13)”错误。 我需要如何设置输入形状,还是必须重塑X\U列?非常感谢您的帮助。

  • 我在使用Keras和Python对3D形状进行分类时遇到了一个问题。我有一个文件夹,里面有一些JSON格式的模型。我将这些模型读入Numpy数组。模型是25*25*25,表示体素化模型的占用网格(每个位置表示位置(i、j、k)中的体素是否有点),因此我只有1个输入通道,就像2D图像中的灰度图像一样。我拥有的代码如下: 在此之后,我得到以下错误 使用TensorFlow后端。回溯(最后一次调用):文