【问题标题】:Keras 2D Dense Layer for Output用于输出的 Keras 2D 密集层
【发布时间】:2019-07-23 16:31:49
【问题描述】:

我正在玩一个模型,该模型应该以 8x8 棋盘作为输入,编码为 224x224 灰度图像,然后输出 64x13 单热编码逻辑回归 = 方块上棋子的概率。

现在,在我不太了解的卷积层之后,如何继续获得 2D-Dense 层作为结果/目标。

我尝试将 Dense(64,13) 作为层添加到我的 Sequential 模型中,但出现错误“Dense` can accept only 1 positional arguments ('units',)”

甚至可以训练二维目标吗?

编辑1: 这是我的代码的相关部分,经过简化:

# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)

model = Sequential([
    Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
    Conv2D(8, (3,3), activation='relu'),

    # some more repetitive Conv + Pooling Layers here

    Flatten(),

    Dense(64,13)
])

TypeError: Dense 只能接受 1 个位置参数('units',),但您传递了以下位置参数:[64, 13]

EDIT2:正如 Anand V. Singh 所建议的,我将 Dense(64, 13) 更改为 Dense(832),效果很好。损失 = mse。

使用“sparse_categorical_crossentropy”作为损失和 64x1 编码(而不是 64x13)不是更好吗?

【问题讨论】:

  • 首先,请提供一个示例,包括您当前的代码:stackoverflow.com/help/mcve。其次,使用深度模型来预测棋盘格上的方块似乎有点过头了。如果这只是玩 Keras 和卷积网络的一种方式,那很好。否则,还有更传统的方法已经行之有效。
  • 为我尝试编译的顺序模型提供了代码示例。

标签: conv-neural-network keras-layer sequential


【解决方案1】:

在 Dense 中,您只传递您期望的层数作为输出,如果您想要 (64x13) 作为输出,请将层尺寸设置为 Dense(832) (64x13 = 832),然后再进行整形。您还需要重塑 Y 以便准确计算损失,这将用于反向传播。

# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)
Y = Y.reshape(10000, 64*13)
model = Sequential([
    Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
    Conv2D(8, (3,3), activation='relu'),
    # some more repetitive Conv + Pooling Layers here
    Flatten(),
    Dense(64*13)
])

这应该可以完成工作,如果它没有在失败的地方发布,我们可以继续进行。

【讨论】:

  • 我将 Dense(64,13) 更改为 Dense(832) 并将 Y 从 64,13 变平为 64*13=832。现在用 loss=mse 训练很好。稍后我将重塑并应用 argmax。我是否会因为无法使用逻辑回归和交叉熵损失而损失性能?
  • @TheoH。损失将是分类交叉熵以使用逻辑回归。这是你要求的吗?
  • 没有。我认为当我使用 Dense(64*13) 时,我必须使用 loss=mse。因为我不能使用逻辑回归,因为类没有分开。对吗?
  • @TheoH 如果我正确理解所有 832 值都很重要,那么是的,您确实需要使用 MSE,或者您可以使用自定义损失函数,但创建自定义损失并不容易,因为性能因为MSE,也许有一点,但我不会担心。
  • 好的,使用“sparse_categorical_crossentropy”作为损失和64x1编码(而不是64x13)不是更好吗?
【解决方案2】:

Reshape 层允许您控制输出形状。

    Flatten(),
    Dense(64*13)
    Reshape((64,13))#2D

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 2020-08-17
    • 2023-03-06
    • 1970-01-01
    • 2016-03-24
    • 2017-06-28
    • 1970-01-01
    • 2022-01-15
    • 2021-07-20
    相关资源
    最近更新 更多