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.

CApi.Eager.Variables.cs 2.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using System;
  3. using Tensorflow;
  4. using Tensorflow.Eager;
  5. using Buffer = System.Buffer;
  6. namespace TensorFlowNET.UnitTest.Eager
  7. {
  8. public partial class CApiEagerTest
  9. {
  10. /// <summary>
  11. /// TEST(CAPI, Variables)
  12. /// </summary>
  13. [TestMethod]
  14. public unsafe void Variables()
  15. {
  16. using var status = c_api.TF_NewStatus();
  17. var opts = TFE_NewContextOptions();
  18. var ctx = TFE_NewContext(opts, status);
  19. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  20. TFE_DeleteContextOptions(opts);
  21. var var_handle = CreateVariable(ctx, 12.0f, status);
  22. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  23. var op = TFE_NewOp(ctx, "ReadVariableOp", status);
  24. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  25. TFE_OpSetAttrType(op, "dtype", TF_FLOAT);
  26. TFE_OpAddInput(op, var_handle, status);
  27. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  28. int num_retvals = 1;
  29. var value_handle = new[] { IntPtr.Zero };
  30. TFE_Execute(op, value_handle, ref num_retvals, status);
  31. TFE_DeleteOp(op);
  32. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  33. ASSERT_EQ(1, num_retvals);
  34. EXPECT_EQ(TF_FLOAT, TFE_TensorHandleDataType(value_handle[0]));
  35. EXPECT_EQ(0, TFE_TensorHandleNumDims(value_handle[0], status));
  36. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  37. var value = 0f; // new float[1];
  38. var t = TFE_TensorHandleResolve(value_handle[0], status);
  39. ASSERT_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  40. ASSERT_EQ(sizeof(float), (int)TF_TensorByteSize(t));
  41. memcpy(&value, TF_TensorData(t).ToPointer(), sizeof(float));
  42. c_api.TF_DeleteTensor(t);
  43. EXPECT_EQ(12.0f, value);
  44. TFE_DeleteTensorHandle(var_handle);
  45. TFE_DeleteTensorHandle(value_handle[0]);
  46. TFE_DeleteContext(ctx);
  47. CHECK_EQ(TF_OK, TF_GetCode(status), TF_Message(status));
  48. }
  49. }
  50. }