python - 加载 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")
有人可以评论一下这种情况吗
解决方案
推荐阅读
- c++ - Create Custom Extention from Function for std::vector
- javascript - 获得承诺的结果
- java - Invalid file path, but only if I build the file name with a field
- delphi - DataSnap 服务器方法内部,如何读取所有请求标头
- python - 如何从调用另一个脚本的子进程中获取回溯?
- regex - Scala Regex Positive and Negative Look Behind at the same time
- java - 需要帮助在 firebase auth 中创建用户
- sql - 统计sql中具有相同id的多条记录
- session - Wildfly 17 Distributed Infinispan Cache Session not found
- angular - 我应该升级到 Angular 8 以将 Web 应用程序迁移到 NativeScript 吗?