def extract(cls, node): pb = node.parameters collect_until_token(pb, b'<Dim>') dim = read_binary_integer32_token(pb) collect_until_token(pb, b'<BlockDim>') block_dim = read_binary_integer32_token(pb) collect_until_token(pb, b'<Epsilon>') eps = read_binary_float_token(pb) collect_until_token(pb, b'<TargetRms>') target_rms = read_binary_float_token(pb) collect_until_token(pb, b'<StatsMean>') mean = read_binary_vector(pb) collect_until_token(pb, b'<StatsVar>') var = read_binary_vector(pb) scale = target_rms / np.sqrt(var + eps) shift = -target_rms * mean / np.sqrt(var + eps) scale = np.tile(scale, dim // block_dim) shift = np.tile(shift, dim // block_dim) attrs = {'out-size': dim} embed_input(attrs, 1, 'weights', scale) embed_input(attrs, 2, 'biases', shift) ScaleShiftOp.update_node_stat(node, attrs) return cls.enabled
def extract(cls, node): pb = node.parameters try: collect_until_token(pb, b'<InputDim>') except Error: raise Error("<InputDim> was not found") in_dim = read_binary_integer32_token(pb) try: collect_until_token(pb, b'<OutputDim>') except Error: raise Error("<OutputDim> was not found") out_dim = read_binary_integer32_token(pb) assert in_dim % out_dim == 0 group = in_dim / out_dim try: collect_until_token(pb, b'<P>') except Error: raise Error("<P> was not found") p = read_binary_float_token(pb) attrs = { 'group': group, 'p': p, } PNormOp.update_node_stat(node, attrs) return cls.enabled
def extract(cls, node): pb = node.parameters collect_until_token(pb, b'<MaxChange>') max_change = read_binary_float_token(pb) collect_until_token(pb, b'<L2Regularize>') collect_until_token(pb, b'<LearningRate>') collect_until_token(pb, b'<TimeOffsets>') time_offsets = read_binary_vector(pb, False, np.int32) collect_until_token(pb, b'<LinearParams>') weights, weights_shape = read_binary_matrix(pb) collect_until_token(pb, b'<BiasParams>') bias_params = read_binary_vector(pb) collect_until_token(pb, b'<OrthonormalConstraint>') orthonormal_constraint = read_binary_float_token( pb) # used only on training collect_until_token(pb, b'<UseNaturalGradient>') use_natural_grad = read_binary_bool_token(pb) # used only on training collect_until_token(pb, b'<NumSamplesHistory>') num_samples_hist = read_binary_float_token(pb) collect_until_token(pb, b'<AlphaInOut>') alpha_in_out = read_binary_float_token(pb), read_binary_float_token( pb) # for training, usually (4, 4) # according to Kaldi documentation http://kaldi-asr.org/doc/classkaldi_1_1nnet3_1_1TdnnComponent.html#details # it looks like it's used only during training (but not 100% sure) collect_until_token(pb, b'<RankInOut>') rank_in_out = read_binary_integer32_token( pb), read_binary_integer32_token(pb) biases = mo_array(bias_params) if len(bias_params) != 0 else None attrs = { 'weights': np.reshape(weights, weights_shape), 'biases': biases, 'time_offsets': time_offsets, } TdnnComponent.update_node_stat(node, attrs) return cls.enabled
def extract(cls, node): pb = node.parameters size = collect_until_token_and_read(pb, b'<OutputDim>') collect_until_token(pb, b'<DropoutProportion>') dropout_proportion = read_binary_float_token(pb) DropoutMask.update_node_stat(node, { 'dropout_proportion': 1.0 - dropout_proportion, 'size': size }) return cls.enabled
def extract(cls, node): pb = node.parameters collect_until_token(pb, b'<Dim>') dim = read_binary_integer32_token(pb) collect_until_token(pb, b'<Scale>') scale = read_binary_float_token(pb) # TODO add real batch here attrs = {} embed_input(attrs, 1, 'weights', np.full([dim], scale)) ScaleShiftOp.update_node_stat(node, attrs) return cls.enabled
def extract(cls, node): pb = node.parameters collect_until_token(pb, b'<Dim>') dim = read_binary_integer32_token(pb) collect_until_token(pb, b'<BlockDim>') block_dim = read_binary_integer32_token(pb) collect_until_token(pb, b'<TimePeriod>') time_period = read_binary_integer32_token(pb) collect_until_token(pb, b'<DropoutProportion>') dropout_proporion = read_binary_float_token(pb) # collect_until_token(pb, b'<Continuous>') Identity.update_node_stat(node, {}) return cls.enabled
def extract(cls, node): pb = node.parameters try: collect_until_token(pb, b'<Dim>') except Error: try: pb.seek(0) collect_until_token(pb, b'<InputDim>') except Error: raise Error("Neither <Dim> nor <InputDim> were found") in_dim = read_binary_integer32_token(pb) try: collect_until_token(pb, b'<TargetRms>') target_rms = read_binary_float_token(pb) except Error: # model does not contain TargetRms target_rms = 1.0 try: collect_until_token(pb, b'<AddLogStddev>') add_log = read_binary_bool_token(pb) except Error: # model does not contain AddLogStddev add_log = False if add_log is not False: raise Error("AddLogStddev True in Normalize component is not supported") scale = target_rms * np.sqrt(in_dim) attrs = { 'eps': 0.00000001, 'across_spatial': 0, 'channel_shared': 1, 'in_dim': in_dim, } embed_input(attrs, 1, 'weights', [scale]) NormalizeOp.update_node_stat(node, attrs) return cls.enabled
def test_read_binary_float_token(self): stream = self.bytesio_from(self.pack_value(4, 'B') + self.pack_value(0.001, self.float32_fmt)) self.assertAlmostEqual(read_binary_float_token(stream), 0.001)