You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas DataFrame与Keras训练ANN时遇数据适配器匹配错误

解决Keras模型.fit()报错:Failed to find data adapter that can handle input...

问题原因

从错误详情能明确看到,你的X_train和y_train都是Pandas DataFrame类型。对于二分类的客户流失预测任务,Keras的model.fit()期望标签y是一维结构(比如Pandas Series或NumPy数组),而非二维的DataFrame,这才导致数据适配器无法识别输入格式。

解决方法

方法1:将y转换为NumPy数组

直接调用.values或.to_numpy()方法,把y_train转成NumPy一维数组:

model.fit(X_train, y_train.values, epochs=100)
# 或者用to_numpy()更规范
model.fit(X_train, y_train.to_numpy(), epochs=100)

方法2:将y转换为Pandas Series

如果y_train是单列DataFrame,通过取列名或.squeeze()方法降维成Series:

# 假设y_train的列名为'churn'
model.fit(X_train, y_train['churn'], epochs=100)
# 或者用squeeze自动处理单列降维
model.fit(X_train, y_train.squeeze(), epochs=100)

方法3:统一转换X和y为NumPy数组(可选)

虽然Keras支持直接用DataFrame作为特征输入,但统一转成NumPy数组也能彻底解决格式问题:

model.fit(X_train.to_numpy(), y_train.to_numpy(), epochs=100)

修改后的完整代码示例

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(26, input_shape=(26,), activation='relu'),
    keras.layers.Dense(15, activation='relu'),
    keras.layers.Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# 转换y_train为NumPy数组后训练
model.fit(X_train, y_train.to_numpy(), epochs=100)

内容的提问来源于stack exchange,提问作者RAKIB23424

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:45:35