From 1ca66614bc17265d1a55203fa9791006e470e9c1 Mon Sep 17 00:00:00 2001 From: fodil-a Date: Sat, 21 Sep 2019 20:16:39 +0200 Subject: [PATCH] Enhance the Go-Report card #130 --- .gitignore | 2 + attributes_test.go | 20 ++++----- backend/simple/graph.go | 24 +++++++++- backend/testbackend/onnx/doc.go | 1 - .../testbackend/testreport/coverage_test.go | 6 +-- backend/x/gorgonnx/apigen_operators.go | 24 ---------- backend/x/gorgonnx/broadcast.go | 2 +- backend/x/gorgonnx/fizzbuzz_model_test.go | 1 + backend/x/gorgonnx/leakyrelu.go | 2 +- backend/x/gorgonnx/multi_run_test.go | 4 +- backend/x/gorgonnx/softmax.go | 45 +++++++++---------- decoder.go | 19 +++++--- decoder_test.go | 34 +++++++------- doc/introduction/dir.go | 28 +++++++----- doc/introduction/variables.go | 4 +- dummy_backend_test.go | 4 +- example_gorgonnx_test.go | 3 ++ inputless_operator_test.go | 12 ++--- internal/examples/mnist/test1_input0.go | 2 +- internal/examples/mnist/test1_output0.go | 2 +- internal/x/images/decode.go | 4 +- sigmoid_test.go | 18 ++++---- 22 files changed, 134 insertions(+), 127 deletions(-) diff --git a/.gitignore b/.gitignore index d8f9a0c8..eb5d96c7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ doc/introduction/introduction .DS_Store *.wasm *.onnx +/onnx-go.iml +/.idea/ diff --git a/attributes_test.go b/attributes_test.go index 6f112a3f..0a6b5c6c 100644 --- a/attributes_test.go +++ b/attributes_test.go @@ -21,32 +21,32 @@ func TestToOperationAttributes(t *testing.T) { AttributeProto_GRAPHS AttributeProto_AttributeType = 10 */ attrs, err := toOperationAttributes([]*pb.AttributeProto{ - &pb.AttributeProto{ + { Name: "floats", Type: pb.AttributeProto_FLOATS, Floats: []float32{1, 2}, }, - &pb.AttributeProto{ + { Name: "float", Type: pb.AttributeProto_FLOAT, F: 1, }, - &pb.AttributeProto{ + { Name: "int", Type: pb.AttributeProto_INT, I: 1, }, - &pb.AttributeProto{ + { Name: "ints", Type: pb.AttributeProto_INTS, Ints: []int64{1, 2}, }, - &pb.AttributeProto{ + { Name: "string", Type: pb.AttributeProto_STRING, S: []byte("a"), }, - &pb.AttributeProto{ + { Name: "strings", Type: pb.AttributeProto_STRINGS, Strings: [][]byte{[]byte("a"), []byte("b")}, @@ -122,7 +122,7 @@ func TestToOperationAttributes(t *testing.T) { func TestToOperationAttributes_NotImplemented(t *testing.T) { _, err := toOperationAttributes([]*pb.AttributeProto{ - &pb.AttributeProto{ + { Type: pb.AttributeProto_GRAPH, }, }) @@ -131,7 +131,7 @@ func TestToOperationAttributes_NotImplemented(t *testing.T) { t.Fail() } _, err = toOperationAttributes([]*pb.AttributeProto{ - &pb.AttributeProto{ + { Type: pb.AttributeProto_TENSORS, }, }) @@ -140,7 +140,7 @@ func TestToOperationAttributes_NotImplemented(t *testing.T) { t.Fail() } _, err = toOperationAttributes([]*pb.AttributeProto{ - &pb.AttributeProto{ + { Type: pb.AttributeProto_GRAPHS, }, }) @@ -149,7 +149,7 @@ func TestToOperationAttributes_NotImplemented(t *testing.T) { t.Fail() } _, err = toOperationAttributes([]*pb.AttributeProto{ - &pb.AttributeProto{ + { Type: pb.AttributeProto_AttributeType(-1), }, }) diff --git a/backend/simple/graph.go b/backend/simple/graph.go index cef51181..0e96fee6 100644 --- a/backend/simple/graph.go +++ b/backend/simple/graph.go @@ -43,11 +43,11 @@ func (n *Node) Attributes() []encoding.Attribute { } value = fmt.Sprintf(`"%v"`, value) return []encoding.Attribute{ - encoding.Attribute{ + { Key: "shape", Value: "Mrecord", }, - encoding.Attribute{ + { Key: "label", Value: value, }, @@ -120,18 +120,28 @@ func NewSimpleGraph() *Graph { } } +// SetWeightedEdge adds a weighted edge from one node to another. If the nodes do not exist, they are added +// and are set to the nodes of the edge otherwise. +// It will panic if the IDs of the e.From and e.To are equal. func (g *Graph) SetWeightedEdge(e graph.WeightedEdge) { g.g.SetWeightedEdge(e) } + +// NewWeightedEdge returns a new weighted edge from the source to the destination node. func (g *Graph) NewWeightedEdge(from, to graph.Node, w float64) graph.WeightedEdge { return g.g.NewWeightedEdge(from, to, w) } + +// AddNode adds n to the graph. It panics if the added node ID matches an existing node ID. func (g *Graph) AddNode(n graph.Node) { g.g.AddNode(n) } + +// NewNode returns a new unique Node to be added to g. The Node's ID does +// not become valid in g until the Node is added to g. func (g *Graph) NewNode() graph.Node { n := g.g.NewNode() return &Node{ @@ -139,30 +149,40 @@ func (g *Graph) NewNode() graph.Node { } } +// Node returns the node with the given ID if it exists in the graph, +// and nil otherwise. func (g *Graph) Node(id int64) graph.Node { return g.g.Node(id) } +// Nodes returns all the nodes in the graph. func (g *Graph) Nodes() graph.Nodes { return g.g.Nodes() } +// From returns all nodes in g that can be reached directly from n. func (g *Graph) From(id int64) graph.Nodes { return g.g.From(id) } +// HasEdgeBetween returns whether an edge exists between nodes x and y without +// considering direction. func (g *Graph) HasEdgeBetween(xid, yid int64) bool { return g.g.HasEdgeBetween(xid, yid) } +// Edge returns the edge from u to v if such an edge exists and nil otherwise. +// The node v must be directly reachable from u as defined by the From method. func (g *Graph) Edge(uid, vid int64) graph.Edge { return g.g.Edge(uid, vid) } +// HasEdgeFromTo returns whether an edge exists in the graph from u to v. func (g *Graph) HasEdgeFromTo(uid, vid int64) bool { return g.g.HasEdgeFromTo(uid, vid) } +// To returns all nodes in g that can reach directly to n. func (g *Graph) To(id int64) graph.Nodes { return g.g.To(id) } diff --git a/backend/testbackend/onnx/doc.go b/backend/testbackend/onnx/doc.go index ae9b1c8f..bd8cea52 100644 --- a/backend/testbackend/onnx/doc.go +++ b/backend/testbackend/onnx/doc.go @@ -1,3 +1,2 @@ // Package onnxtest contains an export of the onnx test files - package onnxtest diff --git a/backend/testbackend/testreport/coverage_test.go b/backend/testbackend/testreport/coverage_test.go index 874f06bc..cfa5838b 100644 --- a/backend/testbackend/testreport/coverage_test.go +++ b/backend/testbackend/testreport/coverage_test.go @@ -8,15 +8,15 @@ import ( func TestCoverage(t *testing.T) { tests := []*testbackend.TestCase{ - &testbackend.TestCase{ + { Skipped: false, Tested: true, }, - &testbackend.TestCase{ + { Skipped: true, Tested: true, }, - &testbackend.TestCase{ + { Skipped: true, Tested: true, }, diff --git a/backend/x/gorgonnx/apigen_operators.go b/backend/x/gorgonnx/apigen_operators.go index b697bda7..24d6f205 100644 --- a/backend/x/gorgonnx/apigen_operators.go +++ b/backend/x/gorgonnx/apigen_operators.go @@ -43,7 +43,6 @@ func (a *hadamardProd) init(o onnx.Operation) error { return nil } - type hadamardDiv struct{} func init() { @@ -81,7 +80,6 @@ func (a *hadamardDiv) init(o onnx.Operation) error { return nil } - type sub struct{} func init() { @@ -119,7 +117,6 @@ func (a *sub) init(o onnx.Operation) error { return nil } - type add struct{} func init() { @@ -157,7 +154,6 @@ func (a *add) init(o onnx.Operation) error { return nil } - type abs struct{} func init() { @@ -189,7 +185,6 @@ func (a *abs) init(o onnx.Operation) error { return nil } - type sign struct{} func init() { @@ -221,7 +216,6 @@ func (a *sign) init(o onnx.Operation) error { return nil } - type ceil struct{} func init() { @@ -253,7 +247,6 @@ func (a *ceil) init(o onnx.Operation) error { return nil } - type floor struct{} func init() { @@ -285,7 +278,6 @@ func (a *floor) init(o onnx.Operation) error { return nil } - type sin struct{} func init() { @@ -317,7 +309,6 @@ func (a *sin) init(o onnx.Operation) error { return nil } - type cos struct{} func init() { @@ -349,7 +340,6 @@ func (a *cos) init(o onnx.Operation) error { return nil } - type exp struct{} func init() { @@ -381,7 +371,6 @@ func (a *exp) init(o onnx.Operation) error { return nil } - type logarithm struct{} func init() { @@ -413,7 +402,6 @@ func (a *logarithm) init(o onnx.Operation) error { return nil } - type log2 struct{} func init() { @@ -445,7 +433,6 @@ func (a *log2) init(o onnx.Operation) error { return nil } - type relu struct{} func init() { @@ -477,7 +464,6 @@ func (a *relu) init(o onnx.Operation) error { return nil } - type neg struct{} func init() { @@ -509,7 +495,6 @@ func (a *neg) init(o onnx.Operation) error { return nil } - type square struct{} func init() { @@ -541,7 +526,6 @@ func (a *square) init(o onnx.Operation) error { return nil } - type sqrt struct{} func init() { @@ -573,7 +557,6 @@ func (a *sqrt) init(o onnx.Operation) error { return nil } - type inverse struct{} func init() { @@ -605,7 +588,6 @@ func (a *inverse) init(o onnx.Operation) error { return nil } - type cube struct{} func init() { @@ -637,7 +619,6 @@ func (a *cube) init(o onnx.Operation) error { return nil } - type tanh struct{} func init() { @@ -669,7 +650,6 @@ func (a *tanh) init(o onnx.Operation) error { return nil } - type sigmoid struct{} func init() { @@ -701,7 +681,6 @@ func (a *sigmoid) init(o onnx.Operation) error { return nil } - type log1p struct{} func init() { @@ -733,7 +712,6 @@ func (a *log1p) init(o onnx.Operation) error { return nil } - type expm1 struct{} func init() { @@ -765,7 +743,6 @@ func (a *expm1) init(o onnx.Operation) error { return nil } - type softplus struct{} func init() { @@ -796,4 +773,3 @@ func (a *softplus) apply(g *Graph, n ...*Node) error { func (a *softplus) init(o onnx.Operation) error { return nil } - diff --git a/backend/x/gorgonnx/broadcast.go b/backend/x/gorgonnx/broadcast.go index d03130a7..1fedbcab 100644 --- a/backend/x/gorgonnx/broadcast.go +++ b/backend/x/gorgonnx/broadcast.go @@ -15,7 +15,7 @@ func ggnBroadcast(a, b *gorgonia.Node) (*gorgonia.Node, *gorgonia.Node, error) { if sameDim(a, b) { return a, b, nil } - // for NCHW tensors, the first dimension may be omited and must be broadcasted + // for NCHW tensors, the first dimension may be omitted and must be broadcasted // TODO find a smarter way to achieve this switch { case len(a.Shape()) == 0: diff --git a/backend/x/gorgonnx/fizzbuzz_model_test.go b/backend/x/gorgonnx/fizzbuzz_model_test.go index 3e383e2d..5cec2cc9 100644 --- a/backend/x/gorgonnx/fizzbuzz_model_test.go +++ b/backend/x/gorgonnx/fizzbuzz_model_test.go @@ -1,4 +1,5 @@ package gorgonnx + /* fizzBuzzOnnx is generated from: diff --git a/backend/x/gorgonnx/leakyrelu.go b/backend/x/gorgonnx/leakyrelu.go index 02e5d0c3..05b51bd9 100644 --- a/backend/x/gorgonnx/leakyrelu.go +++ b/backend/x/gorgonnx/leakyrelu.go @@ -52,7 +52,7 @@ func (l *leakyRELU) Do(inputs ...gorgonia.Value) (gorgonia.Value, error) { vals[i] *= float64(l.alpha) } } else { - return nil, errors.New("expeced a []float64, but cannot cast") + return nil, errors.New("expected a []float64, but cannot cast") } case tensor.Float32: if vals, ok := t.Data().([]float32); ok { diff --git a/backend/x/gorgonnx/multi_run_test.go b/backend/x/gorgonnx/multi_run_test.go index 514b0604..ab27082b 100644 --- a/backend/x/gorgonnx/multi_run_test.go +++ b/backend/x/gorgonnx/multi_run_test.go @@ -39,7 +39,7 @@ func TestRun_multiple(t *testing.T) { model.SetInput(0, inputA1) model.SetInput(1, inputB1) err = backend.Run() - if err != nil { + if err != nil { t.Fatal(err) } output, err := model.GetOutputTensors() @@ -52,7 +52,7 @@ func TestRun_multiple(t *testing.T) { model.SetInput(0, inputA0) model.SetInput(1, inputB1) err = backend.Run() - if err != nil { + if err != nil { t.Fatal(err) } output, err = model.GetOutputTensors() diff --git a/backend/x/gorgonnx/softmax.go b/backend/x/gorgonnx/softmax.go index e532fea5..1b0d6d85 100644 --- a/backend/x/gorgonnx/softmax.go +++ b/backend/x/gorgonnx/softmax.go @@ -94,34 +94,31 @@ func coerceInto2D(n *gorgonia.Node, k int) (*gorgonia.Node, error) { return gorgonia.Reshape(n, []int{row, col}) } -// stabilize a node consits of substracting the max value from every row +// stabilize a node consits of subtracting the max value from every row // this function returns an error is the input is not a tensor or a matrix func stabilizeNode(n *gorgonia.Node) (*gorgonia.Node, error) { - switch { - case len(n.Shape()) == 2 && n.Shape()[0] != 1: - m1, err := gorgonia.Max(n, 1) - if err != nil { - return nil, err - } - - a1, b1, err := gorgonia.Broadcast(n, m1, gorgonia.NewBroadcastPattern(nil, []byte{1})) - if err != nil { - return nil, err - } - return gorgonia.Sub(a1, b1) - case len(n.Shape()) == 2 && n.Shape()[0] == 1: - m1, err := gorgonia.Max(n) - if err != nil { - return nil, err - } - a1, b1, err := gorgonia.Broadcast(n, m1, gorgonia.NewBroadcastPattern(nil, []byte{1})) - if err != nil { - return nil, err - } - return gorgonia.Sub(a1, b1) - default: + if len(n.Shape()) != 2 { return nil, errors.New("can only stabilize a vector or a matrix") } + + var m1 *gorgonia.Node + var err error + + if n.Shape()[0] == 1 { + m1, err = gorgonia.Max(n) + } else { + m1, err = gorgonia.Max(n, 1) + } + + if err != nil { + return nil, err + } + + a1, b1, err := gorgonia.Broadcast(n, m1, gorgonia.NewBroadcastPattern(nil, []byte{1})) + if err != nil { + return nil, err + } + return gorgonia.Sub(a1, b1) } func (s *stableSoftmax) init(o onnx.Operation) error { diff --git a/decoder.go b/decoder.go index 107318fb..48b93ba9 100644 --- a/decoder.go +++ b/decoder.go @@ -141,13 +141,7 @@ func (m *Model) decodeProto(model *pb.ModelProto) error { } n, ok := m.dbByName[name] if !ok { - dst := m.backend - n = dst.NewNode() - if _, ok := n.(Namer); ok { - n.(Namer).SetName(name) - } - dst.AddNode(n) - m.dbByName[name] = n + n = insertNode(m, n, name) } // Remove it from the input // find the ID @@ -225,3 +219,14 @@ func (m *Model) decodeProto(model *pb.ModelProto) error { } return nil } + +func insertNode(m *Model, n graph.Node, name string) graph.Node { + dst := m.backend + n = dst.NewNode() + if n, ok := n.(Namer); ok { + n.SetName(name) + } + dst.AddNode(n) + m.dbByName[name] = n + return n +} diff --git a/decoder_test.go b/decoder_test.go index 0df9050a..9f057291 100644 --- a/decoder_test.go +++ b/decoder_test.go @@ -19,19 +19,19 @@ type testGraph struct { } var tests = []testGraph{ - testGraph{ + { name: "nil_graph", onnxModelProto: nil, expected: &testExpectedGraph{}, err: errModelIsNil, }, - testGraph{ + { name: "empty model", onnxModelProto: &pb.ModelProto{}, expected: &testExpectedGraph{}, err: errGraphIsNil, }, - testGraph{ + { name: "empty_graph", onnxModelProto: &pb.ModelProto{ Graph: &pb.GraphProto{}, @@ -39,13 +39,13 @@ var tests = []testGraph{ expected: &testExpectedGraph{}, err: errEmptyGraph, }, - testGraph{ + { // A name: "graph with no input", onnxModelProto: &pb.ModelProto{ Graph: &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Name: "A", }, }, @@ -54,13 +54,13 @@ var tests = []testGraph{ expected: &testExpectedGraph{}, err: errGraphNoIO, }, - testGraph{ + { // A name: "graph with empty input", onnxModelProto: &pb.ModelProto{ Graph: &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Name: "A", }, }, @@ -70,7 +70,7 @@ var tests = []testGraph{ expected: &testExpectedGraph{}, err: errGraphNoIO, }, - testGraph{ + { name: "initializer with no input", // A is the Output // B is the Input @@ -78,19 +78,19 @@ var tests = []testGraph{ onnxModelProto: &pb.ModelProto{ Graph: &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Name: "output", Input: []string{"B"}, Output: []string{"A"}, }, }, Output: []*pb.ValueInfoProto{ - &pb.ValueInfoProto{ + { Name: "A", }, }, Initializer: []*pb.TensorProto{ - &pb.TensorProto{ + { Name: "B", DataType: pb.TensorProto_DataType_value["FLOAT"], FloatData: []float32{0}, @@ -99,7 +99,7 @@ var tests = []testGraph{ }, }, expected: newExpectedGraph([]edge{ - edge{ + { from: &nodeTest{ id: 0, name: "A", @@ -114,7 +114,7 @@ var tests = []testGraph{ }), err: nil, }, - testGraph{ + { name: "simple graph", // A is the Output // B is the Input @@ -122,26 +122,26 @@ var tests = []testGraph{ onnxModelProto: &pb.ModelProto{ Graph: &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Name: "output", Input: []string{"B"}, Output: []string{"A"}, }, }, Output: []*pb.ValueInfoProto{ - &pb.ValueInfoProto{ + { Name: "A", }, }, Input: []*pb.ValueInfoProto{ - &pb.ValueInfoProto{ + { Name: "B", }, }, }, }, expected: newExpectedGraph([]edge{ - edge{ + { from: &nodeTest{ id: 0, name: "A", diff --git a/doc/introduction/dir.go b/doc/introduction/dir.go index 17736ec1..0ebf5f7a 100644 --- a/doc/introduction/dir.go +++ b/doc/introduction/dir.go @@ -155,18 +155,7 @@ func dirList(w io.Writer, name string) (isDir bool, err error) { continue } if isDoc(e.Name) { - fn := filepath.ToSlash(filepath.Join(name, fi.Name())) - if p, err := parse(fn, present.TitlesOnly); err != nil { - log.Printf("parse(%q, present.TitlesOnly): %v", fn, err) - } else { - e.Title = p.Title - } - switch filepath.Ext(e.Path) { - case ".article": - d.Articles = append(d.Articles, e) - case ".slide": - d.Slides = append(d.Slides, e) - } + parseDoc(name, fi, e, d) } else if showFile(e.Name) { d.Other = append(d.Other, e) } @@ -181,6 +170,21 @@ func dirList(w io.Writer, name string) (isDir bool, err error) { return true, dirListTemplate.Execute(w, d) } +func parseDoc(name string, fi os.FileInfo, e dirEntry, d *dirListData) { + fn := filepath.ToSlash(filepath.Join(name, fi.Name())) + if p, err := parse(fn, present.TitlesOnly); err != nil { + log.Printf("parse(%q, present.TitlesOnly): %v", fn, err) + } else { + e.Title = p.Title + } + switch filepath.Ext(e.Path) { + case ".article": + d.Articles = append(d.Articles, e) + case ".slide": + d.Slides = append(d.Slides, e) + } +} + // showFile reports whether the given file should be displayed in the list. func showFile(n string) bool { switch filepath.Ext(n) { diff --git a/doc/introduction/variables.go b/doc/introduction/variables.go index ac6e5e5e..6b7d904b 100644 --- a/doc/introduction/variables.go +++ b/doc/introduction/variables.go @@ -31,12 +31,12 @@ var ( "contempt", } models = map[string]modelDemo{ - "mnist": modelDemo{ + "mnist": { height: 28, width: 28, table: mnistTable, }, - "emotion": modelDemo{ + "emotion": { height: 64, width: 64, table: emotionTable, diff --git a/dummy_backend_test.go b/dummy_backend_test.go index 08482139..ab5713ae 100644 --- a/dummy_backend_test.go +++ b/dummy_backend_test.go @@ -50,11 +50,11 @@ func (n *nodeTest) Attributes() []encoding.Attribute { } value = fmt.Sprintf(`"%v"`, value) return []encoding.Attribute{ - encoding.Attribute{ + { Key: "shape", Value: "Mrecord", }, - encoding.Attribute{ + { Key: "label", Value: value, }, diff --git a/example_gorgonnx_test.go b/example_gorgonnx_test.go index 9fcff173..dca0c3bc 100644 --- a/example_gorgonnx_test.go +++ b/example_gorgonnx_test.go @@ -28,6 +28,9 @@ func Example_gorgonia() { // Set the first input, the number depends of the model model.SetInput(0, input) err = backend.Run() + if err != nil { + log.Fatal(err) + } // Check error output, _ := model.GetOutputTensors() // write the first output to stdout diff --git a/inputless_operator_test.go b/inputless_operator_test.go index 5363c26d..e527b7b2 100644 --- a/inputless_operator_test.go +++ b/inputless_operator_test.go @@ -10,7 +10,7 @@ func TestDecodeProto_inputless(t *testing.T) { proto := &pb.ModelProto{ IrVersion: 3, OpsetImport: []*pb.OperatorSetIdProto{ - &pb.OperatorSetIdProto{ + { Domain: "", Version: 9, }, @@ -22,7 +22,7 @@ func TestDecodeProto_inputless(t *testing.T) { DocString: "", Graph: &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Input: nil, Output: []string{ "values", @@ -31,7 +31,7 @@ func TestDecodeProto_inputless(t *testing.T) { OpType: "Constant", Domain: "", Attribute: []*pb.AttributeProto{ - &pb.AttributeProto{ + { Name: "value", RefAttrName: "", DocString: "", @@ -98,7 +98,7 @@ func TestDecodeProto_inputless(t *testing.T) { DocString: "", Input: nil, Output: []*pb.ValueInfoProto{ - &pb.ValueInfoProto{ + { Name: "values", Type: &pb.TypeProto{ Value: &pb.TypeProto_TensorType{ @@ -106,13 +106,13 @@ func TestDecodeProto_inputless(t *testing.T) { ElemType: 1, Shape: &pb.TensorShapeProto{ Dim: []*pb.TensorShapeProto_Dimension{ - &pb.TensorShapeProto_Dimension{ + { Value: &pb.TensorShapeProto_Dimension_DimValue{ DimValue: 5, }, Denotation: "", }, - &pb.TensorShapeProto_Dimension{ + { Value: &pb.TensorShapeProto_Dimension_DimValue{ DimValue: 5, }, diff --git a/internal/examples/mnist/test1_input0.go b/internal/examples/mnist/test1_input0.go index 075af8db..19f8b9b6 100644 --- a/internal/examples/mnist/test1_input0.go +++ b/internal/examples/mnist/test1_input0.go @@ -1,5 +1,5 @@ package mnist -func GetTest1Input0() []byte { +func getTest1Input0() []byte { return []byte("\x08\x01\x08\x01\x08\x1c\x08\x1c\x10\x01J\xc0\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00@A\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\xa0@\x00\x00\xa0@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\xc0@\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x10A\x00\x00 A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x80?\x00\x00\xe0@\x00\x00\xe0@\x00\x00\xa0@\x00\x00\x80@\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00@@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90A\x00\x00`A\x00\x00\xe0A\x00\x00\xa2B\x00\x00\xc0B\x00\x00\xa2B\x00\x00\xb0B\x00\x00\xb6B\x00\x00\xa6B\x00\x00\xa2B\x00\x00\xa2B\x00\x00tB\x00\x00\xc8A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@A\x00\x00\xa4B\x00\x00\xfaB\x00\x00,C\x00\x00vC\x00\x00\x7fC\x00\x00qC\x00\x00\x7fC\x00\x00vC\x00\x00tC\x00\x00\x7fC\x00\x00\x7fC\x00\x00\\C\x00\x00\x04C\x00\x00HB\x00\x00 A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8B\x00\x00!C\x00\x00lC\x00\x00{C\x00\x00\x7fC\x00\x00zC\x00\x00\x7fC\x00\x00yC\x00\x00vC\x00\x00\x7fC\x00\x00mC\x00\x00zC\x00\x00wC\x00\x00\x7fC\x00\x00kC\x00\x00TC\x00\x00\\B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000A\x00\x00\xc0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\xa0@\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x98A\x00\x00\xf2B\x00\x00\x7fC\x00\x00tC\x00\x00zC\x00\x00zC\x00\x00iC\x00\x00rC\x00\x00\x7fC\x00\x00\x7fC\x00\x00gC\x00\x00|C\x00\x00\x7fC\x00\x00{C\x00\x00jC\x00\x00\x7fC\x00\x00|C\x00\x00\xaaB\x00\x00\x80A\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6B\x00\x00zC\x00\x00wC\x00\x00fC\x00\x00\x7fC\x00\x00SC\x00\x00[C\x00\x00TC\x00\x00KC\x00\x003C\x00\x00\x80@\x00\x00PA\x00\x00\x00\x00\x00\x00\xa0@\x00\x00lB\x00\x00nC\x00\x00|C\x00\x00\x9aB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@@\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00@\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x84B\x00\x00iC\x00\x00}C\x00\x00\x7fC\x00\x00\x7fC\x00\x00NC\x00\x00\x00\x00\x00\x00\x00@\x00\x00\xc0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\xc0@\x00\x00\xf8A\x00\x00CC\x00\x00}C\x00\x00\x0eC\x00\x00\xc0A\x00\x00`A\x00\x00@@\x00\x00@@\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00@\x00\x00\x00@\x00\x00\x80@\x00\x00\xf0A\x00\x00uC\x00\x00\x7fC\x00\x00qC\x00\x00{C\x00\x00HC\x00\x00\x00\x00\x00\x00@@\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000A\x00\x00\x10A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4B\x00\x00kC\x00\x00\x7fC\x00\x00\xd8A\x00\x00\x00\x00\x00\x00@@\x00\x00\x00\x00\x00\x000A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00(B\x00\x00pC\x00\x00\x7fC\x00\x00\x0eC\x00\x00\xbeB\x00\x00\xa4B\x00\x00\xc0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0@\x00\x00\x80@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10A\x00\x00\x10A\x00\x00\xf0A\x00\x00%C\x00\x00nC\x00\x00lB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00XC\x00\x00\x7fC\x00\x00\x07C\x00\x00`A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00\x00\x00\x00@@\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bC\x00\x00\x7fC\x00\x00KC\x00\x00\x98A\x00\x00\x10A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x80@\x00\x00\x00\x00\x00\x00@@\x00\x00\x7fC\x00\x00_C\x00\x00\xdeB\x00\x00\x00\x00\x00\x00\xb8A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\xb0A\x00\x00\x0eC\x00\x00zC\x00\x00wC\x00\x00@@\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7fC\x00\x00\x14C\x00\x00PA\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\xc2B\x00\x00\x15C\x00\x00kC\x00\x00\x7fC\x00\x00(C\x00\x00\x88A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0@\x00\x00\x00\x00\x00\x00@@\x00\x00\x10A\x00\x00@@\x00\x00pC\x00\x00cC\x00\x00PB\x00\x00\x00\x00\x00\x00\xc0@\x00\x00\xa0@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0B\x00\x00\x00C\x00\x00uC\x00\x00qC\x00\x00\x7fC\x00\x00tC\x00\x00pB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7fC\x00\x00~C\x00\x00MC\x00\x00PB\x00\x00\x98A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8A\x00\x00\xe8B\x00\x00-C\x00\x00,C\x00\x00=C\x00\x00PC\x00\x00oC\x00\x00\x7fC\x00\x00\x7fC\x00\x00uC\x00\x00\x0fC\x00\x00\x80@\x00\x00\x00\x00\x00\x00PA\x00\x00\x00@\x00\x00\x10A\x00\x00\x10A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8A\x00\x00rC\x00\x00zC\x00\x00zC\x00\x00`C\x00\x00OC\x00\x00IC\x00\x00_C\x00\x00VC\x00\x00HC\x00\x00jC\x00\x00\x7fC\x00\x00|C\x00\x00eC\x00\x00}C\x00\x00wC\x00\x00|C\x00\x00~C\x00\x00\x01C\x00\x00\xb8A\x00\x00\x00A\x00\x00\x10A\x00\x00PA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1cB\x00\x00|C\x00\x00\x7fC\x00\x00qC\x00\x00~C\x00\x00~C\x00\x00\x7fC\x00\x00{C\x00\x00\x7fC\x00\x00\x7fC\x00\x00zC\x00\x00\x7fC\x00\x00{C\x00\x00\x7fC\x00\x00_C\x00\x006C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x80A\x00\x00\x10A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@A\x00\x00\xa8A\x00\x001C\x00\x00LC\x00\x00\x7fC\x00\x00\x7fC\x00\x00qC\x00\x00yC\x00\x00tC\x00\x00lC\x00\x00wC\x00\x00nC\x00\x00\x1aC\x00\x00)C\x00\x00 C\x00\x00 A\x00\x000A\x00\x00\x00A\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00@@\x00\x00\x80?\x00\x00\x10A\x00\x00\x00\x00\x00\x00hB\x00\x00\xe4B\x00\x00\xe0B\x00\x00#C\x00\x00}C\x00\x00}C\x00\x00,C\x00\x00\xf8B\x00\x00\xd2B\x00\x00@@\x00\x00`A\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\xa0@\x00\x00\xc0@\x00\x00\x00@\x00\x00\x80?\x00\x000A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80@\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x88A\x00\x00\xa0B\x00\x00\x9cB\x00\x00\xb8A\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x10A\x00\x00\x00\x00\x00\x00@@\x00\x00\x80@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") } diff --git a/internal/examples/mnist/test1_output0.go b/internal/examples/mnist/test1_output0.go index f6c28f3c..2fa1cf12 100644 --- a/internal/examples/mnist/test1_output0.go +++ b/internal/examples/mnist/test1_output0.go @@ -1,5 +1,5 @@ package mnist -func GetTest1Output0() []byte { +func getTest1Output0() []byte { return []byte("\x08\x01\x08\n\x10\x01J(\x1c\x8f\x9dE\x0c\x0e_\xc5\x01\xd3;\xc3\x81\xb9\xd2\xc4X\xea\x93\xc4y\x9b\x19\xc4\x84*_DH\xd4\xba\xc3\x93!\x91\xc39Z\xde\xc2") } diff --git a/internal/x/images/decode.go b/internal/x/images/decode.go index d3b9adc9..140dff53 100644 --- a/internal/x/images/decode.go +++ b/internal/x/images/decode.go @@ -18,7 +18,7 @@ import ( // - dst' second dimension is not 1 // - dst's third dimension != i.Bounds().Dy() // - dst's fourth dimension != i.Bounds().Dx() -// - dst's type is not float32 or float64 (temporarly) +// - dst's type is not float32 or float64 (temporary) func ImageToBCHW(img image.Image, dst tensor.Tensor) error { // check if tensor is a pointer rv := reflect.ValueOf(dst) @@ -75,7 +75,7 @@ func ImageToBCHW(img image.Image, dst tensor.Tensor) error { // - dst' second dimension is not 1 // - dst's third dimension != i.Bounds().Dy() // - dst's fourth dimension != i.Bounds().Dx() -// - dst's type is not float32 or float64 (temporarly) +// - dst's type is not float32 or float64 (temporary) func GrayToBCHW(img *image.Gray, dst tensor.Tensor) error { // check if tensor is a pointer rv := reflect.ValueOf(dst) diff --git a/sigmoid_test.go b/sigmoid_test.go index 935e2554..0b8a2f7c 100644 --- a/sigmoid_test.go +++ b/sigmoid_test.go @@ -27,42 +27,42 @@ var ( // see http://cs231n.github.io/optimization-2/ for a representation sigmoidNeuron = &pb.GraphProto{ Node: []*pb.NodeProto{ - &pb.NodeProto{ + { Input: []string{x0, w0}, Output: []string{"x0w0"}, OpType: mul, }, - &pb.NodeProto{ + { Input: []string{x1, w1}, Output: []string{"x1w1"}, OpType: mul, }, - &pb.NodeProto{ + { Input: []string{"x0w0", "x1w1"}, Output: []string{"x0w0+x1w1"}, OpType: add, }, - &pb.NodeProto{ + { Input: []string{"x0w0+x1w1", w2}, Output: []string{"x0w0+x1w1+w2"}, OpType: add, }, - &pb.NodeProto{ + { Input: []string{"x0w0+x1w1+w2", minusOne}, Output: []string{"-(x0w0+x1w1+w2)"}, OpType: mul, }, - &pb.NodeProto{ + { Input: []string{"-(x0w0+x1w1+w2)"}, Output: []string{"exp(-(x0w0+x1w1+w2))"}, OpType: exp, }, - &pb.NodeProto{ + { Input: []string{one, "exp(-(x0w0+x1w1+w2))"}, Output: []string{"1+exp(-(x0w0+x1w1+w2))"}, OpType: add, }, - &pb.NodeProto{ + { Input: []string{"1+exp(-(x0w0+x1w1+w2))", minusOne}, Output: []string{y}, OpType: pow, @@ -101,7 +101,7 @@ func newValueProtoScalar(name string) *pb.ValueInfoProto { ElemType: int32(pb.TensorProto_FLOAT), Shape: &pb.TensorShapeProto{ Dim: []*pb.TensorShapeProto_Dimension{ - &pb.TensorShapeProto_Dimension{ + { Value: &pb.TensorShapeProto_Dimension_DimValue{ DimValue: int64(1), },