我想保存Tensorflow模型以备后续部署使用。我不想使用
model.save()
进行保存,因为我的目的是以某种方式将其“序列化”,并在未安装Tensorflow的不同系统中使用,例如:model = pickle.load(open(path, 'rb'))
model.predict(prediction_array)
之前我使用sklearn进行KNN模型的序列化时,成功了,并且无需安装sklearn即可运行推理。
但是当我尝试序列化Tensorflow模型时,出现了以下错误:
Traceback (most recent call last):
File "e:/VA_nlu_addition_branch_lite/nlu_stable2/train.py", line 21, in <module>
pickle.dump(model, open('saved/model.p', 'wb'))
TypeError: can't pickle _thread.RLock objects
我的模型长这样:
model = keras.Sequential([
keras.Input(shape=(len(x[0]))),
keras.layers.Dense(units=16, activation='elu'),
keras.layers.Dense(units=8, activation='elu'),
keras.layers.Dense(units=len(y[0]), activation='softmax'),
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x, y, epochs=200, batch_size=8)
pickle.dump(model, open('saved/model.p', 'wb'))
模型概述
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 16) 1680
_________________________________________________________________
dense_1 (Dense) (None, 8) 136
_________________________________________________________________
dense_2 (Dense) (None, 20) 180
=================================================================
Total params: 1,996
Trainable params: 1,996
Non-trainable params: 0
这里有一个涉及此问题的StackOverflow问题,但是答案中的链接已经失效了。
还有另一个类似的问题在这里,但我并没有完全理解。
我有一个非常简单的模型,没有检查点,也没有太复杂的东西,所以是否有一些方法将TensorFlow模型对象保存到二进制文件中?即使是多个二进制文件,我也不介意,但它只是不需要使用tensoflow。如果numpy解决方案会有帮助的话,我会使用它,但我不知道如何在这里实现它。任何帮助都将不胜感激,谢谢!