Python 使用scikit.MLPREGESSOR对多个数据集进行培训

Python 使用scikit.MLPREGESSOR对多个数据集进行培训,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我目前正在一个更大的数据集上训练我的第一个神经网络。我已经将我的训练数据分割成几个.npy二进制文件,每个文件包含20k个训练样本。我正在加载npy文件中的数据,应用一些简单的预处理操作,然后开始通过在循环中多次应用partial\u fit方法来训练我的网络: for i in range(50): nnmodel.partial_fit(X_tr,Y_tr) 我已经读到,常规的.fit()方法不能进行多批次的训练,但相反,部分fit应该可以做到。。我的第一次训练跑总是很顺利。损失正

我目前正在一个更大的数据集上训练我的第一个神经网络。我已经将我的训练数据分割成几个.npy二进制文件,每个文件包含20k个训练样本。我正在加载npy文件中的数据,应用一些简单的预处理操作,然后开始通过在循环中多次应用
partial\u fit
方法来训练我的网络:

for i in range(50):
    nnmodel.partial_fit(X_tr,Y_tr)
我已经读到,常规的
.fit()
方法不能进行多批次的训练,但相反,部分fit应该可以做到。。我的第一次训练跑总是很顺利。损失正在减少,我得到了很好的拟合结果,所以我使用
joblib.dump
方法保存了我的模型。 对于下一个调用,我将再次使用完全相同的脚本,该脚本从.npy文件加载我的数据(无论我是输入同一批还是另一批),对其进行预处理,这次使用
joblib.load
,加载我预先训练过的模型,然后再次开始执行
partial\u fit
循环。 在第二次运行中,我总是在所有迭代中得到一个恒定的损失,无论我使用什么数据集,错误不再减少:

Iteration 51, loss = 3.93268978
Iteration 52, loss = 3.93268978
Iteration 53, loss = 3.93268978
Iteration 54, loss = 3.93268978 ...
我做错了什么?
已经谢谢你了

有几种可能性

  • 模型可能已经收敛了
  • 批处理过程中可能没有足够的传递(在下面的示例中,模型直到约500次迭代才会收敛)
  • (需要更多信息)
    joblib.dump
    joblib.load
    可能以意外方式保存或加载
  • 如果初始化/预处理/训练/可视化都发生在一个脚本中,那么调试可能会更容易,而不是多次调用脚本并在迭代之间转储结果。下面是一个简单的例子:

    导入matplotlib.pyplot作为plt
    从sklearn.neural_网络导入MLPREGESSOR
    从sklearn.dataset导入make_回归
    从sklearn.model\u选择导入列车\u测试\u拆分
    十、 y=进行回归(n_样本=10000,随机状态=42)
    X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y)
    regr=MLPREGESSOR()
    损失=[]
    测试性能=[]
    对于范围内的uu(100):
    #对批次进行100次传递
    对于范围(5007501500)内的批次:
    #对500个示例的批次执行部分拟合
    #模拟批处理,也可以从“.npy”加载这些批处理`
    X_列\u批次=X_列[批次-500:批次]
    y_列批次=y_列【批次-500:批次】
    再生部分配合(X系列批次、y系列批次)
    损失追加(再损失)
    测试\性能附加(再评分(X \ U测试,y \ U测试))
    #绘图结果:
    图(ax1,ax2)=plt.子批次(1,2)
    ax1.title.set_文本(“培训损失”)
    ax2.title.set_文本(“测试集上的分数”)
    ax1.绘图(范围(长度(损失)),损失)
    ax2.绘图(范围(透镜(测试性能)),测试性能)
    plt.show()
    
    输出:


    非常感谢,这确实是第三次。你提到的那一点。。。不知怎的,joblib似乎在那里遇到了问题。。