我如何挑选我的神经网络预测模型,这样我就不必每次 re-train 它们了?
How do I pickle my neural net prediction models, so that i don't have to re-train them everytime?
正如标题所说,我想 pickle 我的 NN,但我得到了 TypeError
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_16896/2912615623.py in <module>
5
6 with open('lstm_model.pkl', 'wb') as file:
----> 7 pickle.dump(mod, file)
TypeError: cannot pickle 'weakref' object
我尝试了 this SO question 的解决方案,但我遇到了同样的错误。
顺便说一句,该模型是来自 sklearn lib
的 LSTM
编辑:
抱歉,@Ben Reiniger 提到的 LSTM 来自 keras.layer
这是可重现的代码。
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape = (x_train.shape[1], 1)))
model.add(LSTM(50, return_sequences = False))
model.add(Dense(25))
model.add(Dense(1))
model.compile(optimizer="adam", loss='mean_squared_error')
model.fit(x_train, y_train, batch_size = 1, epochs = 1)
# Saving the model
import pickle
mod = {'Model': model}
with open('lstm_model.pkl', 'wb') as file:
pickle.dump(mod, file)
我得到的错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_16896/2912615623.py in <module>
5
6 with open('lstm_model.pkl', 'wb') as file:
----> 7 pickle.dump(mod, file)
TypeError: cannot pickle 'weakref' object
Keras 在 docs 中描述了一个 save
方法。他们说
it is not recommended to use pickle or cPickle to save a Keras model
因此,做:
节省:
model.save('your/path')
加载中:
model = keras.models.load_model('your/path')
正如标题所说,我想 pickle 我的 NN,但我得到了 TypeError
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_16896/2912615623.py in <module>
5
6 with open('lstm_model.pkl', 'wb') as file:
----> 7 pickle.dump(mod, file)
TypeError: cannot pickle 'weakref' object
我尝试了 this SO question 的解决方案,但我遇到了同样的错误。
顺便说一句,该模型是来自 sklearn lib
编辑:
抱歉,@Ben Reiniger 提到的 LSTM 来自 keras.layer
这是可重现的代码。
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape = (x_train.shape[1], 1)))
model.add(LSTM(50, return_sequences = False))
model.add(Dense(25))
model.add(Dense(1))
model.compile(optimizer="adam", loss='mean_squared_error')
model.fit(x_train, y_train, batch_size = 1, epochs = 1)
# Saving the model
import pickle
mod = {'Model': model}
with open('lstm_model.pkl', 'wb') as file:
pickle.dump(mod, file)
我得到的错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_16896/2912615623.py in <module>
5
6 with open('lstm_model.pkl', 'wb') as file:
----> 7 pickle.dump(mod, file)
TypeError: cannot pickle 'weakref' object
Keras 在 docs 中描述了一个 save
方法。他们说
it is not recommended to use pickle or cPickle to save a Keras model
因此,做:
节省:
model.save('your/path')
加载中:
model = keras.models.load_model('your/path')