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

使用简单神经网络处理化学组成数据时遇numpy.float64转整数错误

问题排查与解决

核心错误原因

你遇到的'numpy.float64' object cannot be interpreted as an integer错误,大概率是神经网络权重初始化时传入了浮点类型的维度参数。

结合你的场景分析:

  • MNIST测试时你手动指定了输出层维度(如10个神经元),是整数,所以正常运行;
  • 处理自有数据时,你可能通过np.max(Y_train) + 1计算类别数,但Y_train被你转成了np.float_类型,导致计算出的类别数是float64,而np.random.randn()这类生成权重的函数要求维度必须是整数,因此报错。

解决步骤

1. 修正类别数的整数类型转换

将计算出的类别数强制转换为整数,同时确保标签是合法的整数值:

# 先将标签转为整数类型(确保标签是0.0、1.0这类整数形式的浮点数)
Y_train = Y_train.astype(int)
Y_dev = Y_dev.astype(int)

# 计算类别数并转为整数
num_classes = int(np.max(Y_train)) + 1

2. 检查数据维度是否正确

你提到原始数据维度是25×270(24特征+1标签为行,270个样本为列),但当前代码中:

m, n = data.shape
data_train = data[60:m].T

如果data.shape是(25,270),那么m=25,data[60:m]会取空数组(因为60>25),导致训练集为空。需要先转置数据,确保样本为行:

data = np.array(data).T  # 转置后shape为(270,25),270个样本,每个样本25个元素(24特征+1标签)
m, n = data.shape  # m=270(样本数),n=25(特征+标签数)

3. 确认梯度循环参数为整数

检查梯度下降的迭代次数epochs是否为整数,避免传入100.0这类浮点值,range(epochs)要求参数必须是整数。

补充说明

关于preprocessing.normalize的使用:当前你是对特征行做归一化,但通常我们需要对每个样本(列)做归一化,建议指定axis=0:

X_train = preprocessing.normalize(X_train, axis=0)
X_dev = preprocessing.normalize(X_dev, axis=0)

这一步不会导致当前的整数错误,但会影响模型训练效果。

内容的提问来源于stack exchange,提问作者Angel Augusto Verbel Olarte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:50:28