• Keras:ModelCheckpoint和model.fit的verbose有什么差异?


    ⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:🍎🍎来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果,欢迎选购!!🍎🍎
    在这里插入图片描述

    大凉山高原生态糖心苹果

    1.软件环境⚙️

    Windows10 教育版64位
    Python 3.6.3
    Tensorflow-GPU 2.3.0
    Keras 2.4.3
    CUDA 10.1

    2.问题描述🔍

    我们知道在Keras框架中有多个verbose的设置,比如最常见的model.fit中的verbose

      def fit(self,
              x=None,
              y=None,
              batch_size=None,
              epochs=1,
              verbose=1,
              callbacks=None,
              validation_split=0.,
              validation_data=None,
              shuffle=True,
              class_weight=None,
              sample_weight=None,
              initial_epoch=0,
              steps_per_epoch=None,
              validation_steps=None,
              validation_batch_size=None,
              validation_freq=1,
              max_queue_size=10,
              workers=1,
              use_multiprocessing=False):
        """Trains the model for a fixed number of epochs (iterations on a dataset).
    
        Arguments:c
            verbose: 0, 1, or 2. Verbosity mode.
                0 = silent, 1 = progress bar, 2 = one line per epoch.
                Note that the progress bar is not particularly useful when
                logged to a file, so verbose=2 is recommended when not running
                interactively (eg, in a production environment)."""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    以及ModelCheckpoint中的verbose

    class EarlyStopping(Callback):
      def __init__(self,
                   filepath,
                   monitor='val_loss',
                   verbose=0,
                   save_best_only=False,
                   save_weights_only=False,
                   mode='auto',
                   save_freq='epoch',
                   options=None,
                   **kwargs):
                   
       """Arguments:
          verbose: verbosity mode, 0 or 1."""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可以看到verbose主要控制训练模型时,训练的lossaccuracy等评价指标的具体信息:

    5/5 [==============================] - ETA: 0s - loss: 3.5273 - accuracy: 0.2000 - precision: 1.0000 - recall: 0.0625
    Epoch 00001: val_accuracy improved from -inf to 0.50000, saving model to model_and_log\img_aug+mixup+Xception\Xception-01-3.5273-0.2000-3.3476-0.5000.h5
    
    • 1
    • 2

    其实除了上面的verbosecallbacks中还有大量的verbose,比如LearningRateSchedulerEarlyStopping等等都有自己的verbose
    那为什么有多个verbose呢? 相应的问题就来了:

    1. 每个verbose控制的都是同一个东西吗?
    2. 如果同时开启会不会相互覆盖设置?
    3. 有没有优先级?

    在这里插入图片描述

    3.解决方法🐡

    本文以model.fitModelCheckpointverbose为例,展示了不同情况的verbose会产生什么影响,其它函数的verbose也是相同的结论。

    3.1.只打开model.fitverbose

    Epoch 1/30
    1/5 [=====>........................] - ETA: 0s - loss: 3.7069 - accuracy: 0.2500 - precision: 0.5000 - recall: 1.0000
    2/5 [===========>..................] - ETA: 0s - loss: 3.6293 - accuracy: 0.2500 - precision: 0.7143 - recall: 0.8333
    3/5 [=================>............] - ETA: 0s - loss: 3.6301 - accuracy: 0.1667 - precision: 0.6000 - recall: 0.7500
    4/5 [=======================>......] - ETA: 0s - loss: 3.6179 - accuracy: 0.1250 - precision: 0.6000 - recall: 0.5000
    5/5 [==============================] - ETA: 0s - loss: 3.5854 - accuracy: 0.1000 - precision: 0.6364 - recall: 0.4375
    5/5 [==============================] - 5s 900ms/step - loss: 3.5854 - accuracy: 0.1000 - precision: 0.6364 - recall: 0.4375 - val_loss: 3.3600 - val_accuracy: 0.5000 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
    Epoch 2/30
    1/5 [=====>........................] - ETA: 0s - loss: 3.4214 - accuracy: 0.2500 - precision: 0.0000e+00 - recall: 0.0000e+00
    2/5 [===========>..................] - ETA: 0s - loss: 3.4038 - accuracy: 0.1250 - precision: 0.5000 - recall: 0.1667        
    3/5 [=================>............] - ETA: 0s - loss: 3.3367 - accuracy: 0.1667 - precision: 0.5000 - recall: 0.1111
    4/5 [=======================>......] - ETA: 0s - loss: 3.2700 - accuracy: 0.1875 - precision: 0.5000 - recall: 0.0833
    5/5 [==============================] - ETA: 0s - loss: 3.2022 - accuracy: 0.2000 - precision: 0.6667 - recall: 0.1250
    5/5 [==============================] - 3s 669ms/step - loss: 3.2022 - accuracy: 0.2000 - precision: 0.6667 - recall: 0.1250 - val_loss: 2.8924 - val_accuracy: 0.5000 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
    Epoch 3/30
    1/5 [=====>........................] - ETA: 0s - loss: 2.8710 - accuracy: 0.2500 - precision: 0.0000e+00 - recall: 0.0000e+00
    2/5 [===========>..................] - ETA: 0s - loss: 2.8412 - accuracy: 0.1250 - precision: 0.0000e+00 - recall: 0.0000e+00
    3/5 [=================>............] - ETA: 0s - loss: 2.8127 - accuracy: 0.1667 - precision: 0.5000 - recall: 0.1000        
    4/5 [=======================>......] - ETA: 0s - loss: 2.7665 - accuracy: 0.1875 - precision: 0.3333 - recall: 0.1818
    5/5 [==============================] - ETA: 0s - loss: 2.7303 - accuracy: 0.1500 - precision: 0.2857 - recall: 0.1429
    5/5 [==============================] - 3s 627ms/step - loss: 2.7303 - accuracy: 0.1500 - precision: 0.2857 - recall: 0.1429 - val_loss: 2.3946 - val_accuracy: 0.5000 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    可以看到,这个时候只会以进度条的方式打印每一个Epoch的评价指标(包括默认的lossaccuracyprecisionrecall以及你自己设定的评价指标),不会打印模型的存储信息。

    3.2.只打开ModelCheckpointverbose

    可以看到,这个时候会根据ModelCheckpoint中设定的监控指标:

        checkpoint = ModelCheckpoint(model_x.__name__ + '-{epoch:02d}'
                                                        '-{loss:.4f}'
                                                        '-{accuracy:.4f}'
                                                        '-{val_loss:.4f}'
                                                        '-{val_accuracy:.4f}.h5',
                                     monitor='val_accuracy',
                                     verbose=1,
                                     mode='max',
                                     save_best_only=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    只打印模型的存储信息,模型的评价指标(包括默认的lossaccuracyprecisionrecall以及你自己设定的评价指标)不会打印:

    Epoch 00001: val_accuracy improved from -inf to 0.50000, saving model to model_and_log\img_aug+mixup+Xception\Xception-01-3.4481-0.2000-3.2658-0.5000.h5
    Epoch 00002: val_accuracy did not improve from 0.50000
    Epoch 00003: val_accuracy did not improve from 0.50000
    
    • 1
    • 2
    • 3

    3.3.同时打开ModelCheckpointmodel.fitverbose

    Epoch 1/30
    1/5 [=====>........................] - ETA: 0s - loss: 3.5883 - accuracy: 0.5000 - precision: 0.0000e+00 - recall: 0.0000e+00
    2/5 [===========>..................] - ETA: 0s - loss: 3.5933 - accuracy: 0.2500 - precision: 1.0000 - recall: 0.1667        
    3/5 [=================>............] - ETA: 0s - loss: 3.5551 - accuracy: 0.2500 - precision: 0.5000 - recall: 0.1250
    4/5 [=======================>......] - ETA: 0s - loss: 3.5576 - accuracy: 0.2500 - precision: 0.6667 - recall: 0.1667
    5/5 [==============================] - ETA: 0s - loss: 3.5451 - accuracy: 0.2000 - precision: 0.8000 - recall: 0.2500
    Epoch 00001: val_accuracy improved from -inf to 0.50000, saving model to model_and_log\img_aug+mixup+Xception\Xception-01-3.5451-0.2000-3.3282-0.5000.h5
    5/5 [==============================] - 4s 889ms/step - loss: 3.5451 - accuracy: 0.2000 - precision: 0.8000 - recall: 0.2500 - val_loss: 3.3282 - val_accuracy: 0.5000 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
    Epoch 2/30
    1/5 [=====>........................] - ETA: 0s - loss: 3.3335 - accuracy: 0.2500 - precision: 0.0000e+00 - recall: 0.0000e+00
    2/5 [===========>..................] - ETA: 0s - loss: 3.3294 - accuracy: 0.1250 - precision: 0.0000e+00 - recall: 0.0000e+00
    3/5 [=================>............] - ETA: 0s - loss: 3.2696 - accuracy: 0.1667 - precision: 0.5000 - recall: 0.1111        
    4/5 [=======================>......] - ETA: 0s - loss: 3.1904 - accuracy: 0.1875 - precision: 0.6667 - recall: 0.1667
    5/5 [==============================] - ETA: 0s - loss: 3.1653 - accuracy: 0.1500 - precision: 0.8000 - recall: 0.2500
    Epoch 00002: val_accuracy did not improve from 0.50000
    5/5 [==============================] - 3s 599ms/step - loss: 3.1653 - accuracy: 0.1500 - precision: 0.8000 - recall: 0.2500 - val_loss: 2.8628 - val_accuracy: 0.5000 - val_precision: 0.5000 - val_recall: 1.0000
    learning_rate= 0.00285
    Epoch 3/30
    1/5 [=====>........................] - ETA: 0s - loss: 2.8587 - accuracy: 0.2500 - precision: 0.5000 - recall: 0.5000
    2/5 [===========>..................] - ETA: 0s - loss: 2.8461 - accuracy: 0.1250 - precision: 0.7500 - recall: 0.5000
    3/5 [=================>............] - ETA: 0s - loss: 2.7913 - accuracy: 0.1667 - precision: 0.8000 - recall: 0.4000
    4/5 [=======================>......] - ETA: 0s - loss: 2.7635 - accuracy: 0.2500 - precision: 0.6250 - recall: 0.4545
    5/5 [==============================] - ETA: 0s - loss: 2.7230 - accuracy: 0.2500 - precision: 0.6364 - recall: 0.5000
    Epoch 00003: val_accuracy did not improve from 0.50000
    5/5 [==============================] - 3s 617ms/step - loss: 2.7230 - accuracy: 0.2500 - precision: 0.6364 - recall: 0.5000 - val_loss: 2.3710 - val_accuracy: 0.5000 - val_precision: 0.5000 - val_recall: 1.0000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    可以看到,如果二者同时打开的话,模型的评价指标和存储信息均会打印,并不会产生影响,二者是完全独立的!

    4.结论🤔

    1. model.fitverbose负责打印每一个Epoch的评价指标(包括默认的lossaccuracyprecisionrecall以及你自己设定的评价指标)
    2. ModelCheckpointverbose负责打印模型的存储信息,如存储路径存储模型的文件名
    3. 二者是完全独立的不会相互覆盖

    渣男!都看到这里了,还不赶紧点赞评论收藏走一波?

  • 相关阅读:
    Ros1 学习12- tf坐标系广播与监听的编程实现
    内外“双驱”, NFT价值UPUP
    手把手教你,Selenium 遇见伪元素该如何处理?
    基于Socket编程下 实现Linux-Linux、Linux-Windows udp通信
    九、MFC控件(一)
    通过JavaScript、css、H5 实现简单的tab栏的交换和复用
    Typora收费了,于是乎我自己写了一个
    TCP三次握手四次分手不一样的解释
    自动化测试之路 —— Appium输入及模拟手势
    2、一起探讨MySQL 安装
  • 原文地址:https://blog.csdn.net/qq_15969343/article/details/126330450