C〓〓〓を使ってTensorflowを訓練します.pbファイルは生産環境で使います.
5811 ワード
長い間Tfモデルを訓練して、ついに生産環境の中で大学院を受けに行きます.今日は時間がかかりました.tfのモデルはどうやって生産環境で使われますか?大体これらの方法を整理しました.
手順別に保存したckptファイルを引き続き使用します.
これはtenssorflowの枠組みから逸脱できないようです.そして、生成したckptファイルは比較的大きいです.生産環境に発表する時、pythonのアルゴリズムファイルを一緒にアップロードしなければなりません.他のプログラムとどうやってインタラクティブにして、自分でサービスを書かなければならないかもしれません.このようにする人は少ないと思います.性能も普通のようです.
tenssor flow Servingを使います.
tf Servingはみんなが比較的に推奨する方法のようです.tfServingをコンパイルしてモデルを導き出す必要があります.tf Servingのプロセスを直接実行すれば、外部にサービスを提供することができます.具体的に呼び出しをする時は、自分でクライアントを書いて、人gRPCを使ってServingを呼び出してから、外部にサービスを提供するのが面倒くさいです.そして、今日はgRPCを研究する時間があまりないので、ネット上のクライアントについてはpythonで書いていることが多いです.自分のpythonのレベルが料理より高いと思います.書く自信がありません.だからこの方式は先に検討していません.
生産.pbファイル、そしてプログラムを書いて呼び出します.pbファイル
pbファイルを生成したら、プログラムによって直接呼び出されて、パラメータが入ってきます.そして、パラメータが伝わります.pbファイルはとても小さいです.私は豊富なネット開発の経験があります.考えています.C〓〓で解析することができますか?pbファイル、それから1つの.net coreの対外サービスのAPIをして、このように见たところ更に高効率で、肝心な点は自分でこの开発を熟知するので、多すぎる时间を费やして模索にいく必要はありません.
具体的な考え方
インターネットの下のTensorFlowフレームを使って、tensorFlow Sharp(まだフレームを外していないようです.)pbファイルを呼び出して、net core web APIを作って、対外サービスを提供します.
具体的な実現
直接コードを入れるのはとても簡単で、自分でtenssor flowesharpまで設計するところはとても少ないです.
手順別に保存したckptファイルを引き続き使用します.
これはtenssorflowの枠組みから逸脱できないようです.そして、生成したckptファイルは比較的大きいです.生産環境に発表する時、pythonのアルゴリズムファイルを一緒にアップロードしなければなりません.他のプログラムとどうやってインタラクティブにして、自分でサービスを書かなければならないかもしれません.このようにする人は少ないと思います.性能も普通のようです.
tenssor flow Servingを使います.
tf Servingはみんなが比較的に推奨する方法のようです.tfServingをコンパイルしてモデルを導き出す必要があります.tf Servingのプロセスを直接実行すれば、外部にサービスを提供することができます.具体的に呼び出しをする時は、自分でクライアントを書いて、人gRPCを使ってServingを呼び出してから、外部にサービスを提供するのが面倒くさいです.そして、今日はgRPCを研究する時間があまりないので、ネット上のクライアントについてはpythonで書いていることが多いです.自分のpythonのレベルが料理より高いと思います.書く自信がありません.だからこの方式は先に検討していません.
生産.pbファイル、そしてプログラムを書いて呼び出します.pbファイル
pbファイルを生成したら、プログラムによって直接呼び出されて、パラメータが入ってきます.そして、パラメータが伝わります.pbファイルはとても小さいです.私は豊富なネット開発の経験があります.考えています.C〓〓で解析することができますか?pbファイル、それから1つの.net coreの対外サービスのAPIをして、このように见たところ更に高効率で、肝心な点は自分でこの开発を熟知するので、多すぎる时间を费やして模索にいく必要はありません.
具体的な考え方
インターネットの下のTensorFlowフレームを使って、tensorFlow Sharp(まだフレームを外していないようです.)pbファイルを呼び出して、net core web APIを作って、対外サービスを提供します.
具体的な実現
直接コードを入れるのはとても簡単で、自分でtenssor flowesharpまで設計するところはとても少ないです.
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というクラスのライブラリはテナントflowesharpのオフィシャルな例の一つです.画像をテナントのクラスに変えました.直接にcopyに来ました.私のネットワークによっていくつかのパラメータを修正しました.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;
}
}
片付く