【问题标题】:Why is each layer taking the initial input array shape instead of the previous layer's output为什么每一层都采用初始输入数组形状而不是前一层的输出
【发布时间】:2019-08-28 19:49:24
【问题描述】:

我的代码中的每一层都显示它需要一个数组形状,但接收到的形状与输入数组维度相同

我在第一个 maxpooling 层之后发表了评论,只是为了提示错误。如果你看一下错误,它预计是 (16, 64, 64, 64) 但说它收到了 (16, 128, 128, 1) 这恰好是我的输入数组。

model = Sequential()

model.add(Conv3D(64,3,activation= 'relu',padding='same',input_shape=(16, 128, 128 ,1)))
model.add(MaxPooling3D(pool_size=(1,2,2),strides= (1, 2, 2)))

#model.add(Conv3D(128,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))

#model.add(Conv3D(256,3,activation= 'relu',padding="same"))
#model.add(Conv3D(256,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))

#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))

#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(Conv3D(512,3,activation= 'relu',padding="same"))
#model.add(MaxPooling3D(pool_size=(2,2,2),strides= (2, 2, 2)))

#model.add(Dense(output_dim= 4096,activation= 'linear' ))
#model.add(Dense(output_dim= 4096,activation= 'softmax' ))

我收到的错误是

str(data_shape))

ValueError: 检查目标时出错:预期 max_pooling3d_4 的形状为 (16, 64, 64, 64) 但得到的数组的形状为 (16, 128, 128, 1)

为什么会这样?感谢您的回复。

【问题讨论】:

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


    【解决方案1】:

    问题与输入形状无关;相反,它与训练模型时提供给模型的标签数组的形状有关。这在错误中明确说明:

    检查目标时出错

    这里的“目标”是指模型的输出。在您的最小示例中,池化层的输出形状为(16, 64, 64, 64)

    预计 max_pooling3d_4 的形状为 (16, 64, 64, 64)

    但是,你给它的输出形状为(16, 128, 128, 1)

    但是得到了形状为 (16, 128, 128, 1) 的数组

    【讨论】:

    • 输入是一组视频,准确地说是 8 个,每个视频有 16 帧。我没有得到你所说的标签部分。你能告诉我如何处理它。
    • @shjk 如果你没有标签,那么你想如何以有监督的方式训练你的模型?!您肯定有标签,并且在调用fit(或fit_generator)时将其提供给模型。所以问题是标签数组的形状与模型的输出形状不兼容。
    • 我正在使用第 k 个动作数据集。我很难找到任何 csv 文件。我不清楚如何在监督学习中提供这样一个标记的数据集。
    • 如果我为此设计一个解码器,我可以把这个有监督的模型变成无监督的吗?
    • @shjk 我没有使用过那个数据集,但是如果你的任务是“动作识别”(即给定一个输入视频,告诉我正在做什么动作)那么你需要(基本事实)提供给模型的标签。
    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2021-05-20
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多