首页 > 解决方案 > TimeDistributed:reshape 的输入是一个有 265000 个值的张量,但请求的形状需要 800 的倍数

问题描述

我正在根据本教程创建一个 LSTM 模型,如下所示:

problem = self.hparams.problem
encoders = problem.feature_encoders

inputs_vocab_size = len(encoders['inputs'].subwords)
targets_vocab_size = len(encoders['targets'].subwords)
hidden_size = self.hparams.model.hidden_size
max_inputs_length = self.hparams.model.max_input_length
max_output_length = self.hparams.model.max_target_length

inputs = keras.Input(shape=(max_inputs_length,))
x = inputs

x = layers.Embedding(inputs_vocab_size, hidden_size, input_length=max_inputs_length, mask_zero=True)(x)
x = layers.LSTM(hidden_size)(x)
x = layers.RepeatVector(max_output_length)(x)
x = layers.LSTM(hidden_size, return_sequences=True)(x)

# Output modality

outputs = layers.TimeDistributed(layers.Dense(targets_vocab_size, activation='softmax'))(x)

self.keras_model = keras.Model(inputs=inputs, outputs=outputs)

self.keras_model.summary()

在训练期间,模型的损失计算如下:

    def loss(self, logits, targets):
        labels = tf.one_hot(targets, self.vocab_size)
        loss = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels)
        return tf.reduce_mean(loss)

其中logits是模型输出,targets是训练样本。

但是,我在执行过程中遇到以下异常:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 265000 values, but the requested shape requires a multiple of 800
     [[{{node model_fn/model/time_distributed/Reshape_1}}]]

显然我的TimeDistributed图层有问题,但我不太明白问题出在哪里。与教程相比,-valued 张量来自哪里,265000我在做什么不同?


模型摘要

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 100)]             0         
_________________________________________________________________
embedding (Embedding)        (None, 2, 64)             512       
_________________________________________________________________
lstm (LSTM)                  (None, 64)                33024     
_________________________________________________________________
repeat_vector (RepeatVector) (None, 100, 64)           0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 100, 64)           33024     
_________________________________________________________________
time_distributed (TimeDistri (None, 100, 8)            520       
=================================================================
Total params: 67,080
Trainable params: 67,080
Non-trainable params: 0
_________________________________________________________________

标签: tensorflowkeraslstm

解决方案


推荐阅读