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_convolution.py 8.6 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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 tensorlayer as tl
  7. from tests.utils import CustomTestCase
  8. class Layer_Convolution_1D_Test(CustomTestCase):
  9. @classmethod
  10. def setUpClass(self):
  11. self.batch_size = 8
  12. self.inputs_shape = [self.batch_size, 100, 1]
  13. self.input_layer = tl.layers.Input(self.inputs_shape, name='input_layer')
  14. self.conv1dlayer1 = tl.layers.Conv1d(in_channels=1, n_filter=32, filter_size=5, stride=2)
  15. self.n1 = self.conv1dlayer1(self.input_layer)
  16. self.conv1dlayer2 = tl.layers.Conv1d(in_channels=32, n_filter=32, filter_size=5, stride=2)
  17. self.n2 = self.conv1dlayer2(self.n1)
  18. self.dconv1dlayer1 = tl.layers.DeConv1d(n_filter=64, in_channels=32, filter_size=5, name='deconv1dlayer')
  19. self.n3 = self.dconv1dlayer1(self.n2)
  20. self.separableconv1d1 = tl.layers.SeparableConv1d(in_channels=1, n_filter=16, filter_size=3, stride=2)
  21. self.n4 = self.separableconv1d1(self.input_layer)
  22. self.separableconv1d2 = tl.layers.SeparableConv1d(
  23. in_channels=1, n_filter=16, filter_size=3, stride=2, depth_multiplier=4
  24. )
  25. self.n5 = self.separableconv1d2(self.input_layer)
  26. self.separableconv1d3 = tl.layers.SeparableConv1d(
  27. in_channels=1, n_filter=16, filter_size=3, stride=2, depth_multiplier=4, b_init=None
  28. )
  29. self.n6 = self.separableconv1d3(self.input_layer)
  30. @classmethod
  31. def tearDownClass(self):
  32. pass
  33. def test_layer_n1(self):
  34. self.assertEqual(len(self.conv1dlayer1.all_weights), 2)
  35. self.assertEqual(tl.get_tensor_shape(self.n1), [self.batch_size, 50, 32])
  36. def test_layer_n2(self):
  37. self.assertEqual(len(self.conv1dlayer2.all_weights), 2)
  38. self.assertEqual(tl.get_tensor_shape(self.n2), [self.batch_size, 25, 32])
  39. def test_layer_n3(self):
  40. self.assertEqual(len(self.dconv1dlayer1.all_weights), 2)
  41. self.assertEqual(tl.get_tensor_shape(self.n3), [self.batch_size, 25, 64])
  42. def test_layer_n4(self):
  43. self.assertEqual(len(self.separableconv1d1.all_weights), 3)
  44. self.assertEqual(tl.get_tensor_shape(self.n4), [self.batch_size, 50, 16])
  45. def test_layer_n5(self):
  46. self.assertEqual(len(self.separableconv1d2.all_weights), 3)
  47. self.assertEqual(tl.get_tensor_shape(self.n5), [self.batch_size, 50, 16])
  48. def test_layer_n6(self):
  49. self.assertEqual(len(self.separableconv1d3.all_weights), 2)
  50. self.assertEqual(tl.get_tensor_shape(self.n6), [self.batch_size, 50, 16])
  51. class Layer_Convolution_2D_Test(CustomTestCase):
  52. @classmethod
  53. def setUpClass(self):
  54. self.batch_size = 5
  55. self.inputs_shape = [self.batch_size, 400, 400, 3]
  56. self.input_layer = tl.layers.Input(self.inputs_shape, name='input_layer')
  57. self.conv2dlayer1 = tl.layers.Conv2d(
  58. n_filter=32, in_channels=3, strides=(2, 2), filter_size=(5, 5), padding='SAME',
  59. b_init=tl.initializers.truncated_normal(0.01), name='conv2dlayer'
  60. )
  61. self.n1 = self.conv2dlayer1(self.input_layer)
  62. self.conv2dlayer2 = tl.layers.Conv2d(
  63. n_filter=32, in_channels=32, filter_size=(3, 3), strides=(2, 2), act=None, name='conv2d'
  64. )
  65. self.n2 = self.conv2dlayer2(self.n1)
  66. self.conv2dlayer3 = tl.layers.Conv2d(
  67. in_channels=32, n_filter=32, filter_size=(3, 3), strides=(2, 2), act=tl.ReLU, b_init=None,
  68. name='conv2d_no_bias'
  69. )
  70. self.n3 = self.conv2dlayer3(self.n2)
  71. self.dconv2dlayer = tl.layers.DeConv2d(
  72. n_filter=32, in_channels=32, filter_size=(5, 5), strides=(2, 2), name='deconv2dlayer'
  73. )
  74. self.n4 = self.dconv2dlayer(self.n3)
  75. self.dwconv2dlayer = tl.layers.DepthwiseConv2d(
  76. in_channels=32, filter_size=(3, 3), strides=(1, 1), dilation_rate=(2, 2), act=tl.ReLU, depth_multiplier=2,
  77. name='depthwise'
  78. )
  79. self.n5 = self.dwconv2dlayer(self.n4)
  80. self.separableconv2d = tl.layers.SeparableConv2d(
  81. in_channels=3, filter_size=(3, 3), strides=(2, 2), dilation_rate=(2, 2), act=tl.ReLU, depth_multiplier=3,
  82. name='separableconv2d'
  83. )
  84. self.n6 = self.separableconv2d(self.input_layer)
  85. self.groupconv2d = tl.layers.GroupConv2d(
  86. in_channels=3, n_filter=18, filter_size=(3, 3), strides=(2, 2), dilation_rate=(3, 3), n_group=3,
  87. act=tl.ReLU, name='groupconv2d'
  88. )
  89. self.n7 = self.groupconv2d(self.input_layer)
  90. self.binaryconv2d = tl.layers.BinaryConv2d(
  91. in_channels=3, n_filter=32, filter_size=(3, 3), strides=(2, 2), dilation_rate=(2, 2), act=tl.ReLU,
  92. name='binaryconv2d'
  93. )
  94. self.n8 = self.binaryconv2d(self.input_layer)
  95. self.dorefaconv2d = tl.layers.DorefaConv2d(
  96. bitA=2, bitW=8, in_channels=3, n_filter=16, filter_size=(3, 3), strides=(2, 2), dilation_rate=(2, 2),
  97. act=tl.ReLU, name='dorefaconv2d'
  98. )
  99. self.n9 = self.dorefaconv2d(self.input_layer)
  100. @classmethod
  101. def tearDownClass(cls):
  102. pass
  103. # tf.reset_default_graph()
  104. def test_layer_n1(self):
  105. self.assertEqual(len(self.conv2dlayer1.all_weights), 2)
  106. self.assertEqual(tl.get_tensor_shape(self.n1), [self.batch_size, 200, 200, 32])
  107. def test_layer_n2(self):
  108. self.assertEqual(len(self.conv2dlayer2.all_weights), 2)
  109. self.assertEqual(tl.get_tensor_shape(self.n2), [self.batch_size, 100, 100, 32])
  110. def test_layer_n3(self):
  111. self.assertEqual(len(self.conv2dlayer3.all_weights), 1) # b_init is None
  112. self.assertEqual(tl.get_tensor_shape(self.n3), [self.batch_size, 50, 50, 32])
  113. def test_layer_n4(self):
  114. self.assertEqual(len(self.dconv2dlayer.all_weights), 2)
  115. self.assertEqual(tl.get_tensor_shape(self.n4), [self.batch_size, 100, 100, 32])
  116. def test_layer_n5(self):
  117. self.assertEqual(len(self.dwconv2dlayer.all_weights), 2)
  118. self.assertEqual(tl.get_tensor_shape(self.n5), [self.batch_size, 100, 100, 64])
  119. def test_layer_n6(self):
  120. self.assertEqual(len(self.separableconv2d.all_weights), 3)
  121. self.assertEqual(tl.get_tensor_shape(self.n6), [self.batch_size, 198, 198, 32])
  122. def test_layer_n7(self):
  123. self.assertEqual(len(self.groupconv2d.all_weights), 2)
  124. self.assertEqual(tl.get_tensor_shape(self.n7), [self.batch_size, 200, 200, 18])
  125. def test_layer_n8(self):
  126. self.assertEqual(len(self.binaryconv2d.all_weights), 2)
  127. self.assertEqual(tl.get_tensor_shape(self.n8), [self.batch_size, 198, 198, 32])
  128. def test_layer_n9(self):
  129. self.assertEqual(len(self.dorefaconv2d.all_weights), 2)
  130. self.assertEqual(tl.get_tensor_shape(self.n9), [self.batch_size, 200, 200, 16])
  131. class Layer_Convolution_3D_Test(CustomTestCase):
  132. @classmethod
  133. def setUpClass(self):
  134. print("\n#################################")
  135. self.batch_size = 5
  136. self.inputs_shape = [self.batch_size, 20, 20, 20, 3]
  137. self.input_layer = tl.layers.Input(self.inputs_shape, name='input_layer')
  138. self.conv3dlayer1 = tl.layers.Conv3d(n_filter=32, in_channels=3, filter_size=(2, 2, 2), strides=(2, 2, 2))
  139. self.n1 = self.conv3dlayer1(self.input_layer)
  140. self.deconv3dlayer = tl.layers.DeConv3d(n_filter=128, in_channels=32, filter_size=(2, 2, 2), strides=(2, 2, 2))
  141. self.n2 = self.deconv3dlayer(self.n1)
  142. self.conv3dlayer2 = tl.layers.Conv3d(
  143. n_filter=64, in_channels=128, filter_size=(3, 3, 3), strides=(3, 3, 3), act=tl.ReLU, b_init=None,
  144. name='conv3d_no_bias'
  145. )
  146. self.n3 = self.conv3dlayer2(self.n2)
  147. @classmethod
  148. def tearDownClass(self):
  149. pass
  150. def test_layer_n1(self):
  151. self.assertEqual(len(self.conv3dlayer1.all_weights), 2)
  152. self.assertEqual(tl.get_tensor_shape(self.n1), [self.batch_size, 10, 10, 10, 32])
  153. def test_layer_n2(self):
  154. self.assertEqual(len(self.deconv3dlayer.all_weights), 2)
  155. self.assertEqual(tl.get_tensor_shape(self.n2), [self.batch_size, 20, 20, 20, 128])
  156. def test_layer_n3(self):
  157. self.assertEqual(len(self.conv3dlayer2.all_weights), 1) # b_init is None
  158. self.assertEqual(tl.get_tensor_shape(self.n3), [self.batch_size, 7, 7, 7, 64])
  159. if __name__ == '__main__':
  160. tl.logging.set_verbosity(tl.logging.DEBUG)
  161. unittest.main()

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