# ==============================================================================
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE.md file in the project root
# for full license information.
# ==============================================================================
from enum import Enum
[docs]class CntkParameters(object):
'''
The parameter of all CNTK op
'''
def __init__(self):
pass
[docs]class CntkConvolutionParameters(CntkParameters):
'''
The parameter definition of convolution op
'''
def __init__(self):
CntkParameters.__init__(self)
self.output = 0
self.stride = [0, 0]
self.kernel = [0, 0]
self.auto_pad = False
self.scale_setting = [1, 1]
self.bias_setting = [1, 1]
self.need_bias = True
self.dilation = [1, 1]
self.group = 1
[docs]class CntkPoolingParameters(CntkParameters):
'''
The parameter definition of pooling op
'''
def __init__(self):
CntkParameters.__init__(self)
self.stride = [0, 0]
self.kernel = [0, 0]
self.auto_pad = False
self.pooling_type = 0 # 0 for max, 1 for average
[docs]class CntkBatchNormParameters(CntkParameters):
'''
The parameter definition of batch normalization op
'''
def __init__(self):
CntkParameters.__init__(self)
self.spatial = 2
self.norm_time_const = 0
self.blend_time_const = 0
self.epsilon = 0.00001
self.scale_setting = [1, 1]
self.bias_setting = [1, 1]
[docs]class CntkDenseParameters(CntkParameters):
'''
The parameter definition of dense op
'''
def __init__(self):
CntkParameters.__init__(self)
self.num_output = 0
self.scale_setting = [1, 1]
self.bias_setting = [1, 1]
self.transpose = False
[docs]class CntkSpliceParameters(CntkParameters):
'''
The parameter definition of splice op
'''
def __init__(self):
CntkParameters.__init__(self)
self.axis = 1
[docs]class CntkLRNParameters(CntkParameters):
'''
The parameter definition of LRN op
'''
def __init__(self):
CntkParameters.__init__(self)
self.kernel_size = 5
self.alpha = 1
self.beta = 5
self.k = 1
[docs]class CntkPSROIPoolingParameters(CntkParameters):
'''
The parameter definition of PSROIPooling op
'''
def __init__(self):
CntkParameters.__init__(self)
self.group_size = 1
self.out_channel = 1
[docs]class CntkLayerType(Enum):
'''
The enumate of CNTK ops
'''
relu = 1
convolution = 2
pooling = 3
batch_norm = 4
plus = 5
dense = 6
splice = 7
classification_error = 10
cross_entropy_with_softmax = 11
dropout = 12
lrn = 13
psroi_pooling = 14
softmax = 15
unknown = 100
[docs]class CntkTensorDefinition(object):
'''
The definition of data blob
'''
def __init__(self):
self.tensor = [0 * 4]
self.data = []
[docs]class CntkLayersDefinition(object):
'''
The definition of nodes, created by Caffe and instaced by CNTK
'''
def __init__(self):
self.inputs = []
self.outputs = []
self.op_name = None
self.parameters = None
self.op_type = CntkLayerType.unknown
self.tensor = []
self.parameter_tensor = []
[docs]class CntkSolver(object):
'''
Record the solver state
'''
def __init__(self):
self.learning_rate = None
self.max_epoch = None
self.adjust_interval = None
self.decrease_factor = None
self.upper_limit = None
self.minibatch_size = None
self.weight_decay = None
self.dropout = None
self.number_to_show_result = None
self.grad_update_type = None
self.momentum = None
[docs]class CntkModelDescription(object):
'''
Record the basic information of model
'''
def __init__(self):
self.data_provider = []
self.cntk_layers = {} # Dict Key: function name, Value: function definition
self.cntk_sorted_layers = [] # List Key: function name
self.model_name = 'Untitled'
self.solver = None