def _build(self):
n_inpt_channels = self.inpt.get_shape().as_list()[-1]
n_dfn_filter_params = n_inpt_channels * self.n_channels * np.prod(self.ksize)
filter_inpt = self.filter_inpt
for i in xrange(1, self.n_param_layers):
filter_inpt = AffineLayer(filter_inpt, filter_inpt.get_shape().as_list()[-1],
transfer=tf.nn.elu, name='param_layer_{}'.format(i))
dfn_weight_init = tf.uniform_unit_scaling_initializer(self.dfn_weight_factor)
self.dynamic_weights = AffineLayer(filter_inpt, n_dfn_filter_params, transfer=None,
weight_init=dfn_weight_init, bias_init=dfn_weight_init, name='dynamic_weights')
dfn_weights = tf.reshape(self.dynamic_weights, (-1, 1, 1, n_dfn_filter_params))
dfn = DynamicFilterConvLayer(self.inpt, dfn_weights, self.ksize, name='dfn')
if self.adaptive_bias:
dfn_bias_init = tf.uniform_unit_scaling_initializer(self.dfn_bias_factor)
self.dynamic_bias = AffineLayer(filter_inpt, self.n_channels, transfer=None,
weight_init=dfn_bias_init, bias_init=dfn_bias_init,
name='dynamic_bias')
dfn_adaptive_bias = tf.reshape(self.dynamic_bias, (-1, 1, 1, self.n_channels))
dfn += dfn_adaptive_bias
if self.bias:
self.bias = tf.get_variable('dfn_bias', (1, 1, 1, self.n_channels))
dfn += self.bias
self.features = self.transfer(dfn)
评论列表
文章目录