I am doing some machine learning in Golang. I am now hitting a wall, my trained classifier takes almost half a minute to train and want to save that instance of the classifier so that I do not have to train in from scratch every time. How should someone go about doing this is Golang? FYI my classifier is a struct
When I do this type of stuff with python, it's very easy with pickle. Is there an equivalent?
Try gob or encoding/json to marshal your objects. After that, you can store the string to a file.
Here is an example to use json:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Book struct {
Title string
Pages []*Page
}
type Page struct {
pageNumber int // remember to Capitalize the fields you want to marshal
Content string
}
func main() {
// First make a book with nested array of struct pointers
myBook := &Book{Title: "this is a title", Pages: make([]*Page, 0)}
for i := 0; i < 3; i++ {
myBook.Pages = append(myBook.Pages, &Page{i + 1, "words"})
}
// Open a file and dump JSON to it!
f1, err := os.Create("/tmp/file1")
enc := json.NewEncoder(f1)
err = enc.Encode(myBook)
if err != nil {
panic(err)
}
f1.Close()
// Open the file and load the object back!
f2, err := os.Open("/tmp/file1")
dec := json.NewDecoder(f2)
var v Book
err = dec.Decode(&v)
if err != nil {
panic(err)
}
f2.Close()
// Check
fmt.Println(v.Title) // Output: <this is a title>
fmt.Println(v.Pages[1].Content) // Output: <words>
// pageNumber is not capitalized so it was not marshaled
fmt.Println(v.Pages[1].pageNumber) // Output: <0>
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With