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.

TensorOperate.cs 3.6 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using NumSharp;
  3. using System.Linq;
  4. using static Tensorflow.Binding;
  5. namespace TensorFlowNET.UnitTest.ManagedAPI
  6. {
  7. [TestClass]
  8. public class TensorOperate
  9. {
  10. [TestMethod, Ignore]
  11. public void TransposeTest()
  12. {
  13. // https://www.tensorflow.org/api_docs/python/tf/transpose#for_example_2
  14. var x = tf.constant(new int[,] {
  15. { 1, 2, 3 },
  16. { 4, 5, 6 }
  17. });
  18. var transpose_x = tf.transpose(x);
  19. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 1, 4 }, transpose_x[0].numpy().ToArray<int>()));
  20. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 2, 5 }, transpose_x[1].numpy().ToArray<int>()));
  21. Assert.IsTrue(Enumerable.SequenceEqual(new int[] { 3, 6 }, transpose_x[2].numpy().ToArray<int>()));
  22. var a = tf.constant(np.array(new[, , ,] { { { { 1, 11, 2, 22 } }, { { 3, 33, 4, 44 } } },
  23. { { { 5, 55, 6, 66 } }, { { 7, 77, 8, 88 } } } }));
  24. var b = tf.transpose(a, new[] { 3, 1, 2, 0 });
  25. var transpose_a = tf.constant(np.array(new[, , ,] { { { { 1, 5 } }, { { 3, 7 } } },
  26. { { { 11, 55 } }, { { 33, 77 } } }, { { { 2, 6 } }, { { 4, 8 } } },
  27. { { { 22, 66 } }, { { 44, 88 } } } }));
  28. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 4, 2, 1, 2 }, b.shape));
  29. Assert.IsTrue(Enumerable.SequenceEqual(transpose_a.numpy().ToArray<int>(), b.numpy().ToArray<int>()));
  30. }
  31. [TestMethod]
  32. public void InitTensorTest()
  33. {
  34. var a = tf.constant(np.array(new[, ,]
  35. {
  36. { { 1 }, { 2 }, { 3 } },
  37. { { 4 }, { 5 }, { 6 } }
  38. }));
  39. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2, 3, 1 }, a.shape));
  40. var b = tf.constant(new[, ,]
  41. {
  42. { { 1 }, { 2 }, { 3 } },
  43. { { 4 }, { 5 }, { 6 } }
  44. });
  45. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2, 3, 1 }, b.shape));
  46. }
  47. [TestMethod]
  48. public void ConcatTest()
  49. {
  50. var a = tf.constant(new[,] { { 1, 2 }, { 3, 4 } });
  51. var b = tf.constant(new[,] { { 5, 6 }, { 7, 8 } });
  52. var c = tf.constant(new[,] { { 9, 10 }, { 11, 12 } });
  53. var concatValue = tf.concat(new[] { a, b, c }, axis: 0);
  54. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 6, 2 }, concatValue.shape));
  55. }
  56. [TestMethod]
  57. public void ConcatDoubleTest()
  58. {
  59. var a = tf.constant(new[,] { { 1.0, 2.0 }, { 3.0, 4.0 } });
  60. var b = tf.constant(new[,] { { 5.0, 6.0 }, { 7.0, 8.0 } });
  61. var c = tf.constant(new[,] { { 9.0, 10.0 }, { 11.0, 12.0 } });
  62. var concatValue = tf.concat(new[] { a, b, c }, axis: 0);
  63. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 6, 2 }, concatValue.shape));
  64. }
  65. [TestMethod]
  66. public void ConcatAndSplitTest()
  67. {
  68. var a = tf.constant(new[,] { { 1, 2 }, { 3, 4 } });
  69. var b = tf.constant(new[,] { { 5, 6 }, { 7, 8 } });
  70. var c = tf.constant(new[,] { { 9, 10 }, { 11, 12 } });
  71. var value = tf.concat(new[] { a, b, c }, axis: 0);
  72. var splitValue = tf.split(value, 3, axis: 0);
  73. Assert.AreEqual(3, splitValue.Length);
  74. Assert.IsTrue(Enumerable.SequenceEqual(new[] { 2, 2 }, splitValue[0].shape));
  75. }
  76. }
  77. }