Python 如何禁用“警告”;tensorflow:方法(在\u列\u批处理\u端)与批处理更新()相比速度较慢。请检查您的回电;

Python 如何禁用“警告”;tensorflow:方法(在\u列\u批处理\u端)与批处理更新()相比速度较慢。请检查您的回电;,python,tensorflow,keras,warnings,tensorflow2.0,Python,Tensorflow,Keras,Warnings,Tensorflow2.0,我正在尝试以keras风格使用tensorflow 2.0实现,因此我需要每一步更新SWA模型权重。我已经编写了一个自定义回调来实现这一点,但我每一步都会收到警告。以下是一些细节: 我的自定义回调: 类CustomCallback(tf.keras.callbacks.Callback): 定义初始值(自、有效数据、输出路径、swaα=0.99、每评估一次=500、评估批次=16、折叠=无): self.valid\u输入=有效的\u数据[0] self.valid\u输出=有效的\u数据[1

我正在尝试以keras风格使用tensorflow 2.0实现,因此我需要每一步更新SWA模型权重。我已经编写了一个自定义回调来实现这一点,但我每一步都会收到警告。以下是一些细节:

我的自定义回调:


类CustomCallback(tf.keras.callbacks.Callback):
定义初始值(自、有效数据、输出路径、swaα=0.99、每评估一次=500、评估批次=16、折叠=无):
self.valid\u输入=有效的\u数据[0]
self.valid\u输出=有效的\u数据[1]
self.eval\u batch=eval\u batch
self.swa_alpha=swa_alpha
self.fold=折叠
self.output\u path=输出路径
self.rho_值=-1#记录报告的最佳rho
self.eval\u every=eval\u every
列车上的def开始(self,logs={}):
self.swa_weights=self.model.get_weights()
批处理端上的def(self、batch、logs={}):
#更新swa参数
alpha=最小值(1-1/(批次+1),自清洗alpha)
当前_权重=self.model.get_权重()
对于i,枚举中的层(self.model.layers):
self.swa_权重[i]=alpha*self.swa_权重[i]+(1-alpha)*当前_权重[i]
#验证
如果批次>0且批次%self.eval_every==0:
#验证
val\u pred=self.model.predict(self.valid\u输入,批次大小=self.eval\u批次)
rho_val=compute_spearmanr(self.valid_outputs,val_pred)#度量
#设置swa参数并进行验证
self.model.set_权重(self.swa_权重)
swa_val_pred=self.model.predict(self.valid_输入,批次大小=self.eval_批次)
swa_rho_val=compute_spearmanr(自有效输出,swa_val_pred)
#重置原始参数
self.model.set_权重(当前_权重)
#检查是否保存模型并更新最佳rho值
如果rho_val>self.rho_值:
self.rho_值=rho_值
self.model.save_权重(f'{self.output_path}/fold-{fold}-best.h5')
del当前重量
gc.collect()
输出如下所示:

WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (11.428264). Check your callbacks.
WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (11.464315). Check your callbacks.
WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (11.502968). Check your callbacks.
WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (11.518413). Check your callbacks.
我每一步都会收到警告,这意味着在不运行验证代码的情况下,更新SWA参数的代码(
self.model.get_weights()
和下面的
for
循环)足够慢

我知道更新参数非常慢,因为
model.get_weights()
model.set_weights()
都会对参数进行深度复制(根据我的实验,新的numpy数据数组的新列表)

我认为我的SWA实现没有问题(如果有任何bug,请告诉我),所以我只想禁用警告

我所尝试的:

  • 添加代码
    os.environ[“TF_CPP_MIN_LOG_LEVEL”]=“2”
    os.environ[“TF_CPP_MIN_LOG_LEVEL”]=“3”
    以禁用警告
  • model.fit()
    中的
    verbose
    设置为
    2
    0
    ,即
    model.fit(…,verbose=2,…)
    model.fit(…,verbose=0,…)
  • 两者都不起作用


    有什么想法吗?提前谢谢你的帮助

    这不是一个非常令人满意的答案,但TF_CPP_MIN_LOG_级别不工作是一个已知问题:

    我可以在
    tensorflow==2.1.0-rc1
    上重现您的问题,这里有一个玩具示例:

    import os
    import time
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2"
    import tensorflow as tf
    tf.get_logger().setLevel("WARNING")
    tf.autograph.set_verbosity(2)
    
    print(tf.__version__)
    
    mnist = tf.keras.datasets.mnist
    
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0
    
    model = tf.keras.models.Sequential([
      tf.keras.layers.Flatten(input_shape=(28, 28)),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dropout(0.2),
      tf.keras.layers.Dense(10, activation='softmax')
    ])
    
    class CustomCallback(tf.keras.callbacks.Callback):
    
      def on_train_batch_end(self, batch, logs=None):
        time.sleep(3)
    
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    
    model.fit(x_train, y_train, epochs=1, callbacks=[CustomCallback()])
    
    标准建议(
    os.environ['TF\u CPP\u MIN\u LOG\u LEVEL']
    TF.get\u logger().setLevel(“警告”)
    TF.autograph.set\u verbosity(2)
    )都不起作用,我怀疑您必须等到上述问题得到解决

    您是否尝试过tf.get_logger().setLevel(“错误”)而不是警告(实际上您是否希望隐藏警告)?TF2.20每晚都在工作。
    2.1.0
    Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
    11493376/11490434 [==============================] - 31s 3us/step
    Train on 60000 samples
    WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (3.002797). Check your callbacks.
       32/60000 [..............................] - ETA: 1:57:38 - loss: 2.4674 - accuracy: 0.0938WARNING:tensorflow:Method (on_train_batch_end) is slow compared to the batch update (3.002938). Check your callbacks.
    ...