我是一个学习机器学习的,想应用在树莓派上。我正在运行 RPi 4b:
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
with armv7l architecture
I have installed tensorflow and it's version is 2.5.0-rc0.
我正在尝试加载我在 colab 中训练的模型,该模型使用 Adam 优化器,但是每当我尝试加载它时我都会得到这个结果:
ValueError: Unknown optimizer: Custom\>Adam. Please ensure this object is passed to the \`custom_objects\` argument. See <https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object> for details.
import librosa
import numpy as np
import tensorflow as tf
from tensorflow.keras.optimizers import Adam
import simpleaudio as sa
# Load the trained ML model
with tf.device('/cpu:0'):
model = tf.keras.models.load_model('/home/pi/Desktop/project/pineapplemodeltwoclassbs16e75.h5')
我该如何解决该错误?
我尝试添加这个:
# Define the custom Adam optimizer
class CustomAdam(Adam):
pass
# Register the custom optimizer
tf.keras.utils.get_custom_objects().update({'CustomAdam': CustomAdam})
# Load the trained ML model
with tf.device('/cpu:0'):
model = tf.keras.models.load_model('/home/pi/Desktop/project/pineapplemodeltwoclassbs16e75.h5', custom_objects={'CustomAdam': CustomAdam})
仍然导致相同的错误。
我也尝试过这个:
# Load the Adam optimizer from the tensorflow.keras.optimizers module
Adam = tf.keras.optimizers.Adam
# Load the trained ML model
with tf.device('/cpu:0'):
model = tf.keras.models.load_model('/home/pi/Desktop/project/pineapplemodeltwoclassbs16e75.h5', custom_objects={'Adam': Adam})
结果还是一样。
根据文档:
Keras 通过检查模型的架构来保存模型。这项技术可以拯救一切:
- 重量值
- 模型的架构
- 模型的训练配置(传递给 .compile() 方法的内容)
- 优化器及其状态(如果有)(这使您能够从上次中断的地方重新开始训练)
Keras 无法保存 v1.x 优化器(来自 tf.compat.v1.train),因为它们与检查点不兼容。对于 v1.x 优化器,您需要在加载后重新编译模型,从而丢失优化器的状态。
由于 Adam Optimizer 是 v1.x 优化器,您可能需要重新编译模型。如果您不使用加载的模型进行训练,则无需重新编译它。只需在调用
compile=False
时设置参数load_model
即可。
例如:
load_model('file.h5', compile=False)
您可以改用tensorflow传统格式:
model.save("model1", save_format='tf')