神经网络分类器代码无报错但print语句不输出求助
问题分析与解决方案
核心问题定位
你的代码无报错但无输出,核心原因是标签与特征的拆分逻辑错误,导致模型训练或评估环节出现隐性阻塞,而非单纯的网络结构复杂问题:
- 你先对原始特征和标签做了一次
train_test_split,之后又单独对标签和编码后的标签做了第二次train_test_split,两次拆分的样本对应关系完全错位,训练时特征和标签不匹配,模型可能陷入无效训练甚至卡在fit环节无法结束。 - 重复的编码操作(先
fit_transform所有标签,再transform拆分后的训练标签)冗余且进一步加剧了数据不匹配问题。
修正步骤
1. 统一数据拆分流程
先完成所有预处理(编码、标准化),再将特征与标签配对拆分,确保样本对应关系一致:
import pandas as pd from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import LabelEncoder # 加载数据 data = pd.read_csv("Wpc50.dat", sep='\s+', header=None, dtype=float) species = pd.read_csv("Names.txt", header=None, names=["species"]) # 标签编码:先统一编码所有物种标签 encoder = LabelEncoder() species_encoded = encoder.fit_transform(species.values.ravel()) encoder.handle_unknown = 'ignore' # 特征与标签配对拆分(仅做一次拆分) data_train, data_test, species_train_encoded, species_test_encoded = train_test_split( data, species_encoded, test_size=0.25, random_state=0 ) # 特征标准化 scaler = StandardScaler() data_train_normalized = scaler.fit_transform(data_train) data_test_normalized = scaler.transform(data_test)
2. 调整神经网络配置并添加训练日志
- 先尝试简化网络结构,比如用单隐藏层降低训练复杂度
- 添加
verbose=True参数,实时查看训练迭代过程,确认模型是否在收敛
# 创建并训练神经网络(简化结构+训练日志) mlp = MLPClassifier( hidden_layer_sizes=(10,), # 先尝试单隐藏层 max_iter=2000, # 适当增加迭代次数 random_state=0, verbose=True # 输出训练过程 ) mlp.fit(data_train_normalized, species_train_encoded) # 评估并输出结果 score = mlp.score(data_test_normalized, species_test_encoded) print("Accuracy:", score)
额外排查点
如果调整后仍无输出,检查以下内容:
- 确认
Wpc50.dat和Names.txt文件路径正确,且样本量匹配(特征行数与标签行数一致) - 查看终端是否有
MLPClassifier的训练迭代日志,如果长时间无日志输出,可能是样本量过大导致训练缓慢,可尝试先取小批量数据测试
内容的提问来源于stack exchange,提问作者vitoria
相关产品推荐
相关产品推荐

