DataFrame转Keras模型输入层遇形状不匹配,求正确转换方法
解决Keras输入不兼容及DataFrame转数组问题
问题根源
你犯了两个关键错误:
- 转换DataFrame为数组时,用了
X_test_soc.to_num而非正确的X_test_soc.to_numpy(),前者只是引用方法对象,没有实际执行数据转换,导致后续的"数组"无有效数据,重塑时触发size 0的错误。 - 无效的转换结果被传入模型,自然会引发输入形状不匹配的报错。
正确解决步骤
正确转换DataFrame为numpy数组
执行以下代码完成转换:X_test_soc_array = X_test_soc.to_numpy()转换后用以下命令验证数据有效性:
print(X_test_soc_array.shape) # 应输出 (2203, 16) print(X_test_soc_array.size) # 应输出 2203*16=35248检查DataFrame的合法性
如果转换后仍有问题,先排查DataFrame本身:- 用
X_test_soc.info()查看是否存在非数值类型列,Keras模型要求输入为数值型数据,若有字符串等非数值列,需先通过编码或删除处理。 - 用
X_test_soc.isnull().sum()检查空值情况,大量空值会导致转换后的数组异常,需填充或删除含空值的行。
- 用
传入模型预测
确认数组形状正确后,直接传入模型即可:predictions = model.predict(X_test_soc_array)Keras默认支持批量输入,
(2203,16)的形状完全匹配模型要求的(None,16)(None代表自动适配批量大小)。
内容的提问来源于stack exchange,提问作者Melissa Ingle
相关产品推荐
相关产品推荐

