在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
機器學習(機器學習)已經透過促進智能決策和自動化,革新了從醫療到金融的各種行業。 TensorFlow,Google 的開源機器學習和深度學習框架,一直在這場革命的前沿。 使用 TensorFlow.NET
,.NET 開發人員可以在 C# 生態系統中利用 TensorFlow 的強大功能。 在本文中,我們將探討 TensorFlow.NET
、其特性、優勢以及在 C# 開發中的實際應用。 此外,我們將透過一個實用範例,學習來自 Iron Software 的 PDF 生成庫 IronPDF。
TensorFlow.NET
是 TensorFlow 的 .NET 綁定,允許開發者直接在 C# 和 .NET 應用程式層中使用 TensorFlow 功能。 由社群開發並由 SciSharp 組織維護,TensorFlow.NET
提供了 TensorFlow 的機器學習和神經網路功能與 .NET 平台多功能性之間的無縫整合。 它使 C# 開發人員可以建立神經網路、訓練模型或訓練圖像,並使用 TensorFlow 的廣泛系統 API 和工具部署機器學習模型。
TensorFlow 相容性:TensorFlow.NET
提供與 TensorFlow 的 API 和操作的全相容性,包括張量操作或啟動、神經網路層、損失函數、優化器,以及用於數據預處理和評估的工具。
高性能:TensorFlow.NET
利用 TensorFlow 高效的計算圖執行引擎和優化的內核,在 CPU 和 GPU 上提供高性能的機器學習推理和訓練。
輕鬆整合:TensorFlow.NET
無縫整合到現有的 .NET 應用程式和程式庫中,讓開發人員能夠在不脫離熟悉的 C# 開發環境下,充分運用 TensorFlow 的功能。
模型可移植性:TensorFlow.NET
允許開發人員導入預訓練的 TensorFlow 模型,並將訓練好的模型匯出,以便在其他基於 TensorFlow 的環境中推理,例如 Python 或行動設備。
靈活性和可擴展性:TensorFlow.NET
提供了使用C#語言功能(如LINQ)來自訂和擴展機器學習模型的靈活性。(語言集成查詢)用於數據操縱和模型組成的函數式編程範式。
TensorFlow.NET
得益於活躍的貢獻者社群,提供文件、教程和範例,協助開發者使用 TensorFlow 在 C# 界開始機器學習之旅。讓我們來探討一些實際情境,在這些情境中可以使用 TensorFlow.NET
來建構和部署 C# 的機器學習模型:
// Load a pre-trained TensorFlow model
var model = TensorFlowModel.LoadModel("model.pb");
// Perform inference on input data
var input = new float[,] { { 1.0f, 2.0f, 3.0f } };
var output = model.Predict(input);
// Load a pre-trained TensorFlow model
var model = TensorFlowModel.LoadModel("model.pb");
// Perform inference on input data
var input = new float[,] { { 1.0f, 2.0f, 3.0f } };
var output = model.Predict(input);
' Load a pre-trained TensorFlow model
Dim model = TensorFlowModel.LoadModel("model.pb")
' Perform inference on input data
Dim input = New Single(, ) {
{ 1.0F, 2.0F, 3.0F }
}
Dim output = model.Predict(input)
// Create a neural network model using TensorFlow.NET APIs and metrics
var input = new Input(Shape.Scalar);
var output = new Dense(1, Activation.ReLU).Forward(input);
// Compile the model with loss function and optimizer algorithms
var model = new Model(input, output);
model.Compile(optimizer: new SGD(), loss: Losses.MeanSquaredError);
// Train the model with training data just like Python
model.Fit(x_train, y_train, epochs: 10, batchSize: 32);
// Create a neural network model using TensorFlow.NET APIs and metrics
var input = new Input(Shape.Scalar);
var output = new Dense(1, Activation.ReLU).Forward(input);
// Compile the model with loss function and optimizer algorithms
var model = new Model(input, output);
model.Compile(optimizer: new SGD(), loss: Losses.MeanSquaredError);
// Train the model with training data just like Python
model.Fit(x_train, y_train, epochs: 10, batchSize: 32);
IRON VB CONVERTER ERROR developers@ironsoftware.com
// Evaluate the trained model on test data
var evaluation = model.Evaluate(x_test, y_test);
// Export the trained model for deployment
model.SaveModel("trained_model.pb");
// Evaluate the trained model on test data
var evaluation = model.Evaluate(x_test, y_test);
// Export the trained model for deployment
model.SaveModel("trained_model.pb");
IRON VB CONVERTER ERROR developers@ironsoftware.com
更多有關 TensorFlow 的範例可以在TensorFlow.NET 範例頁面。
// static Tensorflow
using static Tensorflow.Binding;
namespace IronPdfDemos
{
public class TensorFlow
{
public static void Execute()
{
var hello = tf.constant("Hello, TensorFlow!");
Console.WriteLine(hello);
}
}
}
// static Tensorflow
using static Tensorflow.Binding;
namespace IronPdfDemos
{
public class TensorFlow
{
public static void Execute()
{
var hello = tf.constant("Hello, TensorFlow!");
Console.WriteLine(hello);
}
}
}
' static Tensorflow
Imports Tensorflow.Binding
Namespace IronPdfDemos
Public Class TensorFlow
Public Shared Sub Execute()
Dim hello = tf.constant("Hello, TensorFlow!")
Console.WriteLine(hello)
End Sub
End Class
End Namespace
範例 Hello TensorFlow 輸出
無縫整合:TensorFlow.NET
將 TensorFlow 的強大功能帶入 .NET 生態系統,使 C# 開發人員能夠在其應用程序中利用先進的機器學習技術和算法。
性能和可擴展性:TensorFlow.NET
利用 TensorFlow 的優化執行引擎提供高性能的機器學習計算,使其適合處理大規模數據集、測試圖像以及複雜或密集模型。
熟悉的開發環境:TensorFlow.NET
API 允許開發人員使用熟悉的 C# 語言特性和開發工具來構建和部署機器學習模型,從而降低在 C# 應用中採用機器學習的學習曲線。
互操作性和可移植性:TensorFlow.NET
促進與其他基於 TensorFlow 的環境的互操作,實現 C# 基於的機器學習模型與 Python、TensorFlow Serving 和 TensorFlow Lite 的無縫整合。
TensorFlow.NET
受益於活躍的貢獻者和使用者社群,他們為專案提供支持、反饋和貢獻,確保其不斷成長和改進。這是一個開源的 Apache 授權套件,可以免費使用。 更多關於授權的資訊可以在此閱讀TensorFlow.NET 授權頁面。
IronPDF
是一個功能強大的 C# PDF 庫,允許開發人員直接從 HTML、CSS、圖片和 JavaScript 輸入創建、編輯和簽署 PDF 文件。 這是一個商業級解決方案,具有高性能和低內存佔用。 以下是一些主要功能:
HTML 到 PDF 轉換:IronPDF
可以將 HTML 文件、HTML 字串和 URL 轉換為 PDF。 例如,您可以使用 Chrome PDF 渲染器將網頁渲染為 PDF。
跨平台支持: IronPDF
運行於各種 .NET 平台,包括 .NET Core、.NET Standard 和 .NET Framework。 它兼容 Windows、Linux 和 macOS。
編輯和簽署:您可以設置屬性,添加安全性(密碼和權限),甚至在您的 PDF 中應用數位簽名。
頁面模板和設定:自訂您的PDF,新增頁首、頁尾和頁碼,並調整邊距。 IronPDF
也支持響應式佈局和自訂紙張大小。
IronPDF
遵循 PDF 標準,如 PDF/A 和 PDF/UA。 它支持 UTF-8 字符編碼並處理圖像、CSS 和字體等資產。首先,創建一個 Visual Studio 專案並選擇下面的控制台應用程式模板。
提供專案名稱和位置。
在下一步選擇所需的 .NET 版本,然後點擊“建立”按鈕。
從 Visual Studio 套件管理器的 NuGet 套件中安裝 IronPDF
。
安裝套件 TensorFlow.NET
和 TensorFlow.Keras
,這是用於運行模型的獨立套件。
using IronPdf;
using static Tensorflow.Binding;
namespace IronPdfDemos
{
public class Program
{
public static void Main()
{
// Instantiate Cache and ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Prepare HTML
var content = "<h1>Demonstrate TensorFlow with IronPDF</h1>";
content += $"<p></p>";
content += $"<h2></h2>";
// Eager mode
content += $"<h2>Enable Eager Execution</h2>";
content += $"<p>tf.enable_eager_execution();</p>";
// tf is a static TensorFlow instance
tf.enable_eager_execution(); // Enable eager mode
content += $"<h2>Define tensor constants.</h2>";
// Introduce tensor constants
var a = tf.constant(5);
var b = tf.constant(6);
var c = tf.constant(7);
content += $"<p></p>";
content += $"<p></p>";
content += $"<p></p>";
content += $"<h2>Various tensor operations.</h2>";
// Various tensor operations usage
// Note: Tensors also support operators (+, *, ...)
var add = tf.add(a, b);
var sub = tf.subtract(a, b);
var mul = tf.multiply(a, b);
var div = tf.divide(a, b);
content += $"<p>var add = tf.add(a, b);</p>";
content += $"<p>var sub = tf.subtract(a, b);</p>";
content += $"<p>var mul = tf.multiply(a, b);</p>";
content += $"<p>var div = tf.divide(a, b);</p>";
content += $"<h2>Access tensors value.</h2>";
// Tensors value
print($"{(int)a} + {(int)b} = {(int)add}");
print($"{(int)a} - {(int)b} = {(int)sub}");
print($"{(int)a} * {(int)b} = {(int)mul}");
print($"{(int)a} / {(int)b} = {(double)div}");
content += $"<p>{(int)a} + {(int)b} = {(int)add}</p>";
content += $"<p>{(int)a} - {(int)b} = {(int)sub}</p>";
content += $"<p>{(int)a} * {(int)b} = {(int)mul}</p>";
content += $"<p>{(int)a} / {(int)b} = {(double)div}</p>";
// Some more operations
var mean = tf.reduce_mean(tf.constant(new[] { a, b, c }));
var sum = tf.reduce_sum(tf.constant(new[] { a, b, c }));
content += $"<h2>Access tensors value.</h2>";
// Access tensors value
print("mean =", mean.numpy());
print("sum =", sum.numpy());
content += $"<p>mean = {mean.numpy()}</p>";
content += $"<p>sum = {sum.numpy()}</p>";
content += $"<h2>Matrix multiplications.</h2>";
// Matrix multiplications with a single row
var matrix1 = tf.constant(new float[,] { { 1, 2 }, { 3, 4 } });
var matrix2 = tf.constant(new float[,] { { 5, 6 }, { 7, 8 } });
var product = tf.matmul(matrix1, matrix2);
content += "<p>matrix1 = tf.constant(new float[,] { { { 1, 2 }}, { { 3, 4 }} })</p>";
content += "<p>matrix2 = tf.constant(new float[,] { { { 5, 6 }}, { { 7, 8 }} })</p>";
content += "<p>product = tf.matmul(matrix1, matrix2)</p>";
content += $"<h2>Convert Tensor to Numpy.</h2>";
// Convert Tensor to Numpy
print("product =", product.numpy());
content += $"<p>product = {product.numpy()}</p>";
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf(content);
// Export to a file or Stream
pdf.SaveAs("tensorflow.pdf");
}
}
}
using IronPdf;
using static Tensorflow.Binding;
namespace IronPdfDemos
{
public class Program
{
public static void Main()
{
// Instantiate Cache and ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Prepare HTML
var content = "<h1>Demonstrate TensorFlow with IronPDF</h1>";
content += $"<p></p>";
content += $"<h2></h2>";
// Eager mode
content += $"<h2>Enable Eager Execution</h2>";
content += $"<p>tf.enable_eager_execution();</p>";
// tf is a static TensorFlow instance
tf.enable_eager_execution(); // Enable eager mode
content += $"<h2>Define tensor constants.</h2>";
// Introduce tensor constants
var a = tf.constant(5);
var b = tf.constant(6);
var c = tf.constant(7);
content += $"<p></p>";
content += $"<p></p>";
content += $"<p></p>";
content += $"<h2>Various tensor operations.</h2>";
// Various tensor operations usage
// Note: Tensors also support operators (+, *, ...)
var add = tf.add(a, b);
var sub = tf.subtract(a, b);
var mul = tf.multiply(a, b);
var div = tf.divide(a, b);
content += $"<p>var add = tf.add(a, b);</p>";
content += $"<p>var sub = tf.subtract(a, b);</p>";
content += $"<p>var mul = tf.multiply(a, b);</p>";
content += $"<p>var div = tf.divide(a, b);</p>";
content += $"<h2>Access tensors value.</h2>";
// Tensors value
print($"{(int)a} + {(int)b} = {(int)add}");
print($"{(int)a} - {(int)b} = {(int)sub}");
print($"{(int)a} * {(int)b} = {(int)mul}");
print($"{(int)a} / {(int)b} = {(double)div}");
content += $"<p>{(int)a} + {(int)b} = {(int)add}</p>";
content += $"<p>{(int)a} - {(int)b} = {(int)sub}</p>";
content += $"<p>{(int)a} * {(int)b} = {(int)mul}</p>";
content += $"<p>{(int)a} / {(int)b} = {(double)div}</p>";
// Some more operations
var mean = tf.reduce_mean(tf.constant(new[] { a, b, c }));
var sum = tf.reduce_sum(tf.constant(new[] { a, b, c }));
content += $"<h2>Access tensors value.</h2>";
// Access tensors value
print("mean =", mean.numpy());
print("sum =", sum.numpy());
content += $"<p>mean = {mean.numpy()}</p>";
content += $"<p>sum = {sum.numpy()}</p>";
content += $"<h2>Matrix multiplications.</h2>";
// Matrix multiplications with a single row
var matrix1 = tf.constant(new float[,] { { 1, 2 }, { 3, 4 } });
var matrix2 = tf.constant(new float[,] { { 5, 6 }, { 7, 8 } });
var product = tf.matmul(matrix1, matrix2);
content += "<p>matrix1 = tf.constant(new float[,] { { { 1, 2 }}, { { 3, 4 }} })</p>";
content += "<p>matrix2 = tf.constant(new float[,] { { { 5, 6 }}, { { 7, 8 }} })</p>";
content += "<p>product = tf.matmul(matrix1, matrix2)</p>";
content += $"<h2>Convert Tensor to Numpy.</h2>";
// Convert Tensor to Numpy
print("product =", product.numpy());
content += $"<p>product = {product.numpy()}</p>";
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf(content);
// Export to a file or Stream
pdf.SaveAs("tensorflow.pdf");
}
}
}
Imports IronPdf
Imports Tensorflow.Binding
Namespace IronPdfDemos
Public Class Program
Public Shared Sub Main()
' Instantiate Cache and ChromePdfRenderer
Dim renderer = New ChromePdfRenderer()
' Prepare HTML
Dim content = "<h1>Demonstrate TensorFlow with IronPDF</h1>"
content &= $"<p></p>"
content &= $"<h2></h2>"
' Eager mode
content &= $"<h2>Enable Eager Execution</h2>"
content &= $"<p>tf.enable_eager_execution();</p>"
' tf is a static TensorFlow instance
tf.enable_eager_execution() ' Enable eager mode
content &= $"<h2>Define tensor constants.</h2>"
' Introduce tensor constants
Dim a = tf.constant(5)
Dim b = tf.constant(6)
Dim c = tf.constant(7)
content &= $"<p></p>"
content &= $"<p></p>"
content &= $"<p></p>"
content &= $"<h2>Various tensor operations.</h2>"
' Various tensor operations usage
' Note: Tensors also support operators (+, *, ...)
Dim add = tf.add(a, b)
Dim [sub] = tf.subtract(a, b)
Dim mul = tf.multiply(a, b)
Dim div = tf.divide(a, b)
content &= $"<p>var add = tf.add(a, b);</p>"
content &= $"<p>var sub = tf.subtract(a, b);</p>"
content &= $"<p>var mul = tf.multiply(a, b);</p>"
content &= $"<p>var div = tf.divide(a, b);</p>"
content &= $"<h2>Access tensors value.</h2>"
' Tensors value
print($"{CInt(a)} + {CInt(b)} = {CInt(add)}")
print($"{CInt(a)} - {CInt(b)} = {CInt([sub])}")
print($"{CInt(a)} * {CInt(b)} = {CInt(mul)}")
print($"{CInt(a)} / {CInt(b)} = {CDbl(div)}")
content &= $"<p>{CInt(a)} + {CInt(b)} = {CInt(add)}</p>"
content &= $"<p>{CInt(a)} - {CInt(b)} = {CInt([sub])}</p>"
content &= $"<p>{CInt(a)} * {CInt(b)} = {CInt(mul)}</p>"
content &= $"<p>{CInt(a)} / {CInt(b)} = {CDbl(div)}</p>"
' Some more operations
Dim mean = tf.reduce_mean(tf.constant( { a, b, c }))
Dim sum = tf.reduce_sum(tf.constant( { a, b, c }))
content &= $"<h2>Access tensors value.</h2>"
' Access tensors value
print("mean =", mean.numpy())
print("sum =", sum.numpy())
content &= $"<p>mean = {mean.numpy()}</p>"
content &= $"<p>sum = {sum.numpy()}</p>"
content &= $"<h2>Matrix multiplications.</h2>"
' Matrix multiplications with a single row
Dim matrix1 = tf.constant(New Single(, ) {
{ 1, 2 },
{ 3, 4 }
})
Dim matrix2 = tf.constant(New Single(, ) {
{ 5, 6 },
{ 7, 8 }
})
Dim product = tf.matmul(matrix1, matrix2)
content &= "<p>matrix1 = tf.constant(new float[,] { { { 1, 2 }}, { { 3, 4 }} })</p>"
content &= "<p>matrix2 = tf.constant(new float[,] { { { 5, 6 }}, { { 7, 8 }} })</p>"
content &= "<p>product = tf.matmul(matrix1, matrix2)</p>"
content &= $"<h2>Convert Tensor to Numpy.</h2>"
' Convert Tensor to Numpy
print("product =", product.numpy())
content &= $"<p>product = {product.numpy()}</p>"
' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf(content)
' Export to a file or Stream
pdf.SaveAs("tensorflow.pdf")
End Sub
End Class
End Namespace
讓我們分解這段代碼:
導入語句:
代碼首先通過導入必要的庫開始。 具體來說:
using IronPdf; // This imports the IronPDF package, which is used for working with PDF files.
using static Tensorflow.Binding; // This imports the TensorFlow library, specifically the .NET standard binding.
using IronPdf; // This imports the IronPDF package, which is used for working with PDF files.
using static Tensorflow.Binding; // This imports the TensorFlow library, specifically the .NET standard binding.
IRON VB CONVERTER ERROR developers@ironsoftware.com
急需執行:
該行 tf.enable_eager_execution()
;` 啟用 TensorFlow 的動態執行模式。 在即時執行中,運算會立即被評估,這使得除錯和與張量交互更加容易。
定義張量常數:
該程式碼定義了三個張量常數:a
、b
和 c
。 這些分別被初始化為 5、6 和 7。
各種張量運算:
以下張量運算將執行:
var add = tf.add(a, b); // Adds a and b.
var sub = tf.subtract(a, b); // Subtracts b from a.
var mul = tf.multiply(a, b); // Multiplies a and b.
var div = tf.divide(a, b); // Divides a by b.
var add = tf.add(a, b); // Adds a and b.
var sub = tf.subtract(a, b); // Subtracts b from a.
var mul = tf.multiply(a, b); // Multiplies a and b.
var div = tf.divide(a, b); // Divides a by b.
IRON VB CONVERTER ERROR developers@ironsoftware.com
存取 Tensor 值:
張量運算的結果使用 print
函數列印:
print($"{(int)a} + {(int)b} = {(int)add}");
print($"{(int)a} - {(int)b} = {(int)sub}");
print($"{(int)a} * {(int)b} = {(int)mul}");
print($"{(int)a} / {(int)b} = {(double)div}");
print($"{(int)a} + {(int)b} = {(int)add}");
print($"{(int)a} - {(int)b} = {(int)sub}");
print($"{(int)a} * {(int)b} = {(int)mul}");
print($"{(int)a} / {(int)b} = {(double)div}");
IRON VB CONVERTER ERROR developers@ironsoftware.com
範例輸出:
其他操作:
該程式碼計算常數的平均值和總和[a,b,c]
.
PDF 產生:
ChromePdfRenderer
和 RenderHtmlAsPdf
從 IronPDF
用來將 HTML 字串轉換成 PDF 文件。
IronPDF
需要許可證才能運行。 有關授權的更多資訊可以在IronPDF 授權頁面。 在 appSettings.json
文件中放置密钥,如下所示。
{
"IronPdf.License.LicenseKey": "The Key Here"
}
總之,TensorFlow.NET
讓 C# 開發者能夠利用 .NET 生態系統的多樣性和生產力來探索機器學習和人工智慧的世界。 無論您是在構建智能應用程序、預測分析工具,還是自動化決策系統,TensorFlow.NET
提供了一個強大且靈活的框架,用於在 C# 中釋放機器學習的潛力。 配合 Iron Software
的 IronPDF
庫,開發者可以獲得高級技能來開發現代應用程式。