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

使用PyCox实现DeepSurv时DataFrameMapper特征转换报错如何解决

问题1:报错与batch_size的关联及batch_size含义

  • 该报错和batch_size完全无关。
  • batch_size是深度学习训练过程中,单次迭代输入到神经网络中参与梯度计算的样本数量,仅影响训练效率、梯度稳定性和显存占用,不会触发数据类型类报错。

报错原因分析

第一个RuntimeError原因

你当前的配置下DataFrameMapper返回的是pandas DataFrame对象,直接调用.astype('float32')可能没有完成全量数值的类型转换,或者你遗漏了标签y_train的类型转换:原始数据中的整数型特征、事件标签(0/1取值)、生存时长字段如果保留int64类型,就会被PyTorch识别为Long类型,和模型要求的Float类型不匹配。

第二个All objects in 'data' does have the same type报错原因

pycox的模型输入要求为numpy数组或PyTorch张量,你直接传入pandas DataFrame对象时,框架会将DataFrame整体识别为一个对象类型,无法匹配数值输入要求。

解决方案

方案1:保留DataFrameMapper的修正写法

确保转换后输出为numpy数组再做类型转换,同时统一处理标签的类型:

cols_leave = df_train.columns.values.tolist()
leave = [(col, None) for col in cols_leave]
x_mapper = DataFrameMapper(leave)

# 新增.values获取numpy数组后再转类型
x_train = x_mapper.fit_transform(df_train).values.astype('float32')
x_val = x_mapper.transform(df_val).values.astype('float32')
x_test = x_mapper.transform(df_test).values.astype('float32')

# 补充标签类型转换,假设duration和event是你的标签字段
y_train = np.array([df_train['duration'], df_train['event']], dtype='float32').T
y_val = np.array([df_val['duration'], df_val['event']], dtype='float32').T
y_test = np.array([df_test['duration'], df_test['event']], dtype='float32').T

方案2:不使用DataFrameMapper的简化写法

# 直接转numpy数组再转float32
x_train = df_train.to_numpy().astype('float32')
x_val = df_val.to_numpy().astype('float32')
x_test = df_test.to_numpy().astype('float32')

# 同样处理标签
y_train = np.array([df_train['duration'], df_train['event']], dtype='float32').T
y_val = np.array([df_val['duration'], df_val['event']], dtype='float32').T
y_test = np.array([df_test['duration'], df_test['event']], dtype='float32').T

验证步骤

训练前执行以下代码确认类型正确:

print(x_train.dtype, y_train.dtype)
# 预期输出均为float32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:51:01