多CSV文件训练MLP时UnpicklingError报错及多数据集训练方案问询
问题解答
1. 当前逐文件训练实现的错误说明
你当前逐文件训练的逻辑本身是可实现的,但代码里存在3处明确错误:
- 文件读取方式错误:CSV是文本格式文件,不能用
pickle.load()读取(pickle仅能解析Python专属序列化的.pkl格式文件),这是你触发UnpicklingError的直接原因 - 模型编译顺序错误:
model.compile()必须放在model.fit()之前执行,否则模型没有定义优化器、损失函数,训练完全不生效 - 缺少必要的预处理步骤:神经网络对输入特征的尺度高度敏感,你未对特征做标准化处理,会导致模型收敛慢、最终效果差
修正后的核心代码示例:
import pandas as pd from sklearn.preprocessing import StandardScaler # 初始化标准化器,提前用全量训练数据拟合保证分布一致 scaler = StandardScaler() all_X = [] for f in files: df = pd.read_csv(f) # 可根据你的CSV实际格式调整header、sep等参数 all_X.append(df.iloc[:,:-1].values) all_X = np.concatenate(all_X, axis=0) scaler.fit(all_X) # 修正后的生成器 def BatchGenerator(files, scaler): for file in files: current_data = pd.read_csv(file).values X_train = current_data[:,:-1] y_train = current_data[:,-1] X_train_scaled = scaler.transform(X_train) yield (X_train_scaled, y_train) # 先编译模型再训练 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) n_epochs = 100 for epoch in range(n_epochs): for (X_train, y_train) in BatchGenerator(files, scaler): # 新版Keras用epochs参数替代旧版nb_epoch model.fit(X_train, y_train, batch_size=32, epochs=1, verbose=1)
2. 多训练数据集下的更优实现方案
方案1:内存足够时直接拼接训练
如果两个文件总数据量可以完全载入内存,优先选择拼接后做随机拆分训练,收敛更稳定,不会出现模型在两个数据集分布上反复震荡的问题:
# 拼接全量数据 df1 = pd.read_csv(file1) df2 = pd.read_csv(file2) all_data = pd.concat([df1, df2], axis=0).values X = all_data[:,:-1] y = all_data[:,-1] # 拆分训练集、验证集 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y) # 标准化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_val_scaled = scaler.transform(X_val) # 加入早停防止过拟合 es = EarlyStopping(patience=10, restore_best_weights=True) model.fit(X_train_scaled, y_train, batch_size=32, epochs=100, validation_data=(X_val_scaled, y_val), callbacks=[es])
方案2:数据量过大时用Keras Sequence生成器
如果数据量太大无法全部载入内存,用Keras原生的Sequence类实现生成器,比你自定义的生成器稳定性更高,支持多进程加载、自动打乱数据顺序,避免数据顺序导致的模型偏差。
方案3:分布差异大时做加权训练
如果两个文件的数据分布差异较大,可在逐文件训练时加入学习率衰减策略,或每个文件训练完成后做加权参数平均,避免模型偏向某一个数据集的分布。
内容的提问来源于stack exchange,提问作者satyam sangeet
相关产品推荐
相关产品推荐

