【发布时间】:2021-09-13 16:42:05
【问题描述】:
我正在尝试为使用 keras 创建的神经网络创建部分依赖图。为了实现这一点,我必须创建一个 KerasClassifier 或 KerasRegressor。在使用此导入无法正常工作后:
from keras.wrappers.scikit_learn import KerasClassifier
我尝试使用 scikeras 但使用以下代码
import numpy as np
import lime
import lime.lime_tabular
import matplotlib.pyplot as plt
df=pd.read_csv("heart.csv")
df.columns=["age", "sex", "chest_pain_type", "resting_blood_pressure", "cholesterol", "fasting_blood_sugar",
"resting_ecg", "max_heart_rate", "exercise_induced_angina", "st_depression", "st_slope",
"number_major_vessels", "thalassemia", "heart_attack"]
X=df.drop("heart_attack", axis=1).to_numpy()
y=df["heart_attack"].to_numpy()
from sklearn.model_selection import train_test_split
import keras
from keras.layers import Dense, Dropout, BatchNormalization
from keras.models import Sequential
from keras.callbacks import EarlyStopping
from scikeras.wrappers import KerasClassifier
def split_data(X, y):
return train_test_split(X, y, train_size=0.8, random_state=10)
# KerasClassifier for PDP
###############################################################################
def create_model_classifier():
model=Sequential()
model.add(BatchNormalization())
model.add(Dense(70, activation="relu", input_shape=(13,)))
model.add(Dense(70, activation="relu"))
model.add(Dropout(0.2))
model.add(Dense(70, activation="relu"))
model.add(Dense(70, activation="relu"))
model.add(Dense(1,activation="sigmoid"))
opt=keras.optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=opt, loss="binary_crossentropy", metrics=["accuracy", keras.metrics.FalseNegatives(), keras.metrics.FalsePositives()])
return model
X_train, X_test, y_train, y_test=split_data(X, y)
model_reg = KerasClassifier(model=create_model_classifier)
early_stopping=EarlyStopping(monitor="val_loss", patience=10, verbose=0, mode="auto")
history=model_reg.fit(
X_train,
y_train,
epochs=500,
batch_size=32,
shuffle=True,
validation_data=(X_test, y_test),
callbacks=[early_stopping]
)
我得到这个错误代码:
Traceback (most recent call last):
File "C:\Users\Leonard\Desktop\X AI - Heart Attacks\main.py", line 95, in <module>
history=model_reg.fit(
File "C:\Users\Leonard\anaconda3\lib\site-packages\scikeras\wrappers.py", line 1416, in fit
super().fit(X=X, y=y, sample_weight=sample_weight, **kwargs)
File "C:\Users\Leonard\anaconda3\lib\site-packages\scikeras\wrappers.py", line 747, in fit
self._fit(
File "C:\Users\Leonard\anaconda3\lib\site-packages\scikeras\wrappers.py", line 866, in _fit
self._check_model_compatibility(y)
File "C:\Users\Leonard\anaconda3\lib\site-packages\scikeras\wrappers.py", line 536, in _check_model_compatibility
if self.n_outputs_expected_ != len(self.model_.outputs):
TypeError: object of type 'NoneType' has no len()
还有一些警告,因为我的 fit 方法中的参数似乎不是问题。即使我的 fit 方法中只有 X_train 和 y_train,我也会收到此错误。
【问题讨论】:
标签: python machine-learning keras scikit-learn neural-network