def _code_regularization(self, lCW):
ns = self.netspec
# Semantic codes. Needs to be initialized.
code_shape = [sum(self.code_dim), len(self.train_classes) if self.semantics == ATTRIBUTES else sum(self.num_states)]
name = 'SCoRe/cwReg/codewords'
sem_cw = ns[name] = L.DummyData(name=name, shape=dict(dim=code_shape), include=dict(phase=caffe.TRAIN))
# Classification codes.
name = 'SCoRe/cwReg/eye'
x = ns[name] = L.DummyData(name=name, shape=dict(dim=[code_shape[0], code_shape[0]]), include=dict(phase=caffe.TRAIN))
name = 'SCoRe/cwReg/cls_codewords'
clf_cw = ns[name] = L.InnerProduct(x, name=name, num_output=code_shape[1], bias_term=False,
param=[{'name': lCW}], include=dict(phase=caffe.TRAIN))
# Compute \sum |S-C|^2
name = 'SCoRe/cwReg/diff'
x_diff = ns[name] = L.Eltwise(*[sem_cw, clf_cw], name=name,
operation=P.Eltwise.SUM, coeff=[1., -1.], include=dict(phase=caffe.TRAIN))
name = 'SCoRe/cwReg'
ns[name] = L.Reduction(x_diff, name=name,
operation=P.Reduction.SUMSQ, axis=0,
loss_weight=self.code_coeff, include=dict(phase=caffe.TRAIN))
评论列表
文章目录