keras.layers.MultiHeadAttention 给出警告:以下变量用于 Lambda 层的调用 [],但不存在于其跟踪对象中

问题描述

我正在构建一个带有多头注意力层的 keras 模型。 我正在尝试从 keras.layers 实现 MultiHeadAttention 层,但是当我运行代码时,我在不同的变量上多次收到以下警告:

"警告:张量流: 以下变量使用了 Lambda 层的调用 (tf.einsum),但是 不存在于其跟踪对象中: 这可能是有意的行为,但更有可能 遗漏。这是一个强有力的迹象,表明这一层应该是 制定为子类层而不是 Lambda 层。”

我用来构建模型的代码如下:

    model = Sequential()
    model.add(LSTM(25,input_shape=(1,240),dropout=0.1))
    model.add(Dense(1,activation='sigmoid'))
    model.compile(loss='BinaryCrossentropy',optimizer='RMSprop')
    model.summary()
    model.fit(x_train,y_train,validation_split=0.2,epochs=1000,shuffle=False,verbose=2,callbacks=callbacks)

我的 keras 版本是 2.4.3。有没有人建议如何解决此警告以及它是否有问题?

解决方法

警告大约为 tf.keras.layers.Lambda。 此 blog 声明

tf.keras.Lambda:注意如果层中涉及到变量 通过此方法创建的变量不会自动添加 到用于梯度计算的变量集。因此,如果有 参数要在自定义层训练,推荐 根据基类自定义模型层

如果您不使用 keras lambda 层,则无需担心。可以忽略警告。 要抑制警告,请使用以下代码:

import tensorflow as tf
tf.get_logger().setLevel('ERROR')