【问题标题】:tensorflow Embedding layer keeps dropping batch size to halftensorflow 嵌入层不断将批量大小减半
【发布时间】:2020-04-07 16:14:34
【问题描述】:

我正在 google colab 中构建一个 tensorflow 模型。 我对嵌入层的行为感到困惑。它不断将输入层大小减半。

def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
  model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim,
                              batch_input_shape=[batch_size, 100]),
    tf.keras.layers.GRU(rnn_units,
                        return_sequences=True,
                        stateful=True,
                        recurrent_initializer='glorot_uniform'),
    tf.keras.layers.Dense(vocab_size)
  ])
  return model

model = build_model(
  vocab_size = len(vocab),
  embedding_dim=embedding_dim,
  rnn_units=rnn_units,
  batch_size=BATCH_SIZE)

model.compile(optimizer='adam', loss=loss)

这是输入。

dataset = helperDf(df, 64,100)

dataset 是一个批处理助手类。每次调用时,它都会返回包含两个张量的数组,其大小为 [(64,100),(64,100)] 用于训练和标签。

打电话

example_batch_predictions = model(dataset.batch())


print(example_batch_predictions.shape, "# (batch_size, sequence_length, vocab_size)")

还好。和 (64, 100, 48) # (batch_size, sequence_length, vocab_size)

但是当我打电话时:

history = model.fit(dataset.batch(), epochs=EPOCHS, callbacks=[checkpoint_callback])

返回:

WARNING:tensorflow:Model was constructed with shape (64, 100) for input Tensor("embedding_4_input:0", shape=(64, 100), dtype=float32), but it was called on an input with incompatible shape (32, 100).

为什么它将输入检测为 32 而不是 64?

问候

【问题讨论】:

    标签: python tensorflow keras embedding


    【解决方案1】:

    您的整个数据集可能没有多个样本数量是 64 的倍数。 最后一批可能更小。

    如果是这种情况,很明显您的数据集是 32 的倍数,您可以尝试使用 32 的批量大小(在数据集迭代器和模型中)来检查这是否是问题所在.

    由于您使用的是stateful=True 并且需要批量大小,因此您需要处理数据集。如果您确实想要 64 个,您可能需要再创建 32 个示例(也许您复制一些代表性不足的类的示例)或删除 32 个样本(最好从代表性过多的类中)。

    【讨论】:

      【解决方案2】:

      我自己解决问题。像发电机。我的班级需要适应:

      迭代()

      下一个()

      【讨论】:

        猜你喜欢
        • 2020-08-19
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 2020-12-19
        相关资源
        最近更新 更多