【发布时间】:2020-09-25 12:38:54
【问题描述】:
我正在尝试使用 keras 构建分类器,下面是我的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.preprocessing import MinMaxScaler
from collections import Counter
from imblearn.over_sampling import SMOTE
from keras.models import Sequential
from keras.layers import Dense
import pickle
import joblib
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv('bankloan.csv')
df = df.dropna()
df.isna().any()
df = df.drop('Loan_ID', axis=1)
df['LoanAmount'] = (df['LoanAmount']*1000).astype(int)
pre_y = df['Loan_Status']
pre_X = df.drop('Loan_Status', axis=1)
dm_X = pd.get_dummies(pre_X)
dm_y = pre_y.map(dict(Y=1, N=0))
smote = SMOTE()
X1, y = smote.fit_sample(dm_X, dm_y)
sc = MinMaxScaler()
X = sc.fit_transform(X1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=True)
classifier = Sequential()
classifier.add(Dense(200, activation='relu', input_dim=X_test.shape[1]))
classifier.add(Dense(400, activation='relu'))
classifier.add(Dense(4, activation='relu'))
classifier.add(Dense(1, activation='sigmoid'))
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
classifier.fit(X_train, y_train, batch_size=20, epochs=100, verbose=0)
filename = 'loan_model.pkl'
joblib.dump(classifier, filename)
这是我正在尝试做的,模型非常好,但是在我尝试保存模型的最后一步时,它显示了这个错误:
TypeError: can't pickle _thread.RLock objects
【问题讨论】:
-
看看at this Github issue,这似乎是一个库问题,没有什么可以帮助解决的
-
没有帮助。
-
确实,因为问题在 keras 方面没有得到解决(而且我怀疑它永远不会解决,考虑到 keras 已完全集成到 TF 中,我不认为 tf.keras 是永远腌制)