【问题标题】:Load model in keras在 keras 中加载模型
【发布时间】:2018-11-07 18:20:29
【问题描述】:

当在 keras API 中将模型(之前处理过的)加载到 LSTM 网络中时,它会在网络中(显式地)包含训练数据吗?

如果不是,这将如何(加载模型)帮助预测时间序列中的模式。

【问题讨论】:

    标签: keras deep-learning lstm


    【解决方案1】:
    from keras.models import Sequential
    from keras_contrib.losses import import crf_loss
    from keras_contrib.metrics import crf_viterbi_accuracy
    
    # To save model
    model.save('my_model_01.hdf5')
    
    # To load the model
    custom_objects={'CRF'                 : CRF,
                  'crf_loss'            : crf_loss,
                  'crf_viterbi_accuracy': crf_viterbi_accuracy}
    
    # To load a persisted model that uses the CRF layer 
    model1 = load_model("/home/abc/my_model_01.hdf5", custom_objects = custom_objects)
    

    【讨论】:

      【解决方案2】:

      将模型(之前处理过的)加载到 LSTM 网络中时 keras API 是否会在网络中(显式)包含训练数据?

      model.save() 旨在排除已保存文件中的训练数据。 大多数情况下,您会在进行预测训练后保存模型。在预测情况下,您不再需要原始数据,因为模型根据与模型一起保存的训练权重进行预测,这基本上是定义模型的层列表。 model.summary()描述keras对模型的信息很好。

      如果不是,这将如何(加载模型)帮助预测模式 在时间序列中。

      model.save()基本上省了两件事:

      1. 您的模型(基本上是图层对象及其关系)
      2. 属于模型中每一层的权重。

      模型的权重是您训练的产物,是您的模型在训练期间获得的“知识”,这是预测新样本所必需的。

      【讨论】:

      • 很好地解释了@dennis-ec。还有一个疑问是验证数据重要还是测试数据重要,或者这两种数据都是训练所必需的?
      • 训练需要验证数据。您需要一个独立的数据集来验证您的训练并确保您不会过度训练。因为您使用验证集确定训练的终点,所以它与训练并非完全无关。因此,为了在完全不相关的数据集上测试您的模型,您需要测试数据集。训练期间不得使用此数据集。
      【解决方案3】:

      因为任何神经网络(CNN、LSTM 或其他)的目标都是从训练数据中学习(计算重量)并泛化到任何数据(相同问题的)。所以你只需要加载网络的架构和重量。

      在 keras 中,简单的方法是保存/加载架构和重量:

      model.save('my_model.hdf5')
      
      model.load('my_model.hdf5') 
      

      【讨论】:

      • 非常感谢@Marcelo Queirós
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2020-08-26
      • 2020-06-04
      • 1970-01-01
      • 2019-08-03
      • 2019-03-26
      相关资源
      最近更新 更多