Tensorflow.delphi (tf.delphi)는 Tensorflow 및 Keras에 대한 델파이 (Pascal) 표준 결합을 제공합니다. Pascal 개발자가 Pascal Delphi (미래에 Pascal을 무료로 포팅)로 기계 학습 모델을 개발, 훈련 및 배포 할 수있는 Delphi에서 완전한 Tensorflow API를 구현하는 것을 목표로합니다.
마스터 브랜치는 텐서 플로우 v2.11을 기반으로합니다. 파이썬 엔진이나 설치가 필요하지 않습니다 .
의도 는 인기있는 데이터 과학 기술을 델파이 세계에 가져오고 .Delphi/Pascal 개발자에게 휠을 재창조하지 않고 강력한 기계 학습 도구 세트를 제공하는 것입니다. API는 가능한 한 유사하게 유지되므로 학습 곡선이 제로로 델파이의 기존 텐서 플로우 코드를 즉시 적응할 수 있습니다. 비교 그림을 살펴보고 Tensorflow/Python 스크립트가 Tensorflow.delphi의 델파이 프로그램으로 얼마나 편안하게 번역되는지 확인하십시오.


케라 예제 :


철학을 통해 Python으로 작성된 많은 머신 러닝 코드는 Delphi로 빠르게 마이그레이션 될 수 있으므로 Delphi/Pascal 개발자가 최첨단 머신 러닝 모델을 사용 하고이 프로젝트 없이는 불가능할 수없는 수많은 텐서 플로 리소스에 액세스 할 수 있습니다.
Tensorflow.delphi는 또한 모든 마법이 발생하는 곳에서 Tensorflow의 높은 수준 API를 구현합니다. 이 계산 그래프 빌딩 레이어는 여전히 활발한 개발 중입니다. 완전히 구현되면 Delphi-Pascal에서 새로운 기계 학습 모델을 구축 할 수 있습니다.
내가 사용한 참조 코드로서
tesorflow.net
텐서 플로우 파이썬
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 ;인라인 변수 (10.3 이상)를 지원하는 모든 델파이 버전과 호환됩니다.
컴파일하려면 외부 라이브러리가 필요합니다.
기계 학습 분야에서 가장 인기있는 프로젝트 중 하나에 기여하고 싶습니까? 텐서 플로우가 어떻게 마술처럼 계산 그래프를 생성하는지 알고 싶으십니까? 우리는 모든 기여에 감사드립니다. 모든 사람이 작은 과제 만 다루면 전문가에게 초보자에게는 과제가 있습니다.
당신은 할 수 있습니다 :
트위터에서 우리를 따르십시오