keras模型中的反向传播不会影响所有层?

7nbnzgx9  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(193)

我有下面的型号

inputs = Input(shape=(8))  # 8 groessen als eingabe
    x = Reshape((8, 1))(inputs)
    # generator
    x = Bidirectional(LSTM(32, return_sequences=True))(x)
    x = Bidirectional(LSTM(64, return_sequences=True))(x)
    generated = LSTM(4, return_sequences=True, activation="sigmoid")(x)

    # rating
    x = Bidirectional(LSTM(128, return_sequences=True))(generated)
    x = Bidirectional(LSTM(128))(x)
    x = Flatten()(x)
    x = Dense(16, activation="relu")(x)
    rating = Dense(8, activation="relu")(x)
    model = Model(inputs=inputs, outputs=[rating, generated])
    return model

我给模型输入一个序列(8,),生成器应该从这个序列中创建一个新的序列(8,4),满足一些条件。有很多输出可以满足这个条件,但我的发电机应该只取一个它喜欢的。
然后我将生成的序列输入到下一层,在那里我计算这个输出的值(8),以便在应用损失函数时能够得到梯度

rating, generated = model(model_input, training=True)
calculated_rating = my_numeric_function(np.array(generated))
loss_1 = mse(model_input, rating) # the rating-loss
loss_2 = mse(calculated_rating , rating) # the loss between rating and generator
metric = mse(model_input, calculated_rating) # metric: difference between model input and real calculated 
tape.gradient(loss_1+loss_2, model.trainable_weights)

我的损失1和损失2正在减少,但度量(计算的\u评级-生成的)保持完全相同。
在反向传播中,我的损失函数似乎不允许改变生成器层的权重。
指标没有减少的原因可能是什么(保持在51-52左右)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题