首页 > 解决方案 > 加载 keras 模型后,batchnorm 层(beta,gamma)不存在梯度

问题描述

我使用 keras sublcassing 方法创建了一个简单的分类模型,其中在 init 函数中我添加了 keras.layers api 的 batchnorm 层。我还在使用自定义拟合方法,其中我更改了训练步骤和测试步骤,提供了自定义损失函数。在训练时,我正在使用 keras“ModelCheckpoint”回调来保存模型,这似乎可以保存模型(savedModel 格式)。
我正在使用 tf.keras.models.load_model() 函数加载模型,因此在以推理模式加载模型时(compile = False),模型似乎按预期执行,当我尝试从我的位置重新训练它时出现问题离开它,在加载模型时,它会警告所有batchnorm beta和gamma变量不存在梯度,并且最后一个密集层内核和偏差也不存在。由于它是一个警告,训练继续,但现在损失和其他指标绝对为零。因此,再培训的目的变成了一场灾难。
这是我如何调用模型类和培训的小片段

    if not os.listdir(save_dir):
    print("No trained model found , starting from scratch")
    classifier = classifier_model(num_classes , train_summary_writer)
    classifier.compile(optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3))
else:
    print("partially trained model found , resuming the training")
    classifier = tf.keras.models.load_model(save_dir)

classifier.fit(train_data_generator,
               epochs = num_epochs,
               use_multiprocessing = True,
               validation_data = val_data_generator,
               callbacks = callbacks)
print("Training Completed")

有人可以评论一下这种情况吗

标签: pythondeep-learningtensorflow2.0tf.keras

解决方案


推荐阅读