我已經制作了一個神經網路,現在我需要將訓練程序的結果保存到本地檔案中。總共有 7,155,264 個值。我試過這樣的回圈
string weightsString = "";
string biasesString = "";
for (int l = 1; l < layers.Length; l )
{
for (int j = 0; j < layers[l].Length; j )
{
for (int k = 0; k < layers[l - 1].Length; k )
{
weightsString = weights[l][j, k] "\n";
}
biasesString = biases[l][j] "\n";
}
}
File.WriteAllText(@"path", weightsString "\n" biasesString);
但從字面上看,要經歷所有的價值觀需要永遠。有沒有辦法直接寫內容而不必先將它們寫成字串?
(權重是 double[][,] 而偏差是 double[][])
uj5u.com熱心網友回復:
首先寫下 700 萬個資料集顯然需要很多時間。我建議您將權重和偏差分成兩個檔案并即時寫入,在完成之前無需將它們全部存盤在記憶體中。
using StreamWriter weigthStream = new("weigths.txt", append: true);
using StreamWriter biasStream = new("biases.txt", append: true);
for (int l = 1; l < layers.Length; l )
{
for (int j = 0; j < layers[l].Length; j )
{
for (int k = 0; k < layers[l - 1].Length; k )
{
await weightStream.WriteLineAsync(weights[l][j, k]);
}
await biasStream.WriteLineAsync(biases[l][j]);
}
}
uj5u.com熱心網友回復:
但從字面上看,要經歷所有的價值觀需要永遠。有沒有辦法直接寫內容而不必先將它們寫成字串?
一種選擇是將其保存為二進制資料。這使得人類閱讀變得更加困難,但對于大量資料,這確實是更可取的,因為它將在閱讀和寫作時節省大量時間。例如使用BinaryWriter和使用不安全的代碼。
myBinaryWriter.Write(myArray.GetLength(0));
myBinaryWriter.Write(myArray.GetLength(1));
fixed (double* ptr = myArray)
{
var span = new ReadOnlySpan<byte>(ptr, myArray.GetLength(0) *myArray.GetLength(1) * 8);
myBinaryWriter.Write(span);
}
您還可以考慮使用像protbuf.net這樣的二進制序列化庫,它可以只獲取一個物件并將其序列化為流。請注意,某些庫可能需要將屬性添加到類和屬性中。一些庫也可能存在多維和/或鋸齒狀陣列的問題。正因為如此,定義自己的二維陣列并使用一維陣列作為后備存盤有時會很有用,這可以使序列化或將資料傳遞給其他組件等事情變得更加簡單。
另一種比較常見的做法是使用 json 或 xml 之類的東西將元資料(如高度、寬度等)存盤在一個簡單的人類可讀的文本檔案中。同時將實際資料保存在單獨的原始二進制檔案中。
uj5u.com熱心網友回復:
壞變種 - 你可以使用 json 序列化
馬馬虎虎的變種 - 立即寫入檔案。使用 File.AppendText
恕我直言,最好的變種 - 使用資料庫
恕我直言,好的變體 - 使用 BinaryFormatter (您將無法自己閱讀,但應用程式會)
作業變體 - 使用 StringBuilder
uj5u.com熱心網友回復:
StringBuilder weightsSB = new StringBuilder();
StringBuilder biasesSB = new StringBuilder();
for (int l = 1; l < layers.Length; l )
{
for (int j = 0; j < layers[l].Length; j )
{
for (int k = 0; k < layers[l - 1].Length; k )
{
weightsSB.Append(weights[l][j, k] "\n");
}
biasesSB.Append(biases[l][j] "\n");
}
}
正如評論中所建議的,我改用了 StringBuilder 。奇跡般有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470736.html
