Exemple #1
0
 def test_empty_input_not_declared(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("""
             version 1.0;
             graph G( input ) -> ( output )
             {
                 output = copy(input);
             }
             """)
Exemple #2
0
 def test_empty_output_not_declared(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("""
             version 1.0;
             graph G( input ) -> ( output )
             {
                 input = external(shape = []);
             }
             """)
Exemple #3
0
 def test_minimal(self):
     nnef.parse_string("""
         version 1.0;
         graph G( input ) -> ( output )
         {
             input = external(shape = []);
             output = copy(input);
         }
         """)
Exemple #4
0
 def test_variable_update(self):
     nnef.parse_string("""
         version 1.0;
         graph G( input ) -> ( output )
         {
             input = external(shape = []);
             var = variable(shape = [], label = 'var');
             output = update(var, input);
         }
         """)
Exemple #5
0
 def test_non_variable_update(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("""
             version 1.0;
             graph G( input ) -> ( output )
             {
                 input = external(shape = []);
                 output = update(input, input);
             }
             """)
Exemple #6
0
 def test_input_not_external(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("""
             version 1.0;
             graph G( input ) -> ( output )
             {
                 input = constant(shape = [], value = [1.0]);
                 output = copy(input);
             }
             """)
Exemple #7
0
 def test_external_not_input(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("""
             version 1.0;
             graph G( input ) -> ( output )
             {
                 input = external(shape = []);
                 other = external(shape = []);
                 output = add(input, other);
             }
             """)
Exemple #8
0
 def test_custom_fragment(self):
     nnef.parse_string("""
         version 1.0;
         extension KHR_enable_fragment_definitions, KHR_enable_operator_expressions;
         
         fragment op( input: tensor<scalar> ) -> ( output: tensor<scalar> )
         {
             output = input;
         }
         
         graph G( input ) -> ( output )
         {
             input = external(shape = []);
             output = op(input);
         }
         """)
Exemple #9
0
 def test_reshape(self):
     graph = nnef.parse_string("""
         version 1.0;
         graph G( input ) -> ( output )
         {
             input = external(shape = [1,2,3,4]);
             output = reshape(input, axis_start = 1, axis_count = 2, shape = [6]);
         }
         """)
     nnef.infer_shapes(graph)
Exemple #10
0
# See the License for the specific language governing permissions and
# limitations under the License.

import nnef


def shuffle_shape(op, args, shapes):
    shapes[args['output']] = shapes[args['input']]


nnef._register_custom_ops(
    "shuffle",
    "fragment shuffle<?>( input: tensor<?>, groups: integer ) -> ( output: tensor<?> );"
)
nnef._register_custom_shapes({"shuffle": shuffle_shape})

graph = nnef.parse_string("""
    version 1.0;
    graph Net( input ) -> ( output )
    {
        input = external(shape = [1,3,224,224]);
        filter = variable(shape = [32,3,5,5], label = 'conv/filter');
        conv = conv(input, filter);
        output = shuffle(conv, groups = 4);
    }
    """)

print(
    nnef.format_graph(graph.name, graph.inputs, graph.outputs,
                      graph.operations))
Exemple #11
0
import nnef


def shuffle_shape(input, groups):
    assert input[
        1] % groups == 0, "input channels ({}) is not divisible by groups ({})".format(
            input[1], groups)
    return input


graph = nnef.parse_string("""
    version 1.0;
    extension KHR_enable_fragment_definitions;

    fragment shuffle<?>( input: tensor<?>, groups: integer ) -> ( output: tensor<?> );

    graph Net( input ) -> ( output )
    {
        input = external(shape = [1,3,224,224]);
        filter = variable(shape = [32,3,5,5], label = 'conv/filter');
        conv = conv(input, filter);
        output = shuffle(conv, groups = 4);
    }
    """)

nnef.infer_shapes(graph, custom_shapes={'shuffle': shuffle_shape})

print(
    nnef.format_graph(graph.name, graph.inputs, graph.outputs,
                      graph.operations))
Exemple #12
0
def parse_string(string):
    with ParserConfigToExpandNonAtomics:
        with default_config:
            return nnef.parse_string(string)
Exemple #13
0
 def parse_string(self, graph_str, quant_str=None):
     return nnef.parse_string(graph_str=graph_str,
                              quant_str=quant_str,
                              stdlib=self._source,
                              lowered=self._expand)
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import nnef


def shuffle_shape(proto, args, shapes):
    shapes[args['output']] = shapes[args['input']]


nnef._register_custom_ops(
    "shuffle",
    "fragment shuffle<?>( input: tensor<?>, groups: integer ) -> ( output: tensor<?> );"
)
nnef._register_custom_shapes({"shuffle": shuffle_shape})

attrs, ops = nnef.parse_string("""
    version 1.0;
    graph Net( input ) -> ( output )
    {
       input = external(shape = [1,3,224,224]);
       filter = variable(shape = [32,3,5,5], label = 'conv/filter');
       conv = conv(input, filter);
       output = shuffle(conv, groups = 4);
    }
    """,
                               atomics=nnef.StandardOperations + ["shuffle"])

print(nnef.format_document(attrs, ops))
 def parse_string(self, graph_str, quant_str=None):
     return nnef.parse_string(graph_str=graph_str,
                              quant_str=quant_str,
                              stdlib=self.fragments,
                              lowered=self.lowered)
def parse_string(string):
    with default_config:
        return nnef.parse_string(string, atomics=AtomicOperations)
Exemple #17
0
 def test_empty_document(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("")
Exemple #18
0
 def test_empty_body(self):
     with self.assertRaises(nnef.Error):
         nnef.parse_string("version 1.0; graph G( input ) -> ( output ) {}")
Exemple #19
0
# Copyright (c) 2017 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import nnef

attrs, ops = nnef.parse_string(
    "version 1.0;"
    "graph Net( input ) -> ( output )"
    "{"
    "   input = external(shape = [1,3,224,224]);"
    "   filter = variable(shape = [32,3,5,5], label = 'conv/filter');"
    "   output = conv(input, filter);"
    "}")

print(nnef.format_document(attrs, ops))
Exemple #20
0
 def parse_string(self, graph_str, quant_str=None):
     return nnef.parse_string(graph_str=graph_str,
                              quant_str=quant_str,
                              stdlib=self.custom_ops,
                              lowered=self.expand)