Entw.: Tensorflow mit Delphi (4)
In diesem Artikel wird eine höhere Delphi-API nach Tensorflow vorgestellt. Diese API basiert auf die im vorherigen Artikel vorgestellte Low-Level-API und wird wiederum mit DUnitX getestet. Dies ermöglicht einen automatisierten Schnelltest bei Tensorflow-Versionswechsel. Am Ende dieser Seite finden Sie das komplette Delphi-Projekt des Testprogramms und die Delphi-API für die Tensorflow-Version 1.3.
Test der höhere Delphi-API mit DUnitX
Der folgende Delphi-Source zeigt einen Ausschnitt des Testprogramms. Man erkennt wieviel einfacher die Anwendung dieser höheren Delphi-API gegenüber der Low-Level-API ist.
procedure TDApiTest.Test_SumWithAddN; var i: Integer; array_int1, array_int2, array_int3: TArray<Integer>; values: TArray<Integer>; ten_array1, ten_array2, ten_array3: TFTensor; s: TFSession; g: TFGraph; a, b, c: TFOutput; res: TFTensor; val: TValue; ten_a, ten_b: TFTensor; addN: TFOutput; inputs: TArray<TFOutput>; dim1, dim2: TF_int64_t; begin WriteLog(TLogLevel.Information,'Execute TDApiTest.Test_SumWithAddN'); // TFMMEnv.StartMM; // s := TFSession.Create(); // <- The session implicitly creates the graph, get it. with s do begin g := s.Graph; // a := g.OpConst(_T(44)); b := g.OpConst(_T(21)); c := g.OpConst(_T(33)); SetLength(inputs,3); inputs[0] := a; inputs[1] := b; inputs[2] := c; addN := g.OpAddN(inputs); // res := s.GetRunner().Run(addN); // val := res.Value; Assert.AreEqual(98, val.AsInteger, 'Assertion failed: sum(44,21,33)<>98'); end; s.Free; // s := TFSession.Create(); // <- The session implicitly creates the graph, get it. with s do begin g := s.Graph; // array_int1 := [1,2,3]; ten_array1:= _T(array_int1); array_int2 := [6,7,8]; ten_array2:= _T(array_int2); a := g.OpConst(ten_array1); b := g.OpConst(ten_array2); SetLength(inputs,2); inputs[0] := a; inputs[1] := b; addN := g.OpAddN(inputs); // res := s.GetRunner().Run(addN); // if res.IsArray(dim1,dim2) then begin res.GetArray(values); Assert.AreEqual( 7, values[0], 'Assertion failed: sum([1,2,3],[6,7,8])<>[7,9,11]'); Assert.AreEqual( 9, values[1], 'Assertion failed: sum([1,2,3],[6,7,8])<>[7,9,11]'); Assert.AreEqual(11, values[2], 'Assertion failed: sum([1,2,3],[6,7,8])<>[7,9,11]'); end else Assert.IsTrue(False, 'Assertion failed: Is not an Array!'); end; s.Free; // s := TFSession.Create(); // <- The session implicitly creates the graph, get it. with s do begin g := s.Graph; // array_int1 := [1,10,100]; ten_array1:= _T(array_int1); array_int2 := [2,11,101]; ten_array2:= _T(array_int2); array_int3 := [3,12,102]; ten_array3:= _T(array_int3); a := g.OpConst(ten_array1); b := g.OpConst(ten_array2); c := g.OpConst(ten_array3); SetLength(inputs,3); inputs[0] := a; inputs[1] := b; inputs[2] := c; addN := g.OpAddN(inputs); // res := s.GetRunner().Run(addN); // if res.IsArray(dim1,dim2) then begin res.GetArray(values); Assert.AreEqual( 6, values[0], 'Assertion failed: sum([1,10,100],[2,11,101],[3,12,102])<>[6,33,303]'); Assert.AreEqual( 33, values[1], 'Assertion failed: sum([1,10,100],[2,11,101],[3,12,102])<>[6,33,303]'); Assert.AreEqual(303, values[2], 'Assertion failed: sum([1,10,100],[2,11,101],[3,12,102])<>[6,33,303]'); end else Assert.IsTrue(False, 'Assertion failed: Is not an Array!'); end; s.Free; // TFMMEnv.EndMM; // // MemoryLeaks Assert.Pass; end;
Die komplette Testumgebung mit der höheren Delphi-API finden Sie in meiner Github-Repository .
Copyright © 03.10.2017 hadv.de. All Rights Reserved.