微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

保存和恢复keras张量流模型,TF 2.3.1

如何解决保存和恢复keras张量流模型,TF 2.3.1

我有一些Tensorflow代码,我希望能够在其中存储模型的检查点并还原它们以备以后训练。因此,在训练期间,我会在每个时期之后执行回调以保存模型检查点:

    callbacks = [

    tf.keras.callbacks.ModelCheckpoint(
        filepath=checkpoint_dir + "cp-{epoch:04d}/",save_weights_only=False,save_freq='epoch'
    )
    ]
    
    epochs = offset + epochs
    history = model.fit(
      train_ds,validation_data=val_ds,epochs=epochs,initial_epoch=offset,callbacks=callbacks
    )

这强制执行我认为是完整模型保存的操作,与执行model.save()一样,我应该可以使用tf.keras.models.load_model()进行还原。如果我尝试这样做,并继续使用model.fit()进行训练。但是,如果我尝试使用该模型,则该模型将受model.fit()函数的约束,但实际上并未经过训练,即不会改善损失,acc,val_loss和val_acc。

我进行了一次小测试,以查看保存并立即从同一保存中恢复模型,然后使用这两个模型对同一数据集执行预测时会发生什么情况:

    history = model.fit(
      train_ds,callbacks=callbacks
    )
    
    model.save(model_save_dir)
    
    #check saved model 
    reconstructed_model = tf.keras.models.load_model(model_save_dir)
    
    np.testing.assert_allclose(
        model.predict(val_ds),reconstructed_model.predict(val_ds)
    )

但是这失败了,因为模型没有返回相同的预测

AssertionError:
Not equal to tolerance rtol=1e-07,atol=0

Mismatched elements: 688 / 690 (99.7%)
Max absolute difference: 33.917725
Max relative difference: 1119.114
 x: array([[ 1.651797e+01,-1.064627e+01],[ 1.585344e+01,-7.196617e+00],[ 1.712969e+01,-1.259462e+01],...
 y: array([[ 1.290330e+01,-3.750256e+00],[ 2.006368e+01,-6.696366e+00],[ 1.711884e+01,-8.859956e+00],...

我的问题是这样的: 在Tensorflow 2.3中,保存和恢复模型以恢复训练的正确方法是什么?

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。