'ListWrapper'对象在执行网格搜索时没有属性'get_config'错误



我必须在DNN上进行网格搜索。但我在GridSearchCV函数上遇到了一个错误。这是创建和编译我使用的模型的代码,也是我尝试进行网格搜索时使用的代码。

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Dropout
import keras,sklearn
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
from sklearn.model_selection import GridSearchCV
from keras.wrappers.scikit_learn import KerasClassifier

CASE = 1
if CASE == 1:
model = Sequential()
model.add(Dense(L,input_shape=(L,), activation ="relu"))
model.add(Dense(20, activation= 'relu'))
model.add(Dense(20, activation = 'relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation = 'sigmoid'))
nepoch = 400
if CASE == 2:
model = Sequential()
model.add(Dense(L, input_shape=(L,), activation= 'sigmoid'))
model.add(Dense(3, activation= 'sigmoid'))
model.add(Dense(1, activation= 'sigmoid'))
nepoch = 400

model.compile(loss = 'binary_crossentropy',
optimizer = optimizer,
metrics = ['accuracy'])
model_gridsearch = KerasClassifier(build_fn=model, 
epochs=1, 
batch_size=50, 
verbose=1)
optimizer = ['sgd', 'rmsprop', 'adadelta', 'adam', 'adamax'] 
param_grid = dict(optimizer=optimizer)
grid = GridSearchCV(estimator=model_gridsearch, param_grid=param_grid, n_jobs=1, cv=4)
grid_result = grid.fit(x_train,y_train)

我收到的错误在grid_result = grid.fit(x_train,y_train)上上面写着AttributeError: 'ListWrapper' object has no attribute 'get_config'如果有帮助的话,我的tensorflow版本是2.8.0。

优化器列表问题。在多个优化器的情况下,您可以使用优化器包装器APItfa.optimizers.MultiOptimizer

optimizers = [
tf.keras.optimizers.SGD(learning_rate=1e-4),
tf.keras.optimizers.RMSprop(learning_rate=1e-4),
tf.keras.optimizers.Adadelta(learning_rate=1e-4),
tf.keras.optimizers.Adam(learning_rate=1e-2),
tf.keras.optimizers.Adamax(learning_rate=1e-4)
]
optimizers_and_layers = [(optimizers[0], model.layers[0:]), (optimizers[1], model.layers[1:2]),(optimizers[2], model.layers[3:4]), (optimizers[3:], .......]
optimizer = tfa.optimizers.MultiOptimizer(optimizers_and_layers)
combined_model.compile(optimizer=optimizer, loss='mse', metrics=['mse'])