gpt4 book ai didi

keras - 如何在 Keras 中更改中间层的批量大小?

转载 作者:行者123 更新时间:2023-12-03 21:29:01 24 4
gpt4 key购买 nike

我的问题是从 LSTM 中获取所有隐藏输出,并将它们用作单个密集层的训练示例。展平隐藏层的输出并将它们馈送到密集层并不是我想要做的。我尝试了以下几件事:

  • 我已经考虑了密集层的 Timedistributed 包装器( https://keras.io/layers/wrappers/ )。但是,这似乎将同一层应用于每个时间片,这不是我想要的。换句话说,Timedistributed 包装器具有 3D 张量的 input_shape(样本数、时间步数、特征数)并生成另一个相同类型的 3D 张量:(样本数、时间步数、特征数)。相反,我想要的是一个 2D 张量作为输出,它看起来像(样本数*时间步数,特征数)
  • 有一个 AdvancedReshapeLayer 的拉取请求:https://github.com/fchollet/keras/pull/36在 GitHub 上。这似乎正是我正在寻找的。不幸的是,该拉取请求似乎已关闭,但没有确定的结果。
  • 我尝试构建自己的 lambda 层来完成我想要的操作,如下所示:
    A). model.add(LSTM(NUM_LSTM_UNITS, return_sequences=True, activation='tanh')) #
    B). model.add(Lambda(lambda x: x, output_shape=lambda x: (x[0]*x[1], x[2])))
    C). model.add(Dense(NUM_CLASSES, input_dim=NUM_LSTM_UNITS))

  • (A) 打印后的 mode.output_shape: (BATCH_SIZE, NUM_TIME_STEPS, NUM_LSTM_UNITS) 和 (B) 打印后的 model.output_shape: (BATCH_SIZE*NUM_OF_TIMESTEPS, NUM_LSTM_UNITS)

    这正是我想要实现的目标。

    不幸的是,当我尝试运行步骤 (C) 时。我收到以下错误:

    Input 0 is incompatible with layer dense_1: expected ndim=2, found ndim=3



    这令人困惑,因为当我在 (B) 之后打印 model.output_shape 时,我确实看到了 (BATCH_SIZE*NUM_OF_TIMESTEPS, NUM_LSTM_UNITS),它是 ndim=2。

    真的很感谢任何帮助。

    编辑:当我尝试使用功能 API 而不是顺序模型时,我仍然在步骤 (C) 上遇到相同的错误

    最佳答案

    您可以使用包含 batch_size 维度的后端 reshape 。

    def backend_reshape(x):
    return backend.reshape(x, (-1, NUM_LSTM_UNITS))

    model.add(Lambda(backend_reshape, output_shape=(NUM_LSTM_UNITS,)))

    关于keras - 如何在 Keras 中更改中间层的批量大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291937/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com