神经网络实现地震预测时Model.predict报numpy.ndarray不可调用错误求助
问题原因及解决办法
1. 直接报错的修复方案
- 你遇到的
TypeError: 'numpy.ndarray' object is not callable错误,直接原因是model.predict不再是Keras模型自带的预测方法,被你在之前的运行过程中误赋值成了numpy数组。你只需要重启Jupyter内核,按顺序重新运行所有代码即可解决该报错。 - 后续编写代码时注意不要写
model.predict = xxx这类赋值语句,避免覆盖模型自带的方法名。
2. 代码逻辑其他问题修复
你当前的神经网络配置完全不匹配该地震损害等级预测任务的要求,即使修复了上述报错也无法得到正确结果,需要做如下调整:
- 该任务是3分类任务(损害等级分为1/2/3三类),不是二分类或回归任务:
- 输出层改为
Dense(3, activation='softmax') - 损失函数改为
sparse_categorical_crossentropy(如果使用整数形式的原始标签无需额外编码),如果提前把标签做了独热编码则改用categorical_crossentropy - 编译模型时建议加入
metrics=['accuracy']方便观测训练过程中的分类准确率
- 输出层改为
- 当前网络的拟合能力不足,两层4神经元的隐藏层不足以处理39维特征的分类任务,建议调整隐藏层规格,示例如下:
model = Sequential() model.add(Dense(32, activation = 'relu')) model.add(Dense(16, activation = 'relu')) model.add(Dense(3, activation='softmax')) model.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
- 你代码里将测试集的变量命名为
test_labels存在歧义,实际读取的是测试特征文件test_values.csv,建议修改命名避免后续逻辑混淆。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

