Tensorflow.delphi (TF.Delphi) menyediakan pengikatan standar Delphi (Pascal) untuk TensorFlow dan Keras. Ini bertujuan untuk mengimplementasikan TensorFlow API lengkap di Delphi yang memungkinkan pengembang Pascal untuk mengembangkan, melatih dan menggunakan model pembelajaran mesin dengan Pascal Delphi (porting ke Pascal gratis di masa depan).
Cabang Master didasarkan pada TensorFlow v2.11. Tidak diperlukan mesin python atau instalasi .
Maksudnya adalah untuk membawa teknologi sains data populer ke dunia Delphi dan untuk menyediakan. Delphi/Pascal Developers dengan alat pembelajaran mesin yang kuat diatur tanpa menciptakan kembali roda. Karena API disimpan serupa mungkin, Anda dapat segera mengadaptasi kode TensorFlow yang ada di Delphi dengan kurva pembelajaran nol. Lihatlah gambar perbandingan dan lihat betapa nyamannya skrip TensorFlow/Python diterjemahkan ke dalam program Delphi dengan TensorFlow.delphi.


Contoh Keras:


Filsafat memungkinkan sejumlah besar kode pembelajaran mesin yang ditulis dalam Python dengan cepat dimigrasi ke Delphi, memungkinkan pengembang Delphi/Pascal untuk menggunakan model pembelajaran mesin canggih dan mengakses sejumlah besar sumber daya tensorflow yang tidak mungkin tanpa proyek ini.
TensorFlow.delphi juga mengimplementasikan API tingkat tinggi TensorFlow di mana semua keajaiban terjadi. Lapisan pembangunan grafik perhitungan ini masih dalam pengembangan aktif. Setelah sepenuhnya diimplementasikan, Anda dapat membangun model pembelajaran mesin baru di Delphi-Pascal.
Sebagai kode referensi yang saya gunakan
Tesorflow.net
Tensorflow Python
Regresi linier dalam mode 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 ;Kompatibel dengan semua versi Delphi yang mendukung variabel inline (10.3 dan lebih tinggi).
Untuk mengkompilasi Anda memerlukan beberapa pustaka eksternal:
Merasa ingin berkontribusi pada salah satu proyek terpanas di bidang pembelajaran mesin? Ingin tahu bagaimana TensorFlow secara ajaib membuat grafik komputasi? Kami menghargai setiap kontribusi namun kecil. Ada tugas untuk para pemula untuk para ahli, jika semua orang hanya menangani tugas kecil, jumlah kontribusi akan sangat besar.
Anda bisa:
Ikuti kami di Twitter