يوفر TensorFlow.delphi (TF.Delphi) ربطًا قياسيًا لـ Delphi (Pascal) لـ TensorFlow و Keras. ويهدف إلى تنفيذ واجهة برمجة تطبيقات TensorFlow الكاملة في Delphi والتي تتيح لمطوري Pascal تطوير وتدريب ونشر نماذج التعلم الآلي مع Pascal Delphi (النقل إلى Free Pascal في المستقبل).
يعتمد Master Branch على TensorFlow V2.11. لا يوجد محرك بيثون أو التثبيت المطلوب .
القصد من ذلك هو جلب تقنية علوم البيانات الشائعة إلى عالم دلفي وتوفير مطوري .Delphi/Pascal مع مجموعة أداة تعليمية قوية دون إعادة اختراع العجلة. نظرًا لأن واجهات برمجة التطبيقات متشابهة قدر الإمكان ، يمكنك على الفور تكييف أي رمز TensorFlow الموجود في Delphi مع منحنى التعلم الصفري. ألقِ نظرة على صورة المقارنة وشاهد كيف يترجم نص Tensorflow/Python بشكل مريح إلى برنامج Delphi مع TensorFlow.delphi.


أمثلة keras:


تسمح الفلسفة بعدد كبير من رمز التعلم الآلي المكتوب في Python بسرعة إلى Delphi ، مما يمكّن مطوري Delphi/Pascal من استخدام نماذج التعلم الآلي المتطورة والوصول إلى عدد كبير من موارد Tensorflow التي لن تكون ممكنة بدون هذا المشروع.
يقوم TensorFlow.delphi أيضًا بتنفيذ واجهة برمجة تطبيقات 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