层 gru 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2

时间:2021-05-26 17:13:44

标签: python tensorflow

我正在使用 TF 2.5,我正准时地学习 https://www.tensorflow.org/text/tutorials/text_generation 上的教程,只是为了获得一些信心。

但我不明白为什么在构建模型后我会在维度上出现不一致;它需要一个 3 维层,但它只接收两个。

ValueError: Input 0 of layer gru is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (64, 100)

同时教程中也没有发现这个问题,即使使用他们自己的数据集,这让我感到困惑。

然后我尝试了各种组合,甚至在数据集中生成了一个虚拟维度,但我没有得到想要的结果。

我以某种方式理解问题应该出在数据集构造上,因为:

<PrefetchDataset shapes: ((64, 100), (64, 100)), types: (tf.int64, tf.int64)>

我发现我缺少一个维度。但是我如何向它“添加”一个维度,或者反之亦然排除模型以期望 3 维(但是,在这种情况下,我想知道整个模型的含义是什么),目前尚不清楚。

我读过很多类似的案例(包括 GRU 和 LSTM)并尝试了各种选择,但鉴于我的不熟悉,我觉得我处于停滞状态。

如果有人能给我小费,我将不胜感激。

这是我的代码(复制上面链接的 TensorFlow 页面上的代码):

(这也是我在 SO 上的第一篇文章!)

BATCH_SIZE = 64
BUFFER_SIZE = 10000

dataset = (dataset
           .shuffle(BUFFER_SIZE)
           .batch(BATCH_SIZE, drop_remainder=True)
           .prefetch(tf.data.experimental.AUTOTUNE))

vocab_size = len(vocab)
embedding_dim = 256
rnn_units = 1024


class MyModel(tf.keras.Model):
    def __init__(self, vocab_size, embedding_dim, rnn_units):
        super().__init__(self)
        self.embedding = tf.keras.layers.GRU(rnn_units, return_sequences=True, return_state=True)
        self.dense = tf.keras.layers.Dense(vocab_size)
        
    def call(self, inputs, states=None, return_state=False, training=False):
        x = inputs
        x = self.embedding(x, training=training)
        if states is None:
            states = self.gru.get_initial_state(x)
        x = self.dense(x, training=training)
        
        if return_state:
            return x, states
        else:
            return x

model = MyModel(vocab_size=len(ids_from_chars.get_vocabulary()), embedding_dim=embedding_dim, rnn_units=rnn_units)

for input_example_batch, target_example_batch in dataset.take(1):
    example_batch_predictions = model(input_example_batch)
    print (example_batch_predictions.shape, "# (batch_size, sequence_length, vocab_size)")

0 个答案:

没有答案