static void Main(string[] args) { // 创建图 var g = new TFGraph(); // 定义常量 var a = g.Const(2); var b = g.Const(3); // 加法和乘法运算 var add = g.Add(a, b); var mul = g.Mul(a, b); // 创建会话 var sess = new TFSession(g); // 计算加法 var result1 = sess.GetRunner().Run(add).GetValue(); Console.WriteLine("a+b={0}", result1); // 计算乘法 var result2 = sess.GetRunner().Run(mul).GetValue(); Console.WriteLine("a*b={0}", result2); // 关闭会话 sess.CloseSession(); }
public static void SVD(float[,] covMat, out float[] s, out float[,] v) { TFShape shape = new TFShape(covMat.GetLength(0), covMat.GetLength(1)); var reshaped = covMat.Reshape(); var inputTensor = TFTensor.FromBuffer(shape, reshaped, 0, reshaped.Length); TFGraph svdGraph = new TFGraph(); TFOutput input = svdGraph.Placeholder(TFDataType.Float, shape); var svdResult = (ValueTuple <TFOutput, TFOutput, TFOutput>)svdGraph.Svd(input, true); var sess = new TFSession(svdGraph); var runner = sess.GetRunner(); runner.AddInput(input, inputTensor); runner.Fetch(svdResult.Item1); runner.Fetch(svdResult.Item2); TFTensor[] results = runner.Run(); s = (float[])results[0].GetValue(); v = (float[, ])results[1].GetValue(); TFStatus temp = new TFStatus(); sess.CloseSession(temp); sess.DeleteSession(temp); }
public void Dispose() { Console.WriteLine("Finalizing TF model resources"); session.CloseSession(); session.Dispose(); Console.WriteLine("TF resources closed"); }
public void TestCleanup() { if (s != null) { s.CloseSession(); s.Dispose(); s = null; } if (g != null) { g.Dispose(); g = null; } }
static void Main(string[] args) { var g = new TFGraph(); var sess = new TFSession(g); Program.Demo(g, sess); Program.First(); Program.placeholder(g, sess); Program.Variable(g, sess); Program.InitVariable(g, sess); sess.CloseSession(); Console.ReadKey(); }
private void Dispose(bool disposing) { // Ensure that the Session is not null and it's handle is not Zero, as it may have already been disposed/finalized. // Technically we shouldn't be calling this if disposing == false, since we're running in finalizer // and the GC doesn't guarantee ordering of finalization of managed objects, but we have to make sure // that the Session is closed before deleting our temporary directory. try { if (Session?.Handle != IntPtr.Zero) { Session.CloseSession(); Session.Dispose(); } } finally { if (!string.IsNullOrEmpty(_savedModelPath) && _isTemporarySavedModel) { TensorFlowUtils.DeleteFolderWithRetries(_host, _savedModelPath); } } }
static void KNN() { //取得数据 var mnist = Mnist.Load(); //拿5000个训练数据,200个测试数据 const int trainCount = 5000; const int testCount = 200; //获得的数据有两个 //一个是图片,它们都是28*28的 //一个是one-hot的标签,它们都是1*10的 (var trainingImages, var trainingLabels) = mnist.GetTrainReader().NextBatch(trainCount); (var testImages, var testLabels) = mnist.GetTestReader().NextBatch(testCount); Console.WriteLine($"MNIST 1NN"); //建立一个图表示计算任务 using (var graph = new TFGraph()) { var session = new TFSession(graph); //用来feed数据的占位符。trainingInput表示N张用来进行训练的图片,N是一个变量,所以这里使用-1 TFOutput trainingInput = graph.Placeholder(TFDataType.Float, new TFShape(-1, 784)); //xte表示一张用来测试的图片 TFOutput xte = graph.Placeholder(TFDataType.Float, new TFShape(784)); //计算这两张图片的L1距离。这很简单,实际上就是把784个数字逐对相减,然后取绝对值,最后加起来变成一个总和 var distance = graph.ReduceSum(graph.Abs(graph.Sub(trainingInput, xte)), axis: graph.Const(1)); //这里只是用了最近的那个数据 //也就是说,最近的那个数据是什么,那pred(预测值)就是什么 TFOutput pred = graph.ArgMin(distance, graph.Const(0)); var accuracy = 0f; //开始循环进行计算,循环trainCount次 for (int i = 0; i < testCount; i++) { var runner = session.GetRunner(); //每次,对一张新的测试图,计算它和trainCount张训练图的距离,并获得最近的那张 var result = runner.Fetch(pred).Fetch(distance) //trainCount张训练图(数据是trainingImages) .AddInput(trainingInput, trainingImages) //testCount张测试图(数据是从testImages中拿出来的) .AddInput(xte, Extract(testImages, i)) .Run(); //最近的点的序号 var nn_index = (int)(long)result[0].GetValue(); //从trainingLabels中找到答案(这是预测值) var prediction = ArgMax(trainingLabels, nn_index); //正确答案位于testLabels[i]中 var real = ArgMax(testLabels, i); //PrintImage(testImages, i); Console.WriteLine($"测试 {i}: " + $"预测: {prediction} " + $"正确答案: {real} (最近的点的序号={nn_index})"); //Console.WriteLine(testImages); if (prediction == real) { accuracy += 1f / testCount; } } Console.WriteLine("准确率: " + accuracy); session.CloseSession(); } }
public void ReleaseClassifier() { session.CloseSession(); }