首页 > 解决方案 > 如何让 Tensorflow 计算损失函数的梯度?

问题描述

我正在为使用编码器/解码器模式的英语->德语翻译器开发 Tensorflow 模型。Encoder 和 Decoder 由通过 Encoder 的状态输出连接的子模型组成。这是顶级模型:

class TranslationModel( tf.keras.Model ):
    
    def __init__( self, **kwargs ):
        super( TranslationModel, self ).__init__( **kwargs )
        self.encoder_model = EncoderNetworkModel()
        self.decoder_model = DecoderNetworkModel()
        
    def call( self, inputs ):
        english_embeddings, german_tokens = inputs
        _, hidden_state, cell_state = self.encoder_model( english_embeddings )
        decoder_results = self.decoder_model( 
            right_shift_token_batch( german_tokens ), 
            hidden_state = hidden_state,
            cell_state = cell_state )
        return decoder_results

一个英语句子输入的解码器的输出是一个 (S, W) 张量,其中 S 是句子中的单词数,W 是唯一德语单词的数量。

为了训练模型,我定义了一个损失函数和一个梯度函数,如下所示:

loss_function = tf.keras.losses.SparseCategoricalCrossentropy( from_logits = True )

def loss( decoder_outputs, shifted_german_tokens ):
    loss_value = loss_function( shifted_german_tokens, decoder_outputs )
    return loss_value

def grad( model, inputs, outputs ):
    english_embeddings, german_tokens = inputs
    with tf.GradientTape() as tape:
        loss_value = loss( outputs, left_shift_token_batch( german_tokens ) )
    return loss_value, tape.gradient( loss_value, model.trainable_variables )

并在训练循环中使用损失和梯度值。这是我遇到以下错误消息的问题:

ValueError: No gradients provided for any variable: [
    'lstm_8/kernel:0', 'lstm_8/recurrent_kernel:0', 'lstm_8/bias:0',
    'translation_model_2/decoder_network_model_3/embedding_3/embeddings:0',
    'translation_model_2/decoder_network_model_3/lstm_9/kernel:0',
    'translation_model_2/decoder_network_model_3/lstm_9/recurrent_kernel:0',
    'translation_model_2/decoder_network_model_3/lstm_9/bias:0',
    'translation_model_2/decoder_network_model_3/dense_3/kernel:0',
    'translation_model_2/decoder_network_model_3/dense_3/bias:0'].

列出的变量是我在 TranslationModel 中所期望的。 为了能够成功计算梯度,我缺少什么?

标签: pythontensorflowloss-functiongradient-descent

解决方案


推荐阅读