使用简单神经网络处理化学组成数据时遇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
相关产品推荐
相关产品推荐

