def test_dynamic_attributes_softmax(): axis = 2 data = ov.parameter([1, 2, 3, 4], np.float32, "data_in") node = ov.softmax(data, axis) assert node.get_axis() == axis node.set_axis(3) assert node.get_axis() == 3
def create_ngraph_function(model_path: str) -> Model: """Create a model on the fly from the source code using ngraph""" def shape_and_length(shape: list) -> typing.Tuple[list, int]: length = reduce(lambda x, y: x * y, shape) return shape, length weights = np.fromfile(model_path, dtype=np.float32) weights_offset = 0 padding_begin = padding_end = [0, 0] # input input_shape = [64, 1, 28, 28] param_node = op.Parameter(Type.f32, Shape(input_shape)) # convolution 1 conv_1_kernel_shape, conv_1_kernel_length = shape_and_length([20, 1, 5, 5]) conv_1_kernel = op.Constant(Type.f32, Shape(conv_1_kernel_shape), weights[0:conv_1_kernel_length].tolist()) weights_offset += conv_1_kernel_length conv_1_node = opset8.convolution(param_node, conv_1_kernel, [1, 1], padding_begin, padding_end, [1, 1]) # add 1 add_1_kernel_shape, add_1_kernel_length = shape_and_length([1, 20, 1, 1]) add_1_kernel = op.Constant( Type.f32, Shape(add_1_kernel_shape), weights[weights_offset:weights_offset + add_1_kernel_length]) weights_offset += add_1_kernel_length add_1_node = opset8.add(conv_1_node, add_1_kernel) # maxpool 1 maxpool_1_node = opset1.max_pool(add_1_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil') # convolution 2 conv_2_kernel_shape, conv_2_kernel_length = shape_and_length( [50, 20, 5, 5]) conv_2_kernel = op.Constant( Type.f32, Shape(conv_2_kernel_shape), weights[weights_offset:weights_offset + conv_2_kernel_length], ) weights_offset += conv_2_kernel_length conv_2_node = opset8.convolution(maxpool_1_node, conv_2_kernel, [1, 1], padding_begin, padding_end, [1, 1]) # add 2 add_2_kernel_shape, add_2_kernel_length = shape_and_length([1, 50, 1, 1]) add_2_kernel = op.Constant( Type.f32, Shape(add_2_kernel_shape), weights[weights_offset:weights_offset + add_2_kernel_length], ) weights_offset += add_2_kernel_length add_2_node = opset8.add(conv_2_node, add_2_kernel) # maxpool 2 maxpool_2_node = opset1.max_pool(add_2_node, [2, 2], padding_begin, padding_end, [2, 2], 'ceil') # reshape 1 reshape_1_dims, reshape_1_length = shape_and_length([2]) # workaround to get int64 weights from float32 ndarray w/o unnecessary copying dtype_weights = np.frombuffer( weights[weights_offset:weights_offset + 2 * reshape_1_length], dtype=np.int64, ) reshape_1_kernel = op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights) weights_offset += 2 * reshape_1_length reshape_1_node = opset8.reshape(maxpool_2_node, reshape_1_kernel, True) # matmul 1 matmul_1_kernel_shape, matmul_1_kernel_length = shape_and_length( [500, 800]) matmul_1_kernel = op.Constant( Type.f32, Shape(matmul_1_kernel_shape), weights[weights_offset:weights_offset + matmul_1_kernel_length], ) weights_offset += matmul_1_kernel_length matmul_1_node = opset8.matmul(reshape_1_node, matmul_1_kernel, False, True) # add 3 add_3_kernel_shape, add_3_kernel_length = shape_and_length([1, 500]) add_3_kernel = op.Constant( Type.f32, Shape(add_3_kernel_shape), weights[weights_offset:weights_offset + add_3_kernel_length], ) weights_offset += add_3_kernel_length add_3_node = opset8.add(matmul_1_node, add_3_kernel) # ReLU relu_node = opset8.relu(add_3_node) # reshape 2 reshape_2_kernel = op.Constant(Type.i64, Shape(list(dtype_weights.shape)), dtype_weights) reshape_2_node = opset8.reshape(relu_node, reshape_2_kernel, True) # matmul 2 matmul_2_kernel_shape, matmul_2_kernel_length = shape_and_length([10, 500]) matmul_2_kernel = op.Constant( Type.f32, Shape(matmul_2_kernel_shape), weights[weights_offset:weights_offset + matmul_2_kernel_length], ) weights_offset += matmul_2_kernel_length matmul_2_node = opset8.matmul(reshape_2_node, matmul_2_kernel, False, True) # add 4 add_4_kernel_shape, add_4_kernel_length = shape_and_length([1, 10]) add_4_kernel = op.Constant( Type.f32, Shape(add_4_kernel_shape), weights[weights_offset:weights_offset + add_4_kernel_length], ) weights_offset += add_4_kernel_length add_4_node = opset8.add(matmul_2_node, add_4_kernel) # softmax softmax_axis = 1 softmax_node = opset8.softmax(add_4_node, softmax_axis) return Model(softmax_node, [param_node], 'lenet')