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.

Layers.Convolution.Test.cs 6.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Tensorflow.NumPy;
  3. using static Tensorflow.KerasApi;
  4. namespace Tensorflow.Keras.UnitTest.Layers
  5. {
  6. [TestClass]
  7. public class LayersConvolutionTest : EagerModeTestBase
  8. {
  9. [TestMethod]
  10. public void BasicConv1D()
  11. {
  12. var filters = 8;
  13. var conv = keras.layers.Conv1D(filters, kernel_size: 3, activation: "linear");
  14. var x = np.arange(256.0f).reshape((8, 8, 4));
  15. var y = conv.Apply(x);
  16. Assert.AreEqual(y.shape, (8, 6, 8));
  17. Assert.AreEqual(filters, y.shape[2]);
  18. }
  19. [TestMethod]
  20. public void BasicConv1D_ksize()
  21. {
  22. var filters = 8;
  23. var conv = keras.layers.Conv1D(filters, kernel_size: 3, activation: "linear");
  24. var x = np.arange(256.0f).reshape((8, 8, 4));
  25. var y = conv.Apply(x);
  26. Assert.AreEqual(3, y.shape.ndim);
  27. Assert.AreEqual(x.dims[0], y.shape[0]);
  28. Assert.AreEqual(x.dims[1] - 2, y.shape[1]);
  29. Assert.AreEqual(filters, y.shape[2]);
  30. }
  31. [TestMethod]
  32. public void BasicConv1D_ksize_same()
  33. {
  34. var filters = 8;
  35. var conv = keras.layers.Conv1D(filters, kernel_size: 3, padding: "same", activation: "linear");
  36. var x = np.arange(256.0f).reshape((8, 8, 4));
  37. var y = conv.Apply(x);
  38. Assert.AreEqual(3, y.shape.ndim);
  39. Assert.AreEqual(x.dims[0], y.shape[0]);
  40. Assert.AreEqual(x.dims[1], y.shape[1]);
  41. Assert.AreEqual(filters, y.shape[2]);
  42. }
  43. [TestMethod]
  44. public void BasicConv1D_ksize_strides()
  45. {
  46. var filters = 8;
  47. var conv = keras.layers.Conv1D(filters, kernel_size: 3, strides: 2, activation: "linear");
  48. var x = np.arange(256.0f).reshape((8, 8, 4));
  49. var y = conv.Apply(x);
  50. Assert.AreEqual(3, y.shape.ndim);
  51. Assert.AreEqual(x.dims[0], y.shape[0]);
  52. Assert.AreEqual(x.dims[1] - 5, y.shape[1]);
  53. Assert.AreEqual(filters, y.shape[2]);
  54. }
  55. [TestMethod]
  56. public void BasicConv1D_ksize_dilations()
  57. {
  58. var filters = 8;
  59. var conv = keras.layers.Conv1D(filters, kernel_size: 3, dilation_rate: 2, activation: "linear");
  60. var x = np.arange(256.0f).reshape((8, 8, 4));
  61. var y = conv.Apply(x);
  62. Assert.AreEqual(3, y.shape.ndim);
  63. Assert.AreEqual(x.dims[0], y.shape[0]);
  64. Assert.AreEqual(x.dims[1] - 4, y.shape[1]);
  65. Assert.AreEqual(filters, y.shape[2]);
  66. }
  67. [TestMethod]
  68. public void BasicConv1D_ksize_dilation_same()
  69. {
  70. var filters = 8;
  71. var conv = keras.layers.Conv1D(filters, kernel_size: 3, dilation_rate: 2, padding: "same", activation: "linear");
  72. var x = np.arange(256.0f).reshape((8, 8, 4));
  73. var y = conv.Apply(x);
  74. Assert.AreEqual(3, y.shape.ndim);
  75. Assert.AreEqual(x.dims[0], y.shape[0]);
  76. Assert.AreEqual(x.dims[1], y.shape[1]);
  77. Assert.AreEqual(filters, y.shape[2]);
  78. }
  79. [TestMethod]
  80. public void BasicConv2D()
  81. {
  82. var filters = 8;
  83. var conv = keras.layers.Conv2D(filters, activation: "linear");
  84. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  85. var y = conv.Apply(x);
  86. Assert.AreEqual(4, y.shape.ndim);
  87. Assert.AreEqual(x.dims[0], y.shape[0]);
  88. Assert.AreEqual(x.dims[1] - 4, y.shape[1]);
  89. Assert.AreEqual(x.dims[2] - 4, y.shape[2]);
  90. Assert.AreEqual(filters, y.shape[3]);
  91. }
  92. [TestMethod]
  93. public void BasicConv2D_ksize()
  94. {
  95. var filters = 8;
  96. var conv = keras.layers.Conv2D(filters, kernel_size: 3, activation: "linear");
  97. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  98. var y = conv.Apply(x);
  99. Assert.AreEqual(4, y.shape.ndim);
  100. Assert.AreEqual(x.dims[0], y.shape[0]);
  101. Assert.AreEqual(x.dims[1] - 2, y.shape[1]);
  102. Assert.AreEqual(x.dims[2] - 2, y.shape[2]);
  103. Assert.AreEqual(filters, y.shape[3]);
  104. }
  105. [TestMethod]
  106. public void BasicConv2D_ksize_same()
  107. {
  108. var filters = 8;
  109. var conv = keras.layers.Conv2D(filters, kernel_size: 3, padding: "same", activation: "linear");
  110. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  111. var y = conv.Apply(x);
  112. Assert.AreEqual(4, y.shape.ndim);
  113. Assert.AreEqual(x.dims[0], y.shape[0]);
  114. Assert.AreEqual(x.dims[1], y.shape[1]);
  115. Assert.AreEqual(x.dims[2], y.shape[2]);
  116. Assert.AreEqual(filters, y.shape[3]);
  117. }
  118. [TestMethod]
  119. public void BasicConv2D_ksize_strides()
  120. {
  121. var filters = 8;
  122. var conv = keras.layers.Conv2D(filters, kernel_size: 3, strides: 2, activation: "linear");
  123. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  124. var y = conv.Apply(x);
  125. Assert.AreEqual(4, y.shape.ndim);
  126. Assert.AreEqual(x.dims[0], y.shape[0]);
  127. Assert.AreEqual(x.dims[1] - 5, y.shape[1]);
  128. Assert.AreEqual(x.dims[2] - 5, y.shape[2]);
  129. Assert.AreEqual(filters, y.shape[3]);
  130. }
  131. [TestMethod]
  132. public void BasicConv2D_ksize_dilation()
  133. {
  134. var filters = 8;
  135. var conv = keras.layers.Conv2D(filters, kernel_size: 3, dilation_rate: 2, activation: "linear");
  136. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  137. var y = conv.Apply(x);
  138. Assert.AreEqual(4, y.shape.ndim);
  139. Assert.AreEqual(x.dims[0], y.shape[0]);
  140. Assert.AreEqual(x.dims[1] - 4, y.shape[1]);
  141. Assert.AreEqual(x.dims[2] - 4, y.shape[2]);
  142. Assert.AreEqual(filters, y.shape[3]);
  143. }
  144. [TestMethod]
  145. public void BasicConv2D_ksize_dilation_same()
  146. {
  147. var filters = 8;
  148. var conv = keras.layers.Conv2D(filters, kernel_size: 3, dilation_rate: 2, padding: "same", activation: "linear");
  149. var x = np.arange(256.0f).reshape((1, 8, 8, 4));
  150. var y = conv.Apply(x);
  151. Assert.AreEqual(4, y.shape.ndim);
  152. Assert.AreEqual(x.dims[0], y.shape[0]);
  153. Assert.AreEqual(x.dims[1], y.shape[1]);
  154. Assert.AreEqual(x.dims[2], y.shape[2]);
  155. Assert.AreEqual(filters, y.shape[3]);
  156. }
  157. }
  158. }