我正在将神经网络库移植到 Go。我希望能够保存和恢复经过训练的网络,因此我尝试直接对其进行序列化。问题是,网络结构在其字段中包含循环(神经元 A 与神经元 B 有连接,而神经元 B 与神经元 A 有连接)。每当我尝试使用编码/gob 序列化整个网络时,它都会因堆栈溢出而失败。
这是一个以相同方式中断的非常简单的代码示例:
package main
import (
"bytes"
"encoding/gob"
"fmt"
"log"
)
type P struct {
Name string
Q *Q
}
type Q struct {
Name string
P *P
}
func main() {
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network) // Will write to network.
dec := gob.NewDecoder(&network) // Will read from network.
p := &P{ "P", nil }
q := &Q{ "Q", p }
p.Q = q
err := enc.Encode(p)
if err != nil {
log.Fatal("encode error:", err)
}
// Decode (receive) the value.
var p2 *P
err = dec.Decode(&p2)
if err != nil {
log.Fatal("decode error:", err)
}
fmt.Printf("%#v", p2)
}
http://play.golang.org/p/LrO0VlLnX4
除非重写库的整个结构以避免循环,否则有没有直接的方法来解决这个问题?
慕田峪4524236
相关分类