ML.net重新訓練模型需要注意的事項。
阿新 • • 發佈:2020-12-26
ml.net是微軟機器學習的東西,如果你的需求是需要一個固定的模型來進行操作的話那就按著官網的教程來就可以,但是大部分的模型可能不滿足現有的需求,那麼我們需要對模型進行重新訓練。
重新訓練模型有限制條件,你重新訓練模型的資料分類必須是原有模型已有的分類,如果想增加分類的話只能重新訓練一個新的模型來進行操作。
模型重新訓練的話在第一次模型生成時候需要儲存另外一個模型檔案,如圖:
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226144316773-447431790.png)
modle的生成是通過定義的ogdEstimator演算法進行生成的,而ogdEstimator裡的演算法需要和上面你生成模型的管道的演算法一致。演算法所需要的引數labelColumnName和featureColumnName也需要一一對應。
第一次建模型階段準備工作已完成,需要儲存的兩個zip儘量儲存到專案中去。
後續訓練已有的模型開始的話是這樣的:
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226144653047-126442391.png)
首先載入你所儲存的兩個模型檔案,originalModelParameters所轉換的引數型別需要跟你模型的演算法引數型別匹配,不然會提示無法轉換成功。
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226144825358-474649859.png)
然後載入你匯入的新資料,轉為IDataview。
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226144926449-303115443.png)
這部分是主要是重新訓練模型的演算法,LbfgsMaximumEntropy裡面的引數要相對應,這個就不用說了,當然你的演算法要是其他的也差不太多。
Fit所傳入的兩個變數,第一個是你的新資料,第二個是你的老資料,新的訓練模型將以老資料為起點進行訓練。
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226145254698-129618010.png)
所生成的retrainedModel模型資料直接儲存到modelZip就可以。
接下來在進行使用這個模型的時候需要進行一些改變。
如果你不需要重新訓練模型的話,進行預測是這樣的:
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226145504415-1341900926.png)
直接拿第一次生成的模型進行預測。然後返回給你預測的結果。
但是當我們重新訓練過模型的時候需要對預測方法進行一些改變:
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226145622497-586146422.png)
需要載入初始的模型和訓練後的模型。
重新訓練模型的正常流程大概就是這樣的了。正常生成模型以及進行預測的方法官方的demo裡就可以找到。
注:儲存模型之後的Weights會獲取不到,提示非公開成員。然後我這邊需要進行這樣一個操作:
![](https://img2020.cnblogs.com/blog/1768441/202012/1768441-20201226145937948-1930731237.png)
先定義然後通過GetWeights獲取Weights的