如何解决使用 Scikit-Learn 管道的 Keras 网络导致 ValueError
我正在努力构建一个使用 Keras 和 Scikit-Learn 管道进行预处理的神经网络。到目前为止,我已经能够构建管道和初始模型架构(非常基本),但是在将两者结合起来时遇到了问题。我能够将管道用于其他机器学习模型(问题在于深度学习)。
我继续收到以下值错误:
ValueError: 层序列 53 的输入 0 与 层:输入形状的预期轴 -1 具有值 5 但已收到 输入形状(无,49)
当我更新模型的 input_dim 以解决初始错误时,我在第一个 epoch 完成运行后收到类似的错误:
纪元 1/100 283/300 [============================>..] - 预计到达时间:0s - 损失: 0.5751 - binary_accuracy:0.7925 -------------------------------------------------- ------------------------- ValueError Traceback(最近调用 最后)在 1 # 拟合模型 ----> 2 history = pipeline.fit(X_train,y_train)
ValueError: 层序列_54 的输入 0 与 层:输入形状的预期轴 -1 具有值 49,但已收到 输入形状(无,5)
将 keras 神经网络嵌入到 sklearn 管道(需要单热编码分类变量的管道?
)的最佳方法是什么?以下代码摘要:
# Preprocessing Pipeline
numeric_features = list(X.select_dtypes(include=['number']))
numeric_transformer = Pipeline(steps=[
('imputer',SimpleImputer(strategy='median')),('normalize',MinMaxScaler(feature_range=(0,1)))])
categorical_features = list(X.select_dtypes(include=['category']))
categorical_transformer = Pipeline(steps=[
('imputer',SimpleImputer(strategy='constant',fill_value='missing')),('onehot',OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(
transformers=[
('num',numeric_transformer,numeric_features),('cat',categorical_transformer,categorical_features)]
)
# Split Data into Training and Test Sets
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42,shuffle=True)
# Split Training Data into Training and Validation Sets
X_train,X_val,y_val = train_test_split(X_train,test_size=0.25,shuffle=True)
def CreateModel():
# Define Model
model = Sequential([
layers.Dense(units=32,activation='relu',input_dim=X.shape[-1]),layers.Dense(units=16,activation='relu'),layers.Dense(units=1,activation='sigmoid')
])
# Specify Optimizer
optimizer = optimizers.Adam(epsilon=0.01)
# Compile the Model
model.compile(optimizer=optimizer,loss='binary_crossentropy',metrics=['binary_accuracy'])
return model
# Add Early Stopping
early_stopping = EarlyStopping(monitor='val_loss',patience=10,min_delta=0.001,restore_best_weights=True)
# Instantiate Baseline Classification Models
clf = KerasClassifier(build_fn=CreateModel,verbose=1,epochs=100,batch_size=16,validation_data=(X_val,y_val),callbacks=[early_stopping])
# Fit to the training set
pipeline = Pipeline(steps=[
('preprocessor',preprocessor),('classifier',clf)
])
# Fit Model
history = pipeline.fit(X_train,y_train)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。