Source code for simnets.test.keras

from __future__ import print_function, division, absolute_import

import tensorflow as tf
import numpy as np
import keras
import keras.models

from ...keras import Similarity, Mex

[docs]class KerasMexTests(tf.test.TestCase):
[docs] def test_attributes(self): l = Mex(num_instances=10, padding='VALID', strides=[1, 2, 2], blocks=[1, 2, 3], epsilon=2.0, use_unshared_regions=False,shared_offset_region=[2, 2], unshared_offset_region=[4, 4], softmax_mode=True, blocks_out_of_bounds_value=1.0, blocks_round_down=False, normalize_offsets=True, input_shape=(3, 40, 40)) model = keras.models.Sequential([l]) model.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) op = l.op.op # type: tf.Operation self.assertTrue(op.get_attr('num_instances') == 10) self.assertTrue(op.get_attr('padding') == [0, 0, 0]) self.assertTrue(op.get_attr('strides') == [1, 2, 2]) self.assertTrue(op.get_attr('blocks') == [1, 2, 3]) self.assertTrue(op.get_attr('epsilon') == 2.0) self.assertTrue(op.get_attr('use_unshared_regions') is False) self.assertTrue(op.get_attr('shared_offset_region') == [2, 2]) self.assertTrue(op.get_attr('unshared_offset_region') == [4, 4]) self.assertTrue(op.get_attr('softmax_mode') is True) self.assertTrue(op.get_attr('blocks_out_of_bounds_value') == 1.0) self.assertTrue(op.get_attr('blocks_round_down') is False) self.assertTrue('NormalizeOffsets' in op.inputs[1].name)
def _run_shape_test(self, num_instances, padding, strides, blocks, blocks_round_down, input_shape, output_shape): l = Mex(num_instances=num_instances, padding=padding, strides=strides, blocks=blocks, epsilon=2.0, use_unshared_regions=False, shared_offset_region=[2, 2], unshared_offset_region=[4, 4], softmax_mode=True, blocks_out_of_bounds_value=1.0, blocks_round_down=blocks_round_down, normalize_offsets=True, input_shape=input_shape) model = keras.models.Sequential([l]) model.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) output = l.op # type: tf.Tensor self.assertEqual(output.get_shape().as_list()[1:], list(output_shape))
[docs] def test_shapes(self): self._run_shape_test(10, [1, 0, 1], [1, 1, 1], [1, 2, 2], False, (3, 10, 13), (50, 9, 14)) self._run_shape_test(10, [2, 1, 1], [1, 3, 2], [1, 2, 2], False, (3, 10, 13), (70, 5, 8)) self._run_shape_test(2, [1, 1, 1], [1, 3, 2], [1, 2, 2], False, (1, 10, 13), (6, 5, 8))
[docs] def test_channels_last(self): with self.test_session(): l1 = Mex(num_instances=3, padding='VALID', strides=[1,2,2], blocks=[1,1,1], epsilon=1.0, use_unshared_regions=True, unshared_offset_region=[2], softmax_mode=True, offsets_initializer='ones', input_shape=(3, 10, 11)) l2 = Mex(num_instances=3, padding='VALID', strides=[1,2,2], blocks=[1, 1, 1], epsilon=1.0, offsets_initializer='ones', use_unshared_regions=True, unshared_offset_region=[2], softmax_mode=True, channels_last=True, input_shape=(10, 11, 3)) model1 = keras.models.Sequential([l1]) model2 = keras.models.Sequential([l2]) model1.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) model2.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) data = np.random.normal(size=(1, 3, 10, 11)) data_t = np.transpose(data, [0, 2, 3, 1]) res1 = model1.predict(data) res2 = model2.predict(data_t) res2_t = np.transpose(res2, [0, 3, 1, 2]) self.assertAllClose(res1, res2_t)
[docs]class KerasSimilarityTests(tf.test.TestCase):
[docs] def test_attributes(self): l = Similarity(num_instances=5, similarity_function='L1', strides=[2, 3], blocks=[3, 2], padding='VALID', normalization_term=False, normalization_term_fudge=1.0, ignore_nan_input=True, out_of_bounds_value=1.0, input_shape=(3, 40, 40)) model = keras.models.Sequential([l]) model.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) op = l.op.op # type: tf.Operation self.assertEqual(op.get_attr('blocks'), [3, 2]) self.assertEqual(op.get_attr('strides'), [2, 3]) self.assertEqual(op.get_attr('padding'), [0, 0]) self.assertEqual(op.get_attr('normalization_term'), False) self.assertEqual(op.get_attr('ignore_nan_input'), True) self.assertEqual(op.get_attr('similarity_function'), b'L1') self.assertNear(op.get_attr('normalization_term_fudge'), 1.0, 0.001) self.assertEqual(op.get_attr('out_of_bounds_value'), 1.0)
def _run_shape_test(self, num_instances, padding, strides, blocks, input_shape, output_shape): l = Similarity(num_instances=num_instances, similarity_function='L1', strides=strides, blocks=blocks, padding=padding, normalization_term=False, normalization_term_fudge=1.0, ignore_nan_input=True, out_of_bounds_value=1.0, input_shape=input_shape) model = keras.models.Sequential([l]) model.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) output = l.op # type: tf.Tensor self.assertEqual(output.get_shape().as_list()[1:], list(output_shape))
[docs] def test_shapes(self): self._run_shape_test(10, [0, 1], [1, 1], [2, 2], (3, 10, 13), (10, 9, 14)) self._run_shape_test(10, [1, 1], [3, 2], [2, 2], (3, 10, 13), (10, 4, 7)) self._run_shape_test(2, [1, 1], [3, 2], [2, 2], (1, 10, 13), (2, 4, 7))
[docs] def test_channels_last(self): with self.test_session(): l1 = Similarity(num_instances=3, padding='VALID', strides=[2, 2], blocks=[1, 1], templates_initializer='ones', weights_initializer='ones', input_shape=(3, 10, 11)) l2 = Similarity(num_instances=3, padding='VALID', strides=[2,2], blocks=[1,1], templates_initializer='ones', weights_initializer='ones', channels_last=True, input_shape=(10, 11, 3)) model1 = keras.models.Sequential([l1]) model2 = keras.models.Sequential([l2]) model1.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) model2.compile(optimizer='adam', loss=lambda a, b: tf.constant([0], tf.float32)) data = np.random.normal(size=(1, 3, 10, 11)) data_t = np.transpose(data, [0, 2, 3, 1]) res1 = model1.predict(data) res2 = model2.predict(data_t) res2_t = np.transpose(res2, [0, 3, 1, 2]) self.assertAllClose(res1, res2_t)