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.8 kB

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