我需要救了我的神經網絡的幫助。保存訓練的神經網絡
我會解釋...我編程的C#中的多層網絡 ..應用程序的一部分用於培訓,另一部分用於測試神經網絡。一切都按照應有的原則運作。當我想訓練我的網絡時,我從一個文件加載一組數據。 當訓練結束時,我測試一個較小的數據樣本,它給了我正確的輸出。但現在我想能培養我的網絡和保存它,這樣我可以再次加載它,使用它進行進一步的測試。
我需要救了我的神經網絡的幫助。保存訓練的神經網絡
我會解釋...我編程的C#中的多層網絡 ..應用程序的一部分用於培訓,另一部分用於測試神經網絡。一切都按照應有的原則運作。當我想訓練我的網絡時,我從一個文件加載一組數據。 當訓練結束時,我測試一個較小的數據樣本,它給了我正確的輸出。但現在我想能培養我的網絡和保存它,這樣我可以再次加載它,使用它進行進一步的測試。
我會假設你有你的機器學習班被稱爲Bayes
(或其他)。通常,您將標誌着這是[Serializable]
using System.IO;
[Serializable]
public class NaiveBayes
{
...
}
在這個類然後你可以做你的儲蓄
public void Save(Stream stream)
{
YourBinaryFormatter b = new YourBinaryFormatter();
b.Serialize(stream, this);
}
YourBinarySerializer
這裏的方法就是你選擇的一些串行器,你可以使用其他串行如你希望。讀取這些文件是相反的,同樣簡單。
是的,你所提到可以使用序列化。但是在機器人領域,通常需要獨立於語言(即易於解析)的知識存儲,這就是爲什麼我要添加這個答案。
那麼,你如何保存任何數據類型的當前狀態?
1)寫類型,它的狀態和可能的描述符 2)讀取它。
對於整數int a = 3
,您可以編寫一個文件,內容如下:
integer
a
3
神經網絡是一個抽象數據類型,就像一個整數。 它由拓撲和訓練後的最終權重定義。 比方說,你有一個MLP在= 3,躲在= 6,出= 2,那麼您可以編寫一個文件,內容如下:
3-6-2 // topology
test1 // name of neural network, could also be in filename (or timestamp)
weight matrix [in->hid]
weight matrix [hid->out]
,而你當然會寫的實際重量,而不是「權重矩陣「。 您可以在程序的初始化部分獲取拓撲結構,或者與訓練階段結束時的權重一起獲取。
如果您想重建您的網絡,只需解析寫入的文件,並像以前一樣使用您讀過的所有內容初始化網絡,但現在可以跳過訓練。 您應該可以在機器人上編寫文件。如果您無法這樣做,請通過無線網絡將信息發送到您的本地計算機並寫入其中。
您可以在C#中檢查我的多層網絡的實現方式。here。
您需要序列化網絡結構,權重和偏差。 安庫有一個幫手方法爲:
第1步。定義層配置:
var layerConfig = new LayerConfiguration()
.AddInputLayer(2)
.AddHiddenLayer(5)
.AddHiddenLayer(5)
.AddOutputLayer(1);
步驟2.火車型號:
model.TrainModel(new List<double> { 0.25, 0.50 }, new List<double> { 1 });
model.TrainModel(new List<double> { 0.75, 0.15 }, new List<double> { 0 });
model.TrainModel(new List<double> { 0.60, 0.40 }, new List<double> { 1 });
...
第3步:保存的培訓模式,以JSON文件:
model.SaveModelToJson("model.json");
可以實例新的網絡對象,並用以前訓練有素的型號:
var model2 = new Network("model.json");
List<double> output = model2.UseModel(new List<double> { 0.35, 0.45 });
應該這樣真的被標記爲網絡? – DuncanACoulter
你使用什麼神經網絡框架?這不是一個標準的C#/ BCL特性:)如果你自己編寫它,你必須對網絡進行序列化和反序列化。 – Luaan
似乎有點奇怪,你知道如何用C#編寫多層神經網絡,但對如何保存它的狀態沒有任何線索...... –