You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_layers_spatial_transformer.py 2.8 kB

4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import unittest
  5. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
  6. import tensorflow as tf
  7. import tensorlayer as tl
  8. from tests.utils import CustomTestCase
  9. def model(x, is_train, reuse):
  10. with tf.variable_scope("STN", reuse=reuse):
  11. nin = tl.layers.InputLayer(x, name='in')
  12. ## 1. Localisation network
  13. # use MLP as the localisation net
  14. nt = tl.layers.FlattenLayer(nin, name='flatten')
  15. nt = tl.layers.DenseLayer(nt, n_units=20, act=tf.nn.tanh, name='dense1')
  16. nt = tl.layers.DropoutLayer(nt, keep=0.8, is_fix=True, is_train=is_train, name='drop1')
  17. # you can also use CNN instead for MLP as the localisation net
  18. # nt = Conv2d(nin, 16, (3, 3), (2, 2), act=tf.ops.relu, padding='SAME', name='tc1')
  19. # nt = Conv2d(nt, 8, (3, 3), (2, 2), act=tf.ops.relu, padding='SAME', name='tc2')
  20. ## 2. Spatial transformer module (sampler)
  21. n = tl.layers.SpatialTransformer2dAffineLayer(nin, theta_layer=nt, out_size=(40, 40), name='spatial')
  22. s = n
  23. ## 3. Classifier
  24. n = tl.layers.Conv2d(
  25. n, n_filter=16, filter_size=(3, 3), strides=(2, 2), act=tf.nn.relu, padding='SAME', name='conv1'
  26. )
  27. n = tl.layers.Conv2d(
  28. n, n_filter=16, filter_size=(3, 3), strides=(2, 2), act=tf.nn.relu, padding='SAME', name='conv2'
  29. )
  30. n = tl.layers.FlattenLayer(n, name='flatten2')
  31. n = tl.layers.DenseLayer(n, n_units=1024, act=tf.nn.relu, name='out1')
  32. n = tl.layers.DenseLayer(n, n_units=10, name='out2')
  33. return n, s
  34. class Layer_Spatial_Transformer_Test(CustomTestCase):
  35. @classmethod
  36. def setUpClass(cls):
  37. cls.x = tf.placeholder(tf.float32, shape=[None, 28, 28, 1])
  38. net, s = model(cls.x, is_train=True, reuse=False)
  39. net.print_layers()
  40. net.print_params(False)
  41. cls.s_shape = s.outputs.get_shape().as_list()
  42. cls.net_layers = net.all_layers
  43. cls.net_params = net.all_params
  44. cls.net_n_params = net.count_params()
  45. @classmethod
  46. def tearDownClass(cls):
  47. tf.reset_default_graph()
  48. def test_reuse(self):
  49. with self.assertNotRaises(Exception):
  50. _, _ = model(self.x, is_train=True, reuse=True)
  51. def test_net_shape(self):
  52. self.assertEqual(self.s_shape[1:], [40, 40, 1])
  53. def test_net_layers(self):
  54. self.assertEqual(len(self.net_layers), 10)
  55. def test_net_params(self):
  56. self.assertEqual(len(self.net_params), 12)
  57. def test_net_n_params(self):
  58. self.assertEqual(self.net_n_params, 1667980)
  59. if __name__ == '__main__':
  60. tf.logging.set_verbosity(tf.logging.DEBUG)
  61. tl.logging.set_verbosity(tl.logging.DEBUG)
  62. unittest.main()

TensorLayer3.0 是一款兼容多种深度学习框架为计算后端的深度学习库。计划兼容TensorFlow, Pytorch, MindSpore, Paddle.