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.

SessionTest.cs 3.1 kB

6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using NumSharp;
  3. using System;
  4. using System.Collections.Generic;
  5. using Tensorflow;
  6. using static Tensorflow.Binding;
  7. namespace TensorFlowNET.UnitTest
  8. {
  9. [TestClass]
  10. public class SessionTest : CApiTest
  11. {
  12. /// <summary>
  13. /// tensorflow\c\c_api_test.cc
  14. /// `TEST(CAPI, Session)`
  15. /// </summary>
  16. [TestMethod]
  17. public void Session()
  18. {
  19. var s = new Status();
  20. var graph = new Graph();
  21. // Make a placeholder operation.
  22. var feed = c_test_util.Placeholder(graph, s);
  23. // Make a constant operation with the scalar "2".
  24. var two = c_test_util.ScalarConst(2, graph, s);
  25. // Add operation.
  26. var add = c_test_util.Add(feed, two, graph, s);
  27. var csession = new CSession(graph, s);
  28. ASSERT_EQ(TF_Code.TF_OK, s.Code);
  29. // Run the graph.
  30. var inputs = new Dictionary<Operation, Tensor>();
  31. inputs.Add(feed, new Tensor(3));
  32. csession.SetInputs(inputs);
  33. var outputs = new TF_Output[] { new TF_Output(add, 0) };
  34. csession.SetOutputs(outputs);
  35. csession.Run(s);
  36. Tensor outTensor = csession.output_tensor(0);
  37. EXPECT_EQ(TF_DataType.TF_INT32, outTensor.dtype);
  38. EXPECT_EQ(0, outTensor.NDims);
  39. ASSERT_EQ((ulong)sizeof(uint), outTensor.bytesize);
  40. var output_contents = outTensor.ToArray<int>();
  41. EXPECT_EQ(3 + 2, output_contents[0]);
  42. // Add another operation to the graph.
  43. var neg = c_test_util.Neg(add, graph, s);
  44. ASSERT_EQ(TF_Code.TF_OK, s.Code);
  45. // Run up to the new operation.
  46. inputs = new Dictionary<Operation, Tensor>();
  47. inputs.Add(feed, new Tensor(7));
  48. csession.SetInputs(inputs);
  49. outputs = new TF_Output[] { new TF_Output(neg, 0) };
  50. csession.SetOutputs(outputs);
  51. csession.Run(s);
  52. ASSERT_EQ(TF_Code.TF_OK, s.Code);
  53. outTensor = csession.output_tensor(0);
  54. ASSERT_TRUE(outTensor != IntPtr.Zero);
  55. EXPECT_EQ(TF_DataType.TF_INT32, outTensor.dtype);
  56. EXPECT_EQ(0, outTensor.NDims); // scalar
  57. ASSERT_EQ((ulong)sizeof(uint), outTensor.bytesize);
  58. output_contents = outTensor.ToArray<int>();
  59. EXPECT_EQ(-(7 + 2), output_contents[0]);
  60. // Clean up
  61. csession.CloseAndDelete(s);
  62. ASSERT_EQ(TF_Code.TF_OK, s.Code);
  63. }
  64. [TestMethod]
  65. public void EvalTensor()
  66. {
  67. var a = constant_op.constant(np.array(3.0).reshape(1, 1));
  68. var b = constant_op.constant(np.array(2.0).reshape(1, 1));
  69. var c = math_ops.matmul(a, b, name: "matmul");
  70. using (var sess = tf.Session())
  71. {
  72. var result = c.eval(sess);
  73. Assert.AreEqual(6, result.Data<double>()[0]);
  74. }
  75. }
  76. }
  77. }