| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """Tests object_detection.core.hyperparams_builder.""" |
|
|
| import numpy as np |
| import tensorflow as tf |
|
|
| from google.protobuf import text_format |
|
|
| from object_detection.builders import hyperparams_builder |
| from object_detection.core import freezable_batch_norm |
| from object_detection.protos import hyperparams_pb2 |
|
|
| slim = tf.contrib.slim |
|
|
|
|
| def _get_scope_key(op): |
| return getattr(op, '_key_op', str(op)) |
|
|
|
|
| class HyperparamsBuilderTest(tf.test.TestCase): |
|
|
| def test_default_arg_scope_has_conv2d_op(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| self.assertTrue(_get_scope_key(slim.conv2d) in scope) |
|
|
| def test_default_arg_scope_has_separable_conv2d_op(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| self.assertTrue(_get_scope_key(slim.separable_conv2d) in scope) |
|
|
| def test_default_arg_scope_has_conv2d_transpose_op(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| self.assertTrue(_get_scope_key(slim.conv2d_transpose) in scope) |
|
|
| def test_explicit_fc_op_arg_scope_has_fully_connected_op(self): |
| conv_hyperparams_text_proto = """ |
| op: FC |
| regularizer { |
| l1_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| self.assertTrue(_get_scope_key(slim.fully_connected) in scope) |
|
|
| def test_separable_conv2d_and_conv2d_and_transpose_have_same_parameters(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| kwargs_1, kwargs_2, kwargs_3 = scope.values() |
| self.assertDictEqual(kwargs_1, kwargs_2) |
| self.assertDictEqual(kwargs_1, kwargs_3) |
|
|
| def test_return_l1_regularized_weights(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| weight: 0.5 |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope.values()[0] |
| regularizer = conv_scope_arguments['weights_regularizer'] |
| weights = np.array([1., -1, 4., 2.]) |
| with self.test_session() as sess: |
| result = sess.run(regularizer(tf.constant(weights))) |
| self.assertAllClose(np.abs(weights).sum() * 0.5, result) |
|
|
| def test_return_l1_regularized_weights_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l1_regularizer { |
| weight: 0.5 |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
|
|
| regularizer = keras_config.params()['kernel_regularizer'] |
| weights = np.array([1., -1, 4., 2.]) |
| with self.test_session() as sess: |
| result = sess.run(regularizer(tf.constant(weights))) |
| self.assertAllClose(np.abs(weights).sum() * 0.5, result) |
|
|
| def test_return_l2_regularizer_weights(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| weight: 0.42 |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
|
|
| regularizer = conv_scope_arguments['weights_regularizer'] |
| weights = np.array([1., -1, 4., 2.]) |
| with self.test_session() as sess: |
| result = sess.run(regularizer(tf.constant(weights))) |
| self.assertAllClose(np.power(weights, 2).sum() / 2.0 * 0.42, result) |
|
|
| def test_return_l2_regularizer_weights_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| weight: 0.42 |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
|
|
| regularizer = keras_config.params()['kernel_regularizer'] |
| weights = np.array([1., -1, 4., 2.]) |
| with self.test_session() as sess: |
| result = sess.run(regularizer(tf.constant(weights))) |
| self.assertAllClose(np.power(weights, 2).sum() / 2.0 * 0.42, result) |
|
|
| def test_return_non_default_batch_norm_params_with_train_during_train(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| batch_norm { |
| decay: 0.7 |
| center: false |
| scale: true |
| epsilon: 0.03 |
| train: true |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['normalizer_fn'], slim.batch_norm) |
| batch_norm_params = scope[_get_scope_key(slim.batch_norm)] |
| self.assertAlmostEqual(batch_norm_params['decay'], 0.7) |
| self.assertAlmostEqual(batch_norm_params['epsilon'], 0.03) |
| self.assertFalse(batch_norm_params['center']) |
| self.assertTrue(batch_norm_params['scale']) |
| self.assertTrue(batch_norm_params['is_training']) |
|
|
| def test_return_non_default_batch_norm_params_keras( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| batch_norm { |
| decay: 0.7 |
| center: false |
| scale: true |
| epsilon: 0.03 |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
|
|
| self.assertTrue(keras_config.use_batch_norm()) |
| batch_norm_params = keras_config.batch_norm_params() |
| self.assertAlmostEqual(batch_norm_params['momentum'], 0.7) |
| self.assertAlmostEqual(batch_norm_params['epsilon'], 0.03) |
| self.assertFalse(batch_norm_params['center']) |
| self.assertTrue(batch_norm_params['scale']) |
|
|
| batch_norm_layer = keras_config.build_batch_norm() |
| self.assertTrue(isinstance(batch_norm_layer, |
| freezable_batch_norm.FreezableBatchNorm)) |
|
|
| def test_return_non_default_batch_norm_params_keras_override( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| batch_norm { |
| decay: 0.7 |
| center: false |
| scale: true |
| epsilon: 0.03 |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
|
|
| self.assertTrue(keras_config.use_batch_norm()) |
| batch_norm_params = keras_config.batch_norm_params(momentum=0.4) |
| self.assertAlmostEqual(batch_norm_params['momentum'], 0.4) |
| self.assertAlmostEqual(batch_norm_params['epsilon'], 0.03) |
| self.assertFalse(batch_norm_params['center']) |
| self.assertTrue(batch_norm_params['scale']) |
|
|
| def test_return_batch_norm_params_with_notrain_during_eval(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| batch_norm { |
| decay: 0.7 |
| center: false |
| scale: true |
| epsilon: 0.03 |
| train: true |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=False) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['normalizer_fn'], slim.batch_norm) |
| batch_norm_params = scope[_get_scope_key(slim.batch_norm)] |
| self.assertAlmostEqual(batch_norm_params['decay'], 0.7) |
| self.assertAlmostEqual(batch_norm_params['epsilon'], 0.03) |
| self.assertFalse(batch_norm_params['center']) |
| self.assertTrue(batch_norm_params['scale']) |
| self.assertFalse(batch_norm_params['is_training']) |
|
|
| def test_return_batch_norm_params_with_notrain_when_train_is_false(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| batch_norm { |
| decay: 0.7 |
| center: false |
| scale: true |
| epsilon: 0.03 |
| train: false |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['normalizer_fn'], slim.batch_norm) |
| batch_norm_params = scope[_get_scope_key(slim.batch_norm)] |
| self.assertAlmostEqual(batch_norm_params['decay'], 0.7) |
| self.assertAlmostEqual(batch_norm_params['epsilon'], 0.03) |
| self.assertFalse(batch_norm_params['center']) |
| self.assertTrue(batch_norm_params['scale']) |
| self.assertFalse(batch_norm_params['is_training']) |
|
|
| def test_do_not_use_batch_norm_if_default(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['normalizer_fn'], None) |
|
|
| def test_do_not_use_batch_norm_if_default_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| self.assertFalse(keras_config.use_batch_norm()) |
| self.assertEqual(keras_config.batch_norm_params(), {}) |
|
|
| |
| identity_layer = keras_config.build_batch_norm() |
| self.assertTrue(isinstance(identity_layer, |
| tf.keras.layers.Lambda)) |
|
|
| def test_use_none_activation(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: NONE |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['activation_fn'], None) |
|
|
| def test_use_none_activation_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: NONE |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| self.assertEqual(keras_config.params()['activation'], None) |
| self.assertEqual( |
| keras_config.params(include_activation=True)['activation'], None) |
| activation_layer = keras_config.build_activation_layer() |
| self.assertTrue(isinstance(activation_layer, tf.keras.layers.Lambda)) |
| self.assertEqual(activation_layer.function, tf.identity) |
|
|
| def test_use_relu_activation(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: RELU |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['activation_fn'], tf.nn.relu) |
|
|
| def test_use_relu_activation_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: RELU |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| self.assertEqual(keras_config.params()['activation'], None) |
| self.assertEqual( |
| keras_config.params(include_activation=True)['activation'], tf.nn.relu) |
| activation_layer = keras_config.build_activation_layer() |
| self.assertTrue(isinstance(activation_layer, tf.keras.layers.Lambda)) |
| self.assertEqual(activation_layer.function, tf.nn.relu) |
|
|
| def test_use_relu_6_activation(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: RELU_6 |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| self.assertEqual(conv_scope_arguments['activation_fn'], tf.nn.relu6) |
|
|
| def test_use_relu_6_activation_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: RELU_6 |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| self.assertEqual(keras_config.params()['activation'], None) |
| self.assertEqual( |
| keras_config.params(include_activation=True)['activation'], tf.nn.relu6) |
| activation_layer = keras_config.build_activation_layer() |
| self.assertTrue(isinstance(activation_layer, tf.keras.layers.Lambda)) |
| self.assertEqual(activation_layer.function, tf.nn.relu6) |
|
|
| def test_override_activation_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| } |
| } |
| activation: RELU_6 |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| new_params = keras_config.params(activation=tf.nn.relu) |
| self.assertEqual(new_params['activation'], tf.nn.relu) |
|
|
| def _assert_variance_in_range(self, initializer, shape, variance, |
| tol=1e-2): |
| with tf.Graph().as_default() as g: |
| with self.test_session(graph=g) as sess: |
| var = tf.get_variable( |
| name='test', |
| shape=shape, |
| dtype=tf.float32, |
| initializer=initializer) |
| sess.run(tf.global_variables_initializer()) |
| values = sess.run(var) |
| self.assertAllClose(np.var(values), variance, tol, tol) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_in(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_IN |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 100.) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_in_keras( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_IN |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 100.) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_out(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_OUT |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 40.) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_out_keras( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_OUT |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 40.) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_avg(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_AVG |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=4. / (100. + 40.)) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_fan_avg_keras( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_AVG |
| uniform: false |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=4. / (100. + 40.)) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_uniform(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_IN |
| uniform: true |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 100.) |
|
|
| def test_variance_in_range_with_variance_scaling_initializer_uniform_keras( |
| self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| variance_scaling_initializer { |
| factor: 2.0 |
| mode: FAN_IN |
| uniform: true |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=2. / 100.) |
|
|
| def test_variance_in_range_with_truncated_normal_initializer(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| mean: 0.0 |
| stddev: 0.8 |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=0.49, tol=1e-1) |
|
|
| def test_variance_in_range_with_truncated_normal_initializer_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| truncated_normal_initializer { |
| mean: 0.0 |
| stddev: 0.8 |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=0.49, tol=1e-1) |
|
|
| def test_variance_in_range_with_random_normal_initializer(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| random_normal_initializer { |
| mean: 0.0 |
| stddev: 0.8 |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| scope_fn = hyperparams_builder.build(conv_hyperparams_proto, |
| is_training=True) |
| scope = scope_fn() |
| conv_scope_arguments = scope[_get_scope_key(slim.conv2d)] |
| initializer = conv_scope_arguments['weights_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=0.64, tol=1e-1) |
|
|
| def test_variance_in_range_with_random_normal_initializer_keras(self): |
| conv_hyperparams_text_proto = """ |
| regularizer { |
| l2_regularizer { |
| } |
| } |
| initializer { |
| random_normal_initializer { |
| mean: 0.0 |
| stddev: 0.8 |
| } |
| } |
| """ |
| conv_hyperparams_proto = hyperparams_pb2.Hyperparams() |
| text_format.Merge(conv_hyperparams_text_proto, conv_hyperparams_proto) |
| keras_config = hyperparams_builder.KerasLayerHyperparams( |
| conv_hyperparams_proto) |
| initializer = keras_config.params()['kernel_initializer'] |
| self._assert_variance_in_range(initializer, shape=[100, 40], |
| variance=0.64, tol=1e-1) |
|
|
|
|
| if __name__ == '__main__': |
| tf.test.main() |
|
|