tensorflow.delphi (tf.delphi) ให้การผูกมาตรฐาน Delphi (Pascal) สำหรับ TensorFlow และ Keras มันมีจุดมุ่งหมายที่จะใช้ TensorFlow API ที่สมบูรณ์ใน Delphi ซึ่งช่วยให้นักพัฒนา Pascal สามารถพัฒนาฝึกอบรมและปรับใช้โมเดลการเรียนรู้ของเครื่องด้วย Pascal Delphi (พอร์ตไปยัง Pascal ฟรีในอนาคต)
สาขาหลักขึ้นอยู่กับ Tensorflow v2.11 ไม่จำเป็นต้องใช้เครื่องยนต์ Python หรือการติดตั้ง
ความตั้งใจ คือการนำเทคโนโลยีวิทยาศาสตร์ข้อมูลยอดนิยมเข้ามาในโลก Delphi และเพื่อให้นักพัฒนา. Delphi/Pascal ด้วยเครื่องมือการเรียนรู้ของเครื่องจักรที่ทรงพลังโดยไม่ต้องสร้างวงล้อใหม่ เนื่องจาก APIs ถูกเก็บไว้ให้ใกล้เคียงกันที่สุดคุณสามารถปรับรหัสเทนเซอร์โฟลว์ที่มีอยู่ได้ทันทีใน Delphi ด้วยเส้นโค้งการเรียนรู้ที่เป็นศูนย์ ดูภาพเปรียบเทียบและดูว่าสคริปต์ TensorFlow/Python ได้รับการแปลเป็นโปรแกรม Delphi ด้วย tensorflow.delphi อย่างไร


ตัวอย่าง Keras:


ปรัชญาช่วยให้รหัสการเรียนรู้ของเครื่องจักรเป็นจำนวนมากที่เขียนใน Python ได้รับการย้ายไปยัง Delphi อย่างรวดเร็วทำให้นักพัฒนา Delphi/Pascal ใช้รูปแบบการเรียนรู้ของเครื่องที่ทันสมัยและเข้าถึงทรัพยากร tensorflow จำนวนมากซึ่งจะไม่สามารถทำได้หากไม่มีโครงการนี้
tensorflow.delphi ยังใช้ API ระดับสูงของ Tensorflow ที่เวทมนตร์ทั้งหมดเกิดขึ้น เลเยอร์การสร้างกราฟการคำนวณนี้ยังอยู่ระหว่างการพัฒนาที่ใช้งานอยู่ เมื่อมีการใช้งานอย่างสมบูรณ์คุณสามารถสร้างรูปแบบการเรียนรู้ของเครื่องใหม่ใน Delphi-Pascal
เป็นรหัสอ้างอิงที่ฉันใช้
tesorflow.net
Tensorflow Python
การถดถอยเชิงเส้นในโหมด Graph :
function LinearRegression.Run (mmo1: TMemo): Boolean;
begin
tf.compat.v1.disable_eager_execution;
PrepareData;
// tf Graph Input
var X : TTensor := tf.placeholder(tf.float32_t);
var Y : TTensor := tf.placeholder(tf.float32_t);
// Set model weights
// We can set a fixed init value in order to debug
// var rnd1 = rng.randn<float>();
// var rnd2 = rng.randn<float>();
var W := tf.Variable(Single(- 0.06 ), ' weight ' );
var b := tf.Variable(Single(- 0.73 ), ' bias ' );
// Construct a linear model
var pred : TTensor := tf.add(tf.multiply(X, W), b);
// var pred1 := (X * W) + b; OK
// Mean squared error
var cost := TTensor(tf.reduce_sum(tf. pow (pred - Y, 2.0 ))) / ( 2.0 * n_samples) ;
// Gradient descent
// Note, minimize() knows to modify W and b because Variable objects are trainable=True by default
var optimizer := tf.train.GradientDescentOptimizer(learning_rate).minimize(cost);
// Initialize the variables (i.e. assign their default value)
var init := tf.global_variables_initializer;
// Start training
var sess := tf.Session;
// Run the initializer
sess.run(init);
// Fit all training data
var epoch: Integer ;
for epoch := 0 to training_epochs - 1 do
begin
for var zItem in TUtils.zip<Single>(train_X, train_Y) do
begin
var v_x : Single := zItem.Value1 ;
var v_y : Single := zItem.Value2 ;
sess.run(optimizer, [ Tuple<TValue,TValue>.Create(X, v_x), Tuple<TValue,TValue>.Create(Y, v_y) ]);
end ;
// Display logs per epoch step
if ((epoch + 1 ) mod display_step) = 0 then
begin
var fc : Single := NDArray(sess.run(cost, [ Tuple<TValue,TValue>.Create(X, train_X), Tuple<TValue,TValue>.Create(Y, train_Y) ]));
var fW : Single := NDArray(sess.run( TResourceVariable(W) ));
var fb : Single := NDArray(sess.run( TResourceVariable(b) ));
mmo1.Lines.Add( Format( ' Epoch: %d cost=%.9f + "W=%.9f b=%.9f" ' ,[epoch + 1 ,fc, fW,fb]) );
end ;
end ;
mmo1.Lines.Add( ' Optimization Finished! ' );
var training_cost : Single := NDArray(sess.run(cost, [ Tuple<TValue,TValue>.Create(X, train_X), Tuple<TValue,TValue>.Create(Y, train_Y) ]));
var fW : Single := NDArray(sess.run( TResourceVariable(W) ));
var fb : Single := NDArray(sess.run( TResourceVariable(b) ));
mmo1.Lines.Add( ' ' );
mmo1.Lines.Add(Format( ' Training cost=%.9f W=%.9f b=%.9f ' ,[training_cost, fW, fb]));
// Testing example
var test_X : NDArray := np.np_array( TArray<Single>.Create( 6.83 , 4.668 , 8.9 , 7.91 , 5.7 , 8.7 , 3.1 , 2.1 ) );
var test_Y : NDArray := np.np_array( TArray<Single>.Create( 1.84 , 2.273 , 3.2 , 2.831 , 2.92 , 3.24 , 1.35 , 1.03 ) );
mmo1.Lines.Add( ' Testing... (Mean square loss Comparison) ' );
var t_cost := TTensor(tf.reduce_sum(tf. pow (pred - Y, 2.0 ))) / ( 2.0 * test_X.shape[ 0 ]) ;
var testing_cost : Single := NDArray(sess.run(t_cost, [ Tuple<TValue,TValue>.Create(X, test_X), Tuple<TValue,TValue>.Create(Y, test_Y) ]));
mmo1.Lines.Add( ' ' );
mmo1.Lines.Add( Format( ' Testing cost=%.9f ' ,[testing_cost]) );
var diff := Abs( training_cost - testing_cost);
mmo1.Lines.Add( Format( ' Absolute mean square loss difference: %.9f ' ,[diff]) );
mmo1.Lines.Add( ' ' );
Result := diff < 0.01 ;
end ;เข้ากันได้กับเวอร์ชัน Delphi ทั้งหมดที่รองรับตัวแปรแบบอินไลน์ (10.3 และสูงกว่า)
ในการรวบรวมคุณต้องมีไลบรารีภายนอก:
รู้สึกอยากมีส่วนร่วมกับหนึ่งในโครงการที่ร้อนแรงที่สุดในสาขาการเรียนรู้ของเครื่อง? ต้องการทราบว่า TensorFlow สร้างกราฟการคำนวณอย่างน่าอัศจรรย์ได้อย่างไร? เราขอขอบคุณทุกการบริจาค แต่มีขนาดเล็ก มีงานสำหรับมือใหม่ให้กับผู้เชี่ยวชาญเหมือนกันหากทุกคนจัดการกับงานเล็ก ๆ น้อย ๆ ผลรวมของการบริจาคจะมีขนาดใหญ่มาก
คุณสามารถ:
ติดตามเราบน Twitter