激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - C# - 如何使用C#將Tensorflow訓練的.pb文件用在生產環境詳解

如何使用C#將Tensorflow訓練的.pb文件用在生產環境詳解

2022-03-05 17:14bbird2018 C#

這篇文章主要給大家介紹了關于如何使用C#將Tensorflow訓練的.pb文件用在生產環境的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧

前言

TensorFlow是Google開源的一款人工智能學習系統。為什么叫這個名字呢?Tensor的意思是張量,代表N維數組;Flow的意思是流,代表基于數據流圖的計算。把N維數字從流圖的一端流動到另一端的過程,就是人工智能神經網絡進行分析和處理的過程。

訓練了很久的Tf模型,終于要到生產環境中去考研一番了。今天花費了一些時間去研究tf的模型如何在生產環境中去使用。大概整理了這些方法。

繼續使用分步驟保存了的ckpt文件

這個貌似脫離不了tensorflow框架,而且生成的ckpt文件比較大,發布到生產環境的時候,還得把python的算法文件一起搞上去,如何和其他程序交互,可能還得自己去寫服務。估計很少有人這么做,貌似性能也很一般。

使用tensorflow Serving

tf Serving貌似是大家都比較推崇的方法。需要編譯tfServing,然后把模型導出來。直接執行tf Serving的進程,就可以對外提供服務了。具體調用的時候,還得自己寫客戶端,使用人gRPC去調用Serving,然后再對外提供服務,聽上去比較麻煩。而且我今天沒太多的時間去研究gRPC,網絡上關于客戶端很多都是用python寫的,我感覺自己的python水平比較菜,沒信心能寫好。所以這個方式就先沒研究。

生產.pb文件,然后寫程序去調用.pb文件

生成了.pb文件以后,就可以被程序去直接調用,傳入參數,然后就可以傳出來參數,而且生成的.pb文件非常的小。而我又有比較豐富的.net開發經驗。在想,是否可以用C#來解析.pb文件,然后做一個.net core的對外服務的API,這樣貌似更加高效,關鍵是自己熟悉這款的開發,不用花費太多的時間去摸索。、

具體的思路

使用.net下面的TensorFlow框架tensorflowSharp(貌似還是沒脫離了框架).去調用pb文件,然后做成.net core web API 對外提供服務。

具體的實現

直接上代碼,非常簡單,本身設計到tensorflowsharp的地方非常的少

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var graph = new TFGraph();
//重點是下面的這句,把訓練好的pb文件給讀出來字節,然后導入
var model = File.ReadAllBytes(model_file);
graph.Import(model);
 
Console.WriteLine("請輸入一個圖片的地址");
var src = Console.ReadLine();
var tensor = ImageUtil.CreateTensorFromImageFile(src);
 
using (var sess = new TFSession(graph))
{
var runner = sess.GetRunner();
runner.AddInput(graph["Cast_1"][0], tensor);
var r = runner.Run(graph.softmax(graph["softmax_linear/softmax_linear"][0]));
var v = (float[,])r.GetValue();
Console.WriteLine(v[0,0]);
Console.WriteLine(v[0, 1]);
}

ImageUtil這個類庫是tensorflowSharp官方的例子中一個把圖片轉成tensor的類庫,我直接copy過來了,根據我的網絡,修改了幾個參數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public static class ImageUtil
{
public static TFTensor CreateTensorFromImageFile(byte[] contents, TFDataType destinationDataType = TFDataType.Float)
{
var tensor = TFTensor.CreateString(contents);
 
TFOutput input, output;
 
// Construct a graph to normalize the image
using (var graph = ConstructGraphToNormalizeImage(out input, out output, destinationDataType))
{
// Execute that graph to normalize this one image
using (var session = new TFSession(graph))
{
var normalized = session.Run(
inputs: new[] { input },
inputValues: new[] { tensor },
outputs: new[] { output });
 
return normalized[0];
}
}
}
// Convert the image in filename to a Tensor suitable as input to the Inception model.
public static TFTensor CreateTensorFromImageFile(string file, TFDataType destinationDataType = TFDataType.Float)
{
var contents = File.ReadAllBytes(file);
 
// DecodeJpeg uses a scalar String-valued tensor as input.
var tensor = TFTensor.CreateString(contents);
 
TFOutput input, output;
 
// Construct a graph to normalize the image
using (var graph = ConstructGraphToNormalizeImage(out input, out output, destinationDataType))
{
// Execute that graph to normalize this one image
using (var session = new TFSession(graph))
{
var normalized = session.Run(
inputs: new[] { input },
inputValues: new[] { tensor },
outputs: new[] { output });
 
return normalized[0];
}
}
}
 
// The inception model takes as input the image described by a Tensor in a very
// specific normalized format (a particular image size, shape of the input tensor,
// normalized pixel values etc.).
//
// This function constructs a graph of TensorFlow operations which takes as
// input a JPEG-encoded string and returns a tensor suitable as input to the
// inception model.
private static TFGraph ConstructGraphToNormalizeImage(out TFOutput input, out TFOutput output, TFDataType destinationDataType = TFDataType.Float)
{
// Some constants specific to the pre-trained model at:
// https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
//
// - The model was trained after with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
 
const int W = 128;
const int H = 128;
const float Mean = 0;
const float Scale = 1f;
 
var graph = new TFGraph();
input = graph.Placeholder(TFDataType.String);
 
output = graph.Cast(
graph.Div(x: graph.Sub(x: graph.ResizeBilinear(images: graph.ExpandDims(input: graph.Cast(graph.DecodeJpeg(contents: input, channels: 3), DstT: TFDataType.Float),
dim: graph.Const(0, "make_batch")),
size: graph.Const(new int[] { W, H }, "size")),
y: graph.Const(Mean, "mean")),
y: graph.Const(Scale, "scale")), destinationDataType);
 
return graph;
}
}

搞定

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/bbird/p/9953749.html

延伸 · 閱讀

精彩推薦
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
1224
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 日韩视频在线一区二区三区 | 中文字幕亚洲视频 | 日日鲁一鲁视频 | 91网视频 | 日韩黄色片网站 | 天天鲁在线视频免费观看 | www.99久| 黑色丝袜美美女被躁视频 | 久久久一区二区精品 | 精品久久久一 | 精品国产一区二区三 | 欧美高清一级片 | 97人操| 国产视频在线观看免费 | 欧美成年性h版影视中文字幕 | 一区二区三区四区免费看 | 免费在线观看毛片视频 | 精品欧美一区二区精品久久 | 欧美一区二区网站 | 91成人免费看片 | 欧美精品久久久久久久久久 | 精国产品一区二区三区 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 久久久日韩av免费观看下载 | 成人毛片在线免费观看 | 欧美精品国产综合久久 | 免费看黄色一级大片 | 久久精品视频16 | 一区二区免费网站 | 姑娘第5集高清在线观看 | 国产精品一二三区在线观看 | 免费观看一级 | 成人免费观看在线视频 | av观看国产 | 日本中文视频 | 新久草在线视频 | 在线天堂中文字幕 | 中文字幕观看 | 黄a大片| 免费国产 | 色吧综合网 |