我将tensorflow从tensorflow 2.2升级到了2.4.1版,现在我无法再保存内置KerasRegressionor的sklearn管道。使用joblib.dump时,会收到以下错误消息:
TypeError: can't pickle tensorflow.python._tf_stack.StackSummary objects
如果我只是尝试对文件进行pickle,我会收到以下消息:
TypeError: can't pickle weakref objects
如果我使用dill,我会得到与使用joblib时相同的错误消息
我已尝试搜索此问题,但找不到太多帮助。我不知道StackSummary对象是什么
下面是一个独立的例子,再现了这个问题:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.compose import TransformedTargetRegressor
from joblib import dump
def create_model(lr=10**-4, first_layer_nodes=100, amsgrad_yn=0,
second_layer_nodes=100, third_layer_nodes=100, loss='mse',
Leaky_alpha_slope=1, dropout_rate=0.01, output_shape=4, cal_points=[8,9]):
model = Sequential()
model.add(Dense(first_layer_nodes))
Adam = optimizers.Adam(lr=lr, amsgrad=amsgrad_yn)
model.add(Dense(output_shape, activation='linear'))
model.compile(optimizer=Adam, loss=loss)
return model
def make_pipeline(val_split=.2, verbose=1, callbacks=[], **parameters):
NN = KerasRegressor(build_fn=create_model, validation_split=val_split, verbose=verbose, callbacks=callbacks, **parameters)
scaler = StandardScaler()
y_scaler = StandardScaler()
NN_model_with_y_scaling = TransformedTargetRegressor(regressor=NN, transformer=y_scaler)
pipeline = Pipeline([
('preprocess', scaler),
('NN_model', NN_model_with_y_scaling)])
return pipeline
model = make_pipeline(val_split=.2, verbose=0, **parameters)
x_train = np.random.rand(1000, 28)
y_train = np.random.rand(1000, 4)
model.fit(x_train, y_train)
dump(model, 'test.joblib')
目前没有回答
相关问题 更多 >
编程相关推荐