Browse Source

changed the class Python to be static

tags/v0.9
Kerry Jiang 6 years ago
parent
commit
3f9f2a3725
64 changed files with 339 additions and 277 deletions
  1. +2
    -1
      src/TensorFlowNET.Core/Clustering/KMeans.cs
  2. +2
    -1
      src/TensorFlowNET.Core/Clustering/_InitializeClustersOpFactory.cs
  3. +2
    -1
      src/TensorFlowNET.Core/Framework/importer.py.cs
  4. +2
    -1
      src/TensorFlowNET.Core/Gradients/gradients_impl.py.cs
  5. +2
    -1
      src/TensorFlowNET.Core/Gradients/math_grad.cs
  6. +111
    -110
      src/TensorFlowNET.Core/Operations/ControlFlows/CondContext.cs
  7. +54
    -53
      src/TensorFlowNET.Core/Operations/ControlFlows/ControlFlowContext.cs
  8. +2
    -2
      src/TensorFlowNET.Core/Operations/Distributions/distribution.py.cs
  9. +1
    -0
      src/TensorFlowNET.Core/Operations/Distributions/normal.py.cs
  10. +2
    -1
      src/TensorFlowNET.Core/Operations/Losses/losses_impl.py.cs
  11. +2
    -1
      src/TensorFlowNET.Core/Operations/NnOps/MaxPoolFunction.cs
  12. +2
    -1
      src/TensorFlowNET.Core/Operations/OpDefLibrary.cs
  13. +2
    -1
      src/TensorFlowNET.Core/Operations/array_ops.py.cs
  14. +2
    -1
      src/TensorFlowNET.Core/Operations/check_ops.cs
  15. +26
    -25
      src/TensorFlowNET.Core/Operations/control_flow_ops.py.cs
  16. +2
    -1
      src/TensorFlowNET.Core/Operations/embedding_ops.cs
  17. +4
    -3
      src/TensorFlowNET.Core/Operations/gen_control_flow_ops.py.cs
  18. +2
    -1
      src/TensorFlowNET.Core/Operations/math_ops.cs
  19. +2
    -1
      src/TensorFlowNET.Core/Operations/nn_impl.py.cs
  20. +2
    -1
      src/TensorFlowNET.Core/Operations/random_ops.py.cs
  21. +11
    -11
      src/TensorFlowNET.Core/Python.cs
  22. +1
    -0
      src/TensorFlowNET.Core/Tensors/Tensor.Operators.cs
  23. +2
    -1
      src/TensorFlowNET.Core/Tensors/Tensor.cs
  24. +4
    -3
      src/TensorFlowNET.Core/Train/Optimizer.cs
  25. +2
    -1
      src/TensorFlowNET.Core/Train/Saving/BaseSaverBuilder.cs
  26. +1
    -0
      src/TensorFlowNET.Core/Variables/RefVariable.Operators.cs
  27. +1
    -0
      src/TensorFlowNET.Core/Variables/RefVariable.cs
  28. +2
    -1
      src/TensorFlowNET.Core/Variables/VariableScope.cs
  29. +2
    -1
      src/TensorFlowNET.Core/Variables/VariableV1.cs
  30. +11
    -10
      src/TensorFlowNET.Core/ops.py.cs
  31. +2
    -1
      test/TensorFlowNET.Examples/BasicOperations.cs
  32. +2
    -1
      test/TensorFlowNET.Examples/HelloWorld.cs
  33. +2
    -1
      test/TensorFlowNET.Examples/ImageRecognitionInception.cs
  34. +2
    -1
      test/TensorFlowNET.Examples/InceptionArchGoogLeNet.cs
  35. +2
    -1
      test/TensorFlowNET.Examples/KMeansClustering.cs
  36. +2
    -1
      test/TensorFlowNET.Examples/LinearRegression.cs
  37. +2
    -1
      test/TensorFlowNET.Examples/LogisticRegression.cs
  38. +2
    -1
      test/TensorFlowNET.Examples/MetaGraph.cs
  39. +2
    -1
      test/TensorFlowNET.Examples/NaiveBayesClassifier.cs
  40. +2
    -1
      test/TensorFlowNET.Examples/NamedEntityRecognition.cs
  41. +2
    -1
      test/TensorFlowNET.Examples/NearestNeighbor.cs
  42. +2
    -1
      test/TensorFlowNET.Examples/NeuralNetXor.cs
  43. +2
    -1
      test/TensorFlowNET.Examples/ObjectDetection.cs
  44. +2
    -1
      test/TensorFlowNET.Examples/Text/BinaryTextClassification.cs
  45. +2
    -1
      test/TensorFlowNET.Examples/Text/NER/BiLstmCrfNer.cs
  46. +19
    -18
      test/TensorFlowNET.Examples/Text/TextClassificationTrain.cs
  47. +2
    -1
      test/TensorFlowNET.Examples/Text/Word2Vec.cs
  48. +2
    -1
      test/TensorFlowNET.Examples/Text/cnn_models/VdCnn.cs
  49. +2
    -1
      test/TensorFlowNET.UnitTest/CApiTest.cs
  50. +2
    -1
      test/TensorFlowNET.UnitTest/ConstantTest.cs
  51. +2
    -1
      test/TensorFlowNET.UnitTest/NameScopeTest.cs
  52. +2
    -1
      test/TensorFlowNET.UnitTest/PlaceholderTest.cs
  53. +1
    -0
      test/TensorFlowNET.UnitTest/PythonBaseTests.cs
  54. +2
    -1
      test/TensorFlowNET.UnitTest/PythonTest.cs
  55. +1
    -0
      test/TensorFlowNET.UnitTest/SessionTest.cs
  56. +2
    -1
      test/TensorFlowNET.UnitTest/TrainSaverTest.cs
  57. +2
    -1
      test/TensorFlowNET.UnitTest/VariableTest.cs
  58. +1
    -0
      test/TensorFlowNET.UnitTest/control_flow_ops_test/CondTestCases.cs
  59. +1
    -0
      test/TensorFlowNET.UnitTest/control_flow_ops_test/WhileContextTestCase.cs
  60. +1
    -0
      test/TensorFlowNET.UnitTest/gradients_test/GradientsTest.cs
  61. +1
    -0
      test/TensorFlowNET.UnitTest/nest_test/NestTest.cs
  62. +1
    -0
      test/TensorFlowNET.UnitTest/nn_test/ZeroFractionTest.cs
  63. +1
    -0
      test/TensorFlowNET.UnitTest/ops_test/ControlDependenciesTest.cs
  64. +1
    -0
      test/TensorFlowNET.UnitTest/ops_test/CreateOpFromTfOperationTest.cs

+ 2
- 1
src/TensorFlowNET.Core/Clustering/KMeans.cs View File

@@ -1,13 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow.Clustering namespace Tensorflow.Clustering
{ {
/// <summary> /// <summary>
/// Creates the graph for k-means clustering. /// Creates the graph for k-means clustering.
/// </summary> /// </summary>
public class KMeans : Python
public class KMeans
{ {
public const string CLUSTERS_VAR_NAME = "clusters"; public const string CLUSTERS_VAR_NAME = "clusters";




+ 2
- 1
src/TensorFlowNET.Core/Clustering/_InitializeClustersOpFactory.cs View File

@@ -2,13 +2,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow.Clustering namespace Tensorflow.Clustering
{ {
/// <summary> /// <summary>
/// Internal class to create the op to initialize the clusters. /// Internal class to create the op to initialize the clusters.
/// </summary> /// </summary>
public class _InitializeClustersOpFactory : Python
public class _InitializeClustersOpFactory
{ {
Tensor[] _inputs; Tensor[] _inputs;
Tensor _num_clusters; Tensor _num_clusters;


+ 2
- 1
src/TensorFlowNET.Core/Framework/importer.py.cs View File

@@ -4,10 +4,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using static Tensorflow.OpDef.Types; using static Tensorflow.OpDef.Types;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class importer : Python
public class importer
{ {
public static ITensorOrOperation[] import_graph_def(GraphDef graph_def, public static ITensorOrOperation[] import_graph_def(GraphDef graph_def,
Dictionary<string, Tensor> input_map = null, Dictionary<string, Tensor> input_map = null,


+ 2
- 1
src/TensorFlowNET.Core/Gradients/gradients_impl.py.cs View File

@@ -4,10 +4,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class gradients_impl : Python
public class gradients_impl
{ {
public static Tensor[] gradients(Tensor[] ys, public static Tensor[] gradients(Tensor[] ys,
Tensor[] xs, Tensor[] xs,


+ 2
- 1
src/TensorFlowNET.Core/Gradients/math_grad.cs View File

@@ -3,13 +3,14 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow.Gradients namespace Tensorflow.Gradients
{ {
/// <summary> /// <summary>
/// Gradients for operators defined in math_ops.py. /// Gradients for operators defined in math_ops.py.
/// </summary> /// </summary>
public class math_grad : Python
public class math_grad
{ {
public static Tensor[] _AddGrad(Operation op, Tensor[] grads) public static Tensor[] _AddGrad(Operation op, Tensor[] grads)
{ {


+ 111
- 110
src/TensorFlowNET.Core/Operations/ControlFlows/CondContext.cs View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Tensorflow.Operations.ControlFlows; using Tensorflow.Operations.ControlFlows;
using static Tensorflow.Python;


namespace Tensorflow.Operations namespace Tensorflow.Operations
{ {
@@ -46,9 +47,9 @@ namespace Tensorflow.Operations
if (pred == null && context_def == null) return; if (pred == null && context_def == null) return;


_name = ops.get_default_graph().unique_name(name); _name = ops.get_default_graph().unique_name(name);
if (context_def != null)
{
_init_from_proto(context_def, import_scope: import_scope);
if (context_def != null)
{
_init_from_proto(context_def, import_scope: import_scope);
} }
else else
{ {
@@ -66,16 +67,16 @@ namespace Tensorflow.Operations
} }
} }


private void _init_from_proto(CondContextDef context_def, string import_scope = null)
{
var g = ops.get_default_graph();
_name = ops.prepend_name_scope(context_def.ContextName, import_scope);
var p1 = ops.prepend_name_scope(context_def.PredName, import_scope);
_pred = g.as_graph_element(p1) as Tensor;
var p2 = ops.prepend_name_scope(context_def.PivotName, import_scope);
_pivot = g.as_graph_element(p2) as Tensor;
_branch = context_def.Branch;
__init__(values_def: context_def.ValuesDef, import_scope: import_scope);
private void _init_from_proto(CondContextDef context_def, string import_scope = null)
{
var g = ops.get_default_graph();
_name = ops.prepend_name_scope(context_def.ContextName, import_scope);
var p1 = ops.prepend_name_scope(context_def.PredName, import_scope);
_pred = g.as_graph_element(p1) as Tensor;
var p2 = ops.prepend_name_scope(context_def.PivotName, import_scope);
_pivot = g.as_graph_element(p2) as Tensor;
_branch = context_def.Branch;
__init__(values_def: context_def.ValuesDef, import_scope: import_scope);
} }


/// <summary> /// <summary>
@@ -90,8 +91,8 @@ namespace Tensorflow.Operations
// Use the real value if it comes from outer context. This is needed in // Use the real value if it comes from outer context. This is needed in
// particular for nested conds. // particular for nested conds.
if (_external_values.ContainsKey(val.name)) if (_external_values.ContainsKey(val.name))
result = _external_values[val.name];
result = _external_values[val.name];
result = result == null ? val : result; result = result == null ? val : result;
} }
else else
@@ -107,10 +108,10 @@ namespace Tensorflow.Operations
} }
with(ops.control_dependencies(null), ctrl => with(ops.control_dependencies(null), ctrl =>
{
var results = control_flow_ops._SwitchRefOrTensor(result, _pred);
result = results[_branch];
if (_outer_context != null)
{
var results = control_flow_ops._SwitchRefOrTensor(result, _pred);
result = results[_branch];
if (_outer_context != null)
_outer_context.AddInnerOp(result.op); _outer_context.AddInnerOp(result.op);
}); });


@@ -127,87 +128,87 @@ namespace Tensorflow.Operations
} }
_external_values[val.name] = result; _external_values[val.name] = result;
} }
return result;
}
return result;
}
/// <summary> /// <summary>
/// Add the subgraph defined by fn() to the graph. /// Add the subgraph defined by fn() to the graph.
/// </summary> /// </summary>
public (T, Tensor) BuildCondBranch<T>(Func<T> fn)
{
// Add the subgraph defined by fn() to the graph.
var pre_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
var original_result = fn();
var post_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
//TODO: port this chunck of missing code:
/*
if len(post_summaries) > len(pre_summaries):
new_summaries = post_summaries[len(pre_summaries):]
summary_ref = ops.get_collection_ref(ops.GraphKeys._SUMMARY_COLLECTION) # pylint: disable=protected-access
summary_ref[:] = pre_summaries
with ops.control_dependencies(new_summaries):
if original_result is None:
return no_op(), None
else:
original_result = nest.map_structure(array_ops.identity,
original_result)
*/
if (original_result == null)
return (original_result, null);
switch (original_result)
{
case Tensor result:
return (original_result, _BuildCondTensor(result));
case Operation op:
return (original_result, _BuildCondTensor(op));
public (T, Tensor) BuildCondBranch<T>(Func<T> fn)
{
// Add the subgraph defined by fn() to the graph.
var pre_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
var original_result = fn();
var post_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
//TODO: port this chunck of missing code:
/*
if len(post_summaries) > len(pre_summaries):
new_summaries = post_summaries[len(pre_summaries):]
summary_ref = ops.get_collection_ref(ops.GraphKeys._SUMMARY_COLLECTION) # pylint: disable=protected-access
summary_ref[:] = pre_summaries
with ops.control_dependencies(new_summaries):
if original_result is None:
return no_op(), None
else:
original_result = nest.map_structure(array_ops.identity,
original_result)
*/
if (original_result == null)
return (original_result, null);
switch (original_result)
{
case Tensor result:
return (original_result, _BuildCondTensor(result));
case Operation op:
return (original_result, _BuildCondTensor(op));
case float[] fv: case float[] fv:
{ {
var result = ops.convert_to_tensor(fv[0]); var result = ops.convert_to_tensor(fv[0]);
return (original_result, _BuildCondTensor(result)); return (original_result, _BuildCondTensor(result));
}
default:
return (original_result, null);
}
}
public (T[], Tensor[]) BuildCondBranch<T>(Func<T[]> fn)
{
// Add the subgraph defined by fn() to the graph.
var pre_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
var original_result = fn();
var post_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
switch (original_result)
{
case Tensor[] results:
return (original_result, results.Select(_BuildCondTensor).ToArray());
case Operation[] results:
return (original_result, results.Select(_BuildCondTensor).ToArray());
case float[] fv:
var result = ops.convert_to_tensor(fv[0]);
return (original_result, new Tensor[] { result });
default:
return (original_result, new Tensor[0]);
}
}
private Tensor _BuildCondTensor(ITensorOrOperation v)
{
switch (v)
{
case Operation op:
// Use pivot as the proxy for this op.
return control_flow_ops.with_dependencies(new Operation[] { op }, _pivot);
case Tensor t:
return _ProcessOutputTensor(t);
default:
return _ProcessOutputTensor(ops.convert_to_tensor(v));
}
}
}
default:
return (original_result, null);
}
}
public (T[], Tensor[]) BuildCondBranch<T>(Func<T[]> fn)
{
// Add the subgraph defined by fn() to the graph.
var pre_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
var original_result = fn();
var post_summaries = ops.get_collection(ops.GraphKeys._SUMMARY_COLLECTION);
switch (original_result)
{
case Tensor[] results:
return (original_result, results.Select(_BuildCondTensor).ToArray());
case Operation[] results:
return (original_result, results.Select(_BuildCondTensor).ToArray());
case float[] fv:
var result = ops.convert_to_tensor(fv[0]);
return (original_result, new Tensor[] { result });
default:
return (original_result, new Tensor[0]);
}
}
private Tensor _BuildCondTensor(ITensorOrOperation v)
{
switch (v)
{
case Operation op:
// Use pivot as the proxy for this op.
return control_flow_ops.with_dependencies(new Operation[] { op }, _pivot);
case Tensor t:
return _ProcessOutputTensor(t);
default:
return _ProcessOutputTensor(ops.convert_to_tensor(v));
}
}
/// <summary> /// <summary>
/// Process an output tensor of a conditional branch. /// Process an output tensor of a conditional branch.
/// </summary> /// </summary>
@@ -238,7 +239,7 @@ namespace Tensorflow.Operations
} }
return real_val; return real_val;
} }
protected override void _AddOpInternal(Operation op) protected override void _AddOpInternal(Operation op)
{ {
if (op.inputs.Length == 0) if (op.inputs.Length == 0)
@@ -324,20 +325,20 @@ namespace Tensorflow.Operations
} }
} }


public CondContextDef to_proto(string export_scope)
{
throw new NotImplementedException();
}
public CondContext from_proto(CondContextDef proto, string import_scope)
{
var ret = new CondContext(context_def: proto, import_scope: import_scope);
ret.Enter();
foreach (var nested_def in proto.NestedContexts)
from_control_flow_context_def(nested_def, import_scope: import_scope);
ret.Exit();
return ret;
}
}
public CondContextDef to_proto(string export_scope)
{
throw new NotImplementedException();
}
public CondContext from_proto(CondContextDef proto, string import_scope)
{
var ret = new CondContext(context_def: proto, import_scope: import_scope);
ret.Enter();
foreach (var nested_def in proto.NestedContexts)
from_control_flow_context_def(nested_def, import_scope: import_scope);
ret.Exit();
return ret;
}
}
} }

+ 54
- 53
src/TensorFlowNET.Core/Operations/ControlFlows/ControlFlowContext.cs View File

@@ -3,10 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Tensorflow.Operations.ControlFlows; using Tensorflow.Operations.ControlFlows;
using static Tensorflow.ControlFlowContextDef;
using static Tensorflow.ControlFlowContextDef;
using static Tensorflow.Python;

namespace Tensorflow.Operations namespace Tensorflow.Operations
{
{
/// <summary> /// <summary>
/// The base class for control flow context. /// The base class for control flow context.
/// ///
@@ -24,7 +25,7 @@ namespace Tensorflow.Operations
/// 4. A ControlFlowContext has _context_stack. /// 4. A ControlFlowContext has _context_stack.
/// Pushed and popped by ctxt.Enter() and ctxt.Exit() /// Pushed and popped by ctxt.Enter() and ctxt.Exit()
/// </summary> /// </summary>
public abstract class ControlFlowContext : Python, IPython
public abstract class ControlFlowContext : IPython
{ {
/// <summary> /// <summary>
/// The predicate tensor in this branch /// The predicate tensor in this branch
@@ -59,38 +60,38 @@ namespace Tensorflow.Operations
{ {
} }


/// <summary>
/// Initializes values and external_values from `ValuesDef` protocol buffer.
/// </summary>
/// <param name="values_def"></param>
/// <summary>
/// Initializes values and external_values from `ValuesDef` protocol buffer.
/// </summary>
/// <param name="values_def"></param>
/// <param name="import_scope"></param> /// <param name="import_scope"></param>
protected void _init_values_from_proto(ValuesDef values_def, string import_scope = null)
{
_external_values = new Dictionary<string, ITensorOrOperation>();
foreach (var value in values_def.Values)
_values.Add(value);
var g = ops.get_default_graph();
foreach(var value in values_def.ExternalValues)
{
var k = ops.prepend_name_scope(value.Key, import_scope);
var v = value.Value;
_external_values[k] = g.as_graph_element(ops.prepend_name_scope(v, import_scope));
}
var op_names = _values.Where(x => !_external_values.ContainsKey(x))
.Select(x => x.Split(':')[0])
.ToArray();
foreach (var op in op_names)
(g.as_graph_element(op) as Operation)._set_control_flow_context(this);
protected void _init_values_from_proto(ValuesDef values_def, string import_scope = null)
{
_external_values = new Dictionary<string, ITensorOrOperation>();
foreach (var value in values_def.Values)
_values.Add(value);
var g = ops.get_default_graph();
foreach(var value in values_def.ExternalValues)
{
var k = ops.prepend_name_scope(value.Key, import_scope);
var v = value.Value;
_external_values[k] = g.as_graph_element(ops.prepend_name_scope(v, import_scope));
}
var op_names = _values.Where(x => !_external_values.ContainsKey(x))
.Select(x => x.Split(':')[0])
.ToArray();
foreach (var op in op_names)
(g.as_graph_element(op) as Operation)._set_control_flow_context(this);
} }


public void __exit__() public void __exit__()
{ {
} }


/// <summary>
/// Enter this control flow context.
/// <summary>
/// Enter this control flow context.
/// </summary> /// </summary>
public virtual void Enter() public virtual void Enter()
{ {
@@ -127,7 +128,7 @@ namespace Tensorflow.Operations
public virtual Tensor AddValue(Tensor val) public virtual Tensor AddValue(Tensor val)
{ {
// to be overridden // to be overridden
return null;
return null;
} }


/// <summary> /// <summary>
@@ -148,17 +149,17 @@ namespace Tensorflow.Operations
protected virtual void _AddOpInternal(Operation op) protected virtual void _AddOpInternal(Operation op)
{ {
}
}
protected bool OpInContext(Operation op) protected bool OpInContext(Operation op)
{ {
return IsContainingContext(op._get_control_flow_context(), this); return IsContainingContext(op._get_control_flow_context(), this);
}
/// <summary>
/// Returns true if `maybe_containing_ctxt` is or contains `ctxt`.
/// </summary>
public static bool IsContainingContext(ControlFlowContext ctxt, ControlFlowContext maybe_containing_ctxt)
}
/// <summary>
/// Returns true if `maybe_containing_ctxt` is or contains `ctxt`.
/// </summary>
public static bool IsContainingContext(ControlFlowContext ctxt, ControlFlowContext maybe_containing_ctxt)
{ {
while (ctxt != maybe_containing_ctxt) while (ctxt != maybe_containing_ctxt)
{ {
@@ -167,7 +168,7 @@ namespace Tensorflow.Operations
ctxt = ctxt.outer_context; ctxt = ctxt.outer_context;
} }
return true; return true;
}
}




protected virtual void _RemoveExternalControlEdges(Operation op) protected virtual void _RemoveExternalControlEdges(Operation op)
@@ -185,21 +186,21 @@ namespace Tensorflow.Operations
return null; return null;
} }


/// <summary>
/// Deserializes `context_def` into the appropriate ControlFlowContext.
/// </summary>
/// <param name="context_def">ControlFlowContextDef proto</param>
/// <param name="import_scope">Name scope to add</param>
/// <summary>
/// Deserializes `context_def` into the appropriate ControlFlowContext.
/// </summary>
/// <param name="context_def">ControlFlowContextDef proto</param>
/// <param name="import_scope">Name scope to add</param>
/// <returns>A ControlFlowContext subclass</returns> /// <returns>A ControlFlowContext subclass</returns>
protected ControlFlowContext from_control_flow_context_def(ControlFlowContextDef context_def, string import_scope = "")
{
switch (context_def.CtxtCase)
{
case CtxtOneofCase.CondCtxt:
return new CondContext().from_proto(context_def.CondCtxt, import_scope: import_scope);
}
throw new NotImplementedException($"Unknown ControlFlowContextDef field: {context_def.CtxtCase}");
protected ControlFlowContext from_control_flow_context_def(ControlFlowContextDef context_def, string import_scope = "")
{
switch (context_def.CtxtCase)
{
case CtxtOneofCase.CondCtxt:
return new CondContext().from_proto(context_def.CondCtxt, import_scope: import_scope);
}
throw new NotImplementedException($"Unknown ControlFlowContextDef field: {context_def.CtxtCase}");
} }


public object to_proto() public object to_proto()


+ 2
- 2
src/TensorFlowNET.Core/Operations/Distributions/distribution.py.cs View File

@@ -2,12 +2,12 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;




namespace Tensorflow namespace Tensorflow
{ {
public class _BaseDistribution : Python
public class _BaseDistribution
{ {
// Abstract base class needed for resolving subclass hierarchy. // Abstract base class needed for resolving subclass hierarchy.
} }


+ 1
- 0
src/TensorFlowNET.Core/Operations/Distributions/normal.py.cs View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {


+ 2
- 1
src/TensorFlowNET.Core/Operations/Losses/losses_impl.py.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class LossesImpl : Python
public class LossesImpl
{ {
public Tensor sparse_softmax_cross_entropy(Tensor labels, public Tensor sparse_softmax_cross_entropy(Tensor labels,
Tensor logits, Tensor logits,


+ 2
- 1
src/TensorFlowNET.Core/Operations/NnOps/MaxPoolFunction.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow.Operations namespace Tensorflow.Operations
{ {
public class MaxPoolFunction : Python, IPoolFunction
public class MaxPoolFunction : IPoolFunction
{ {
public Tensor Apply(Tensor value, public Tensor Apply(Tensor value,
int[] ksize, int[] ksize,


+ 2
- 1
src/TensorFlowNET.Core/Operations/OpDefLibrary.cs View File

@@ -7,10 +7,11 @@ using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using static Tensorflow.OpDef.Types; using static Tensorflow.OpDef.Types;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class OpDefLibrary : Python
public class OpDefLibrary
{ {
public Operation _apply_op_helper(string op_type_name, string name = null, object args = null) public Operation _apply_op_helper(string op_type_name, string name = null, object args = null)
=> _apply_op_helper(op_type_name, name: name, keywords: ConvertToDict(args)); => _apply_op_helper(op_type_name, name: name, keywords: ConvertToDict(args));


+ 2
- 1
src/TensorFlowNET.Core/Operations/array_ops.py.cs View File

@@ -2,10 +2,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;
namespace Tensorflow namespace Tensorflow
{ {
public class array_ops : Python
public class array_ops
{ {
public static Tensor placeholder_with_default<T>(T input, int[] shape, string name = null) public static Tensor placeholder_with_default<T>(T input, int[] shape, string name = null)
=> gen_array_ops.placeholder_with_default(input, shape, name); => gen_array_ops.placeholder_with_default(input, shape, name);


+ 2
- 1
src/TensorFlowNET.Core/Operations/check_ops.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class check_ops : Python
public class check_ops
{ {
/// <summary> /// <summary>
/// Assert the condition `x == y` holds element-wise. /// Assert the condition `x == y` holds element-wise.


+ 26
- 25
src/TensorFlowNET.Core/Operations/control_flow_ops.py.cs View File

@@ -5,10 +5,11 @@ using System.Text;
using Tensorflow.Operations; using Tensorflow.Operations;
using Tensorflow.Operations.ControlFlows; using Tensorflow.Operations.ControlFlows;
using util = Tensorflow.control_flow_util; using util = Tensorflow.control_flow_util;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class control_flow_ops : Python
public class control_flow_ops
{ {
public static Operation Assert(Tensor condition, object[] data, int? summarize = null, string name = null) public static Operation Assert(Tensor condition, object[] data, int? summarize = null, string name = null)
{ {
@@ -143,8 +144,8 @@ namespace Tensorflow


return tpl.ToArray(); return tpl.ToArray();
}); });
}
}
/// <summary> /// <summary>
/// Produces the content of `output_tensor` only after `dependencies`. /// Produces the content of `output_tensor` only after `dependencies`.
/// ///
@@ -155,11 +156,11 @@ namespace Tensorflow
/// no guarantee that `output_tensor` will be evaluated after any `dependencies` /// no guarantee that `output_tensor` will be evaluated after any `dependencies`
/// have run. /// have run.
/// ///
/// See also `tf.tuple` and `tf.group`.
/// </summary>
/// <param name="dependencies">Iterable of operations to run before this op finishes.</param>
/// <param name="output_tensor">A `Tensor` or `IndexedSlices` that will be returned.</param>
/// <param name="name">(Optional) A name for this operation.</param>
/// See also `tf.tuple` and `tf.group`.
/// </summary>
/// <param name="dependencies">Iterable of operations to run before this op finishes.</param>
/// <param name="output_tensor">A `Tensor` or `IndexedSlices` that will be returned.</param>
/// <param name="name">(Optional) A name for this operation.</param>
/// <returns>Same as `output_tensor`.</returns> /// <returns>Same as `output_tensor`.</returns>
public static Tensor with_dependencies(Operation[] dependencies, Tensor output_tensor, string name = null) public static Tensor with_dependencies(Operation[] dependencies, Tensor output_tensor, string name = null)
{ {
@@ -210,23 +211,23 @@ namespace Tensorflow
/// </returns> /// </returns>
public static Tensor[] _SwitchRefOrTensor(Tensor data, Tensor pred, string name = "Switch") public static Tensor[] _SwitchRefOrTensor(Tensor data, Tensor pred, string name = "Switch")
{ {
data = ops.convert_to_tensor_or_indexed_slices(data, name: "data");
// NOTE(vrv): ops.colocate_with(data, ignore_existing=True) below
// addresses the following scenario.
//
// Assume you execute Optimizer.apply_gradients() in a branch of a cond().
//
// 1. The update op is created inside a `with ops.colocate(var):` block
//
// 2. Some tensor `data` is captured and a switch is created in a
// `with ops.colocate_with(data):` block.
//
// with ops.colocate_with(var):
// with ops.colocate_with(data):
// op = ...
//
// var and data may be pinned to different devices, so we want to ops
// created within ops.colocate_with(data) to ignore the existing stack.
data = ops.convert_to_tensor_or_indexed_slices(data, name: "data");
// NOTE(vrv): ops.colocate_with(data, ignore_existing=True) below
// addresses the following scenario.
//
// Assume you execute Optimizer.apply_gradients() in a branch of a cond().
//
// 1. The update op is created inside a `with ops.colocate(var):` block
//
// 2. Some tensor `data` is captured and a switch is created in a
// `with ops.colocate_with(data):` block.
//
// with ops.colocate_with(var):
// with ops.colocate_with(data):
// op = ...
//
// var and data may be pinned to different devices, so we want to ops
// created within ops.colocate_with(data) to ignore the existing stack.
ops.colocate_with(data, ignore_existing: true); ops.colocate_with(data, ignore_existing: true);
{ {
if (data is Tensor) if (data is Tensor)


+ 2
- 1
src/TensorFlowNET.Core/Operations/embedding_ops.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class embedding_ops : Python
public class embedding_ops
{ {
/// <summary> /// <summary>
/// Helper function for embedding_lookup and _compute_sampled_logits. /// Helper function for embedding_lookup and _compute_sampled_logits.


+ 4
- 3
src/TensorFlowNET.Core/Operations/gen_control_flow_ops.py.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class gen_control_flow_ops : Python
public class gen_control_flow_ops
{ {
public static OpDefLibrary _op_def_lib = new OpDefLibrary(); public static OpDefLibrary _op_def_lib = new OpDefLibrary();


@@ -13,8 +14,8 @@ namespace Tensorflow
var _op = _op_def_lib._apply_op_helper("NoOp", name, null); var _op = _op_def_lib._apply_op_helper("NoOp", name, null);


return _op; return _op;
}
}
/// <summary> /// <summary>
/// Forwards `data` to the output port determined by `pred`. /// Forwards `data` to the output port determined by `pred`.
/// ///


+ 2
- 1
src/TensorFlowNET.Core/Operations/math_ops.cs View File

@@ -3,13 +3,14 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow.Framework; using Tensorflow.Framework;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
/// <summary> /// <summary>
/// python\ops\math_ops.py /// python\ops\math_ops.py
/// </summary> /// </summary>
public class math_ops : Python
public class math_ops
{ {
public static Tensor abs(Tensor x, string name = null) public static Tensor abs(Tensor x, string name = null)
{ {


+ 2
- 1
src/TensorFlowNET.Core/Operations/nn_impl.py.cs View File

@@ -2,10 +2,11 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow.Operations; using Tensorflow.Operations;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class nn_impl : Python
public class nn_impl
{ {
/// <summary> /// <summary>
/// Normalizes along dimension `axis` using an L2 norm. /// Normalizes along dimension `axis` using an L2 norm.


+ 2
- 1
src/TensorFlowNET.Core/Operations/random_ops.py.cs View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class random_ops : Python
public class random_ops
{ {
/// <summary> /// <summary>
/// ///


+ 11
- 11
src/TensorFlowNET.Core/Python.cs View File

@@ -12,9 +12,9 @@ namespace Tensorflow
/// <summary> /// <summary>
/// Mapping C# functions to Python /// Mapping C# functions to Python
/// </summary> /// </summary>
public class Python
public static class Python
{ {
protected void print(object obj)
public static void print(object obj)
{ {
Console.WriteLine(obj.ToString()); Console.WriteLine(obj.ToString());
} }
@@ -22,9 +22,9 @@ namespace Tensorflow
//protected int len<T>(IEnumerable<T> a) //protected int len<T>(IEnumerable<T> a)
// => a.Count(); // => a.Count();


protected int len(object a)
public static int len(object a)
{ {
switch (a)
switch (a)
{ {
case Array arr: case Array arr:
return arr.Length; return arr.Length;
@@ -35,17 +35,17 @@ namespace Tensorflow
case NDArray ndArray: case NDArray ndArray:
return ndArray.len; return ndArray.len;
case IEnumerable enumerable: case IEnumerable enumerable:
return enumerable.OfType<object>().Count();
}
throw new NotImplementedException("len() not implemented for type: " + a.GetType());
return enumerable.OfType<object>().Count();
}
throw new NotImplementedException("len() not implemented for type: " + a.GetType());
} }


protected IEnumerable<int> range(int end)
public static IEnumerable<int> range(int end)
{ {
return Enumerable.Range(0, end); return Enumerable.Range(0, end);
} }


protected IEnumerable<int> range(int start, int end)
public static IEnumerable<int> range(int start, int end)
{ {
return Enumerable.Range(start, end - start); return Enumerable.Range(start, end - start);
} }
@@ -170,8 +170,8 @@ namespace Tensorflow
dictionary.Add(name, obj); dictionary.Add(name, obj);
} }
return dictionary; return dictionary;
}
}
public static bool hasattr(object obj, string key) public static bool hasattr(object obj, string key)
{ {
var __type__ = (obj).GetType(); var __type__ = (obj).GetType();


+ 1
- 0
src/TensorFlowNET.Core/Tensors/Tensor.Operators.cs View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {


+ 2
- 1
src/TensorFlowNET.Core/Tensors/Tensor.cs View File

@@ -6,6 +6,7 @@ using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using static Tensorflow.c_api; using static Tensorflow.c_api;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
@@ -13,7 +14,7 @@ namespace Tensorflow
/// A tensor is a generalization of vectors and matrices to potentially higher dimensions. /// A tensor is a generalization of vectors and matrices to potentially higher dimensions.
/// Internally, TensorFlow represents tensors as n-dimensional arrays of base datatypes. /// Internally, TensorFlow represents tensors as n-dimensional arrays of base datatypes.
/// </summary> /// </summary>
public partial class Tensor : Python, IDisposable, ITensorOrOperation
public partial class Tensor : IDisposable, ITensorOrOperation
{ {
private readonly IntPtr _handle; private readonly IntPtr _handle;




+ 4
- 3
src/TensorFlowNET.Core/Train/Optimizer.cs View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using distribute_lib = Tensorflow.Distribute; using distribute_lib = Tensorflow.Distribute;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
@@ -12,7 +13,7 @@ namespace Tensorflow
/// class directly, but instead instantiate one of its subclasses such as /// class directly, but instead instantiate one of its subclasses such as
/// `GradientDescentOptimizer`, `AdagradOptimizer`, or `MomentumOptimizer`. /// `GradientDescentOptimizer`, `AdagradOptimizer`, or `MomentumOptimizer`.
/// </summary> /// </summary>
public abstract class Optimizer : Python
public abstract class Optimizer
{ {
// Values for gate_gradients. // Values for gate_gradients.
public static int GATE_NONE = 0; public static int GATE_NONE = 0;
@@ -89,8 +90,8 @@ namespace Tensorflow
$" that do not support gradients, between variables {string.Join(",", vars_with_grad.Select(x => x.name))} and loss {loss}."); $" that do not support gradients, between variables {string.Join(",", vars_with_grad.Select(x => x.name))} and loss {loss}.");


return apply_gradients(grads_and_vars, global_step:global_step, name:name); return apply_gradients(grads_and_vars, global_step:global_step, name:name);
}
}
/// <summary> /// <summary>
/// Apply gradients to variables. /// Apply gradients to variables.
/// ///


+ 2
- 1
src/TensorFlowNET.Core/Train/Saving/BaseSaverBuilder.cs View File

@@ -3,10 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Tensorflow.Operations; using Tensorflow.Operations;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public class BaseSaverBuilder : Python
public class BaseSaverBuilder
{ {
protected SaverDef.Types.CheckpointFormatVersion _write_version; protected SaverDef.Types.CheckpointFormatVersion _write_version;




+ 1
- 0
src/TensorFlowNET.Core/Variables/RefVariable.Operators.cs View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {


+ 1
- 0
src/TensorFlowNET.Core/Variables/RefVariable.cs View File

@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {


+ 2
- 1
src/TensorFlowNET.Core/Variables/VariableScope.cs View File

@@ -1,13 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
/// <summary> /// <summary>
/// Variable scope object to carry defaults to provide to `get_variable` /// Variable scope object to carry defaults to provide to `get_variable`
/// </summary> /// </summary>
public class VariableScope : Python
public class VariableScope
{ {
public bool use_resource { get; set; } public bool use_resource { get; set; }
private _ReuseMode _reuse; private _ReuseMode _reuse;


+ 2
- 1
src/TensorFlowNET.Core/Variables/VariableV1.cs View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
@@ -14,7 +15,7 @@ namespace Tensorflow
/// the variable are fixed. The value can be changed using one of the assign methods. /// the variable are fixed. The value can be changed using one of the assign methods.
/// https://tensorflow.org/guide/variables /// https://tensorflow.org/guide/variables
/// </summary> /// </summary>
public class VariableV1 : Python
public class VariableV1
{ {
public VariableV1(object initial_value = null, public VariableV1(object initial_value = null,
bool trainable = true, bool trainable = true,


+ 11
- 10
src/TensorFlowNET.Core/ops.py.cs View File

@@ -8,10 +8,11 @@ using Google.Protobuf;
using System.Linq; using System.Linq;
using NumSharp; using NumSharp;
using System.ComponentModel; using System.ComponentModel;
using static Tensorflow.Python;


namespace Tensorflow namespace Tensorflow
{ {
public partial class ops : Python
public partial class ops
{ {
public static void add_to_collection<T>(string name, T value) public static void add_to_collection<T>(string name, T value)
{ {
@@ -49,7 +50,7 @@ namespace Tensorflow
return get_default_graph().get_collection_ref(key); return get_default_graph().get_collection_ref(key);
} }


private static Graph default_graph;
private static Graph default_graph;
/// <summary> /// <summary>
/// Returns the default graph for the current thread. /// Returns the default graph for the current thread.
/// ///
@@ -60,8 +61,8 @@ namespace Tensorflow
/// NOTE: The default graph is a property of the current thread.If you /// NOTE: The default graph is a property of the current thread.If you
/// create a new thread, and wish to use the default graph in that /// create a new thread, and wish to use the default graph in that
/// thread, you must explicitly add a `with g.as_default():` in that /// thread, you must explicitly add a `with g.as_default():` in that
/// thread's function.
/// </summary>
/// thread's function.
/// </summary>
/// <returns></returns> /// <returns></returns>
public static Graph get_default_graph() public static Graph get_default_graph()
{ {
@@ -76,8 +77,8 @@ namespace Tensorflow
//TODO: original source does not have a 'set_default_graph' and indicates there should be a _default_graph_stack! //TODO: original source does not have a 'set_default_graph' and indicates there should be a _default_graph_stack!
default_graph = graph; default_graph = graph;
return default_graph; return default_graph;
}
}
/// <summary> /// <summary>
/// Clears the default graph stack and resets the global default graph. /// Clears the default graph stack and resets the global default graph.
/// ///
@@ -85,8 +86,8 @@ namespace Tensorflow
/// function applies only to the current thread.Calling this function while /// function applies only to the current thread.Calling this function while
/// a `tf.Session` or `tf.InteractiveSession` is active will result in undefined /// a `tf.Session` or `tf.InteractiveSession` is active will result in undefined
/// behavior. Using any previously created `tf.Operation` or `tf.Tensor` objects /// behavior. Using any previously created `tf.Operation` or `tf.Tensor` objects
/// after calling this function will result in undefined behavior.
/// </summary>
/// after calling this function will result in undefined behavior.
/// </summary>
/// <returns></returns> /// <returns></returns>
public static void reset_default_graph() public static void reset_default_graph()
{ {
@@ -138,8 +139,8 @@ namespace Tensorflow
public static Tensor internal_convert_to_tensor_or_composite(Tensor value, TF_DataType dtype = TF_DataType.DtInvalid, string name = null, bool as_ref = false) public static Tensor internal_convert_to_tensor_or_composite(Tensor value, TF_DataType dtype = TF_DataType.DtInvalid, string name = null, bool as_ref = false)
{ {
return internal_convert_to_tensor(value, dtype: dtype, name: name, as_ref: as_ref); return internal_convert_to_tensor(value, dtype: dtype, name: name, as_ref: as_ref);
}
}
/// <summary> /// <summary>
/// Wrapper for `Graph.control_dependencies()` using the default graph. /// Wrapper for `Graph.control_dependencies()` using the default graph.
/// ///


+ 2
- 1
test/TensorFlowNET.Examples/BasicOperations.cs View File

@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -10,7 +11,7 @@ namespace TensorFlowNET.Examples
/// Basic Operations example using TensorFlow library. /// Basic Operations example using TensorFlow library.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/basic_operations.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/basic_operations.py
/// </summary> /// </summary>
public class BasicOperations : Python, IExample
public class BasicOperations : IExample
{ {
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;
public int Priority => 2; public int Priority => 2;


+ 2
- 1
test/TensorFlowNET.Examples/HelloWorld.cs View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -9,7 +10,7 @@ namespace TensorFlowNET.Examples
/// Simple hello world using TensorFlow /// Simple hello world using TensorFlow
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/helloworld.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/helloworld.py
/// </summary> /// </summary>
public class HelloWorld : Python, IExample
public class HelloWorld : IExample
{ {
public int Priority => 1; public int Priority => 1;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/ImageRecognitionInception.cs View File

@@ -9,6 +9,7 @@ using System.Net;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using System.Drawing; using System.Drawing;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -17,7 +18,7 @@ namespace TensorFlowNET.Examples
/// that has been shown to attain greater than 78.1% accuracy on the ImageNet dataset. /// that has been shown to attain greater than 78.1% accuracy on the ImageNet dataset.
/// The model is the culmination of many ideas developed by multiple researchers over the years. /// The model is the culmination of many ideas developed by multiple researchers over the years.
/// </summary> /// </summary>
public class ImageRecognitionInception : Python, IExample
public class ImageRecognitionInception : IExample
{ {
public int Priority => 7; public int Priority => 7;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/InceptionArchGoogLeNet.cs View File

@@ -10,6 +10,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -17,7 +18,7 @@ namespace TensorFlowNET.Examples
/// Inception Architecture for Computer Vision /// Inception Architecture for Computer Vision
/// Port from tensorflow\examples\label_image\label_image.py /// Port from tensorflow\examples\label_image\label_image.py
/// </summary> /// </summary>
public class InceptionArchGoogLeNet : Python, IExample
public class InceptionArchGoogLeNet : IExample
{ {
public bool Enabled { get; set; } = false; public bool Enabled { get; set; } = false;
public int Priority => 100; public int Priority => 100;


+ 2
- 1
test/TensorFlowNET.Examples/KMeansClustering.cs View File

@@ -7,6 +7,7 @@ using System.Text;
using Tensorflow; using Tensorflow;
using Tensorflow.Clustering; using Tensorflow.Clustering;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -15,7 +16,7 @@ namespace TensorFlowNET.Examples
/// handwritten digit images. /// handwritten digit images.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/kmeans.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/kmeans.py
/// </summary> /// </summary>
public class KMeansClustering : Python, IExample
public class KMeansClustering : IExample
{ {
public int Priority => 8; public int Priority => 8;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/LinearRegression.cs View File

@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -10,7 +11,7 @@ namespace TensorFlowNET.Examples
/// A linear regression learning algorithm example using TensorFlow library. /// A linear regression learning algorithm example using TensorFlow library.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py
/// </summary> /// </summary>
public class LinearRegression : Python, IExample
public class LinearRegression : IExample
{ {
public int Priority => 3; public int Priority => 3;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/LogisticRegression.cs View File

@@ -7,6 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -15,7 +16,7 @@ namespace TensorFlowNET.Examples
/// This example is using the MNIST database of handwritten digits /// This example is using the MNIST database of handwritten digits
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/logistic_regression.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/logistic_regression.py
/// </summary> /// </summary>
public class LogisticRegression : Python, IExample
public class LogisticRegression : IExample
{ {
public int Priority => 4; public int Priority => 4;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/MetaGraph.cs View File

@@ -4,10 +4,11 @@ using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
public class MetaGraph : Python, IExample
public class MetaGraph : IExample
{ {
public int Priority => 100; public int Priority => 100;
public bool Enabled { get; set; } = false; public bool Enabled { get; set; } = false;


+ 2
- 1
test/TensorFlowNET.Examples/NaiveBayesClassifier.cs View File

@@ -4,13 +4,14 @@ using System.Text;
using Tensorflow; using Tensorflow;
using NumSharp; using NumSharp;
using System.Linq; using System.Linq;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
/// <summary> /// <summary>
/// https://github.com/nicolov/naive_bayes_tensorflow /// https://github.com/nicolov/naive_bayes_tensorflow
/// </summary> /// </summary>
public class NaiveBayesClassifier : Python, IExample
public class NaiveBayesClassifier : IExample
{ {
public int Priority => 6; public int Priority => 6;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/NamedEntityRecognition.cs View File

@@ -2,13 +2,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
/// <summary> /// <summary>
/// https://github.com/guillaumegenthial/tf_ner /// https://github.com/guillaumegenthial/tf_ner
/// </summary> /// </summary>
public class NamedEntityRecognition : Python, IExample
public class NamedEntityRecognition : IExample
{ {
public int Priority => 100; public int Priority => 100;
public bool Enabled { get; set; } = false; public bool Enabled { get; set; } = false;


+ 2
- 1
test/TensorFlowNET.Examples/NearestNeighbor.cs View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -12,7 +13,7 @@ namespace TensorFlowNET.Examples
/// This example is using the MNIST database of handwritten digits /// This example is using the MNIST database of handwritten digits
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/nearest_neighbor.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/nearest_neighbor.py
/// </summary> /// </summary>
public class NearestNeighbor : Python, IExample
public class NearestNeighbor : IExample
{ {
public int Priority => 5; public int Priority => 5;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/NeuralNetXor.cs View File

@@ -4,6 +4,7 @@ using System.Text;
using NumSharp; using NumSharp;
using Tensorflow; using Tensorflow;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;
namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -11,7 +12,7 @@ namespace TensorFlowNET.Examples
/// Simple vanilla neural net solving the famous XOR problem /// Simple vanilla neural net solving the famous XOR problem
/// https://github.com/amygdala/tensorflow-workshop/blob/master/workshop_sections/getting_started/xor/README.md /// https://github.com/amygdala/tensorflow-workshop/blob/master/workshop_sections/getting_started/xor/README.md
/// </summary> /// </summary>
public class NeuralNetXor : Python, IExample
public class NeuralNetXor : IExample
{ {
public int Priority => 10; public int Priority => 10;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/ObjectDetection.cs View File

@@ -9,11 +9,12 @@ using TensorFlowNET.Examples.Utility;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Linq; using System.Linq;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {


public class ObjectDetection : Python, IExample
public class ObjectDetection : IExample
{ {
public int Priority => 11; public int Priority => 11;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/Text/BinaryTextClassification.cs View File

@@ -6,6 +6,7 @@ using Newtonsoft.Json;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using NumSharp; using NumSharp;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -14,7 +15,7 @@ namespace TensorFlowNET.Examples
/// This is a binary—or two-class—classification, an important and widely applicable kind of machine learning problem. /// This is a binary—or two-class—classification, an important and widely applicable kind of machine learning problem.
/// https://github.com/tensorflow/docs/blob/master/site/en/tutorials/keras/basic_text_classification.ipynb /// https://github.com/tensorflow/docs/blob/master/site/en/tutorials/keras/basic_text_classification.ipynb
/// </summary> /// </summary>
public class BinaryTextClassification : Python, IExample
public class BinaryTextClassification : IExample
{ {
public int Priority => 9; public int Priority => 9;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/Text/NER/BiLstmCrfNer.cs View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -10,7 +11,7 @@ namespace TensorFlowNET.Examples
/// Bidirectional LSTM-CRF Models for Sequence Tagging /// Bidirectional LSTM-CRF Models for Sequence Tagging
/// https://github.com/guillaumegenthial/tf_ner/tree/master/models/lstm_crf /// https://github.com/guillaumegenthial/tf_ner/tree/master/models/lstm_crf
/// </summary> /// </summary>
public class BiLstmCrfNer : Python, IExample
public class BiLstmCrfNer : IExample
{ {
public int Priority => 13; public int Priority => 13;




+ 19
- 18
test/TensorFlowNET.Examples/Text/TextClassificationTrain.cs View File

@@ -10,13 +10,14 @@ using Tensorflow.Keras.Engine;
using TensorFlowNET.Examples.Text.cnn_models; using TensorFlowNET.Examples.Text.cnn_models;
using TensorFlowNET.Examples.TextClassification; using TensorFlowNET.Examples.TextClassification;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples.CnnTextClassification namespace TensorFlowNET.Examples.CnnTextClassification
{ {
/// <summary> /// <summary>
/// https://github.com/dongjun-Lee/text-classification-models-tf /// https://github.com/dongjun-Lee/text-classification-models-tf
/// </summary> /// </summary>
public class TextClassificationTrain : Python, IExample
public class TextClassificationTrain : IExample
{ {
public int Priority => 100; public int Priority => 100;
public bool Enabled { get; set; } = false; public bool Enabled { get; set; } = false;
@@ -53,8 +54,8 @@ namespace TensorFlowNET.Examples.CnnTextClassification
Console.WriteLine("Building dataset..."); Console.WriteLine("Building dataset...");
var (x, y, alphabet_size) = DataHelpers.build_char_dataset("train", model_name, CHAR_MAX_LEN, DataLimit); var (x, y, alphabet_size) = DataHelpers.build_char_dataset("train", model_name, CHAR_MAX_LEN, DataLimit);


var (train_x, valid_x, train_y, valid_y) = train_test_split(x, y, test_size: 0.15f);
var (train_x, valid_x, train_y, valid_y) = train_test_split(x, y, test_size: 0.15f);
var meta_file = model_name + "_untrained.meta"; var meta_file = model_name + "_untrained.meta";
tf.train.import_meta_graph(Path.Join("graph", meta_file)); tf.train.import_meta_graph(Path.Join("graph", meta_file));


@@ -92,22 +93,22 @@ namespace TensorFlowNET.Examples.CnnTextClassification


var (train_x, valid_x, train_y, valid_y) = train_test_split(x, y, test_size: 0.15f); var (train_x, valid_x, train_y, valid_y) = train_test_split(x, y, test_size: 0.15f);


ITextClassificationModel model = null;
switch (model_name) // word_cnn | char_cnn | vd_cnn | word_rnn | att_rnn | rcnn
{
case "word_cnn":
case "char_cnn":
case "word_rnn":
case "att_rnn":
case "rcnn":
throw new NotImplementedException();
break;
ITextClassificationModel model = null;
switch (model_name) // word_cnn | char_cnn | vd_cnn | word_rnn | att_rnn | rcnn
{
case "word_cnn":
case "char_cnn":
case "word_rnn":
case "att_rnn":
case "rcnn":
throw new NotImplementedException();
break;
case "vd_cnn": case "vd_cnn":
model=new VdCnn(alphabet_size, CHAR_MAX_LEN, NUM_CLASS);
break;
}
// todo train the model
return false;
model=new VdCnn(alphabet_size, CHAR_MAX_LEN, NUM_CLASS);
break;
}
// todo train the model
return false;
} }


private (int[][], int[][], int[], int[]) train_test_split(int[][] x, int[] y, float test_size = 0.3f) private (int[][], int[][], int[], int[]) train_test_split(int[][] x, int[] y, float test_size = 0.3f)


+ 2
- 1
test/TensorFlowNET.Examples/Text/Word2Vec.cs View File

@@ -6,6 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using TensorFlowNET.Examples.Utility; using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples namespace TensorFlowNET.Examples
{ {
@@ -13,7 +14,7 @@ namespace TensorFlowNET.Examples
/// Implement Word2Vec algorithm to compute vector representations of words. /// Implement Word2Vec algorithm to compute vector representations of words.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/word2vec.py /// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/word2vec.py
/// </summary> /// </summary>
public class Word2Vec : Python, IExample
public class Word2Vec : IExample
{ {
public int Priority => 12; public int Priority => 12;
public bool Enabled { get; set; } = true; public bool Enabled { get; set; } = true;


+ 2
- 1
test/TensorFlowNET.Examples/Text/cnn_models/VdCnn.cs View File

@@ -4,10 +4,11 @@ using System.Linq;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using TensorFlowNET.Examples.Text.cnn_models; using TensorFlowNET.Examples.Text.cnn_models;
using static Tensorflow.Python;


namespace TensorFlowNET.Examples.TextClassification namespace TensorFlowNET.Examples.TextClassification
{ {
public class VdCnn : Python, ITextClassificationModel
public class VdCnn : ITextClassificationModel
{ {
private int embedding_size; private int embedding_size;
private int[] filter_sizes; private int[] filter_sizes;


+ 2
- 1
test/TensorFlowNET.UnitTest/CApiTest.cs View File

@@ -3,10 +3,11 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
public class CApiTest : Python
public class CApiTest
{ {
protected TF_Code TF_OK = TF_Code.TF_OK; protected TF_Code TF_OK = TF_Code.TF_OK;
protected TF_DataType TF_FLOAT = TF_DataType.TF_FLOAT; protected TF_DataType TF_FLOAT = TF_DataType.TF_FLOAT;


+ 2
- 1
test/TensorFlowNET.UnitTest/ConstantTest.cs View File

@@ -6,11 +6,12 @@ using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
[TestClass] [TestClass]
public class ConstantTest : Python
public class ConstantTest
{ {
Status status = new Status(); Status status = new Status();




+ 2
- 1
test/TensorFlowNET.UnitTest/NameScopeTest.cs View File

@@ -3,11 +3,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
[TestClass] [TestClass]
public class NameScopeTest : Python
public class NameScopeTest
{ {
Graph g = ops.get_default_graph(); Graph g = ops.get_default_graph();
string name = ""; string name = "";


+ 2
- 1
test/TensorFlowNET.UnitTest/PlaceholderTest.cs View File

@@ -3,11 +3,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
[TestClass] [TestClass]
public class PlaceholderTest : Python
public class PlaceholderTest
{ {
[TestMethod] [TestMethod]
public void placeholder() public void placeholder()


+ 1
- 0
test/TensorFlowNET.UnitTest/PythonBaseTests.cs View File

@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {


+ 2
- 1
test/TensorFlowNET.UnitTest/PythonTest.cs View File

@@ -8,13 +8,14 @@ using Newtonsoft.Json.Linq;
using NumSharp; using NumSharp;
using Tensorflow; using Tensorflow;
using Tensorflow.Util; using Tensorflow.Util;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
/// <summary> /// <summary>
/// Use as base class for test classes to get additional assertions /// Use as base class for test classes to get additional assertions
/// </summary> /// </summary>
public class PythonTest : Python
public class PythonTest
{ {
#region python compatibility layer #region python compatibility layer
protected PythonTest self { get => this; } protected PythonTest self { get => this; }


+ 1
- 0
test/TensorFlowNET.UnitTest/SessionTest.cs View File

@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {


+ 2
- 1
test/TensorFlowNET.UnitTest/TrainSaverTest.cs View File

@@ -4,11 +4,12 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
[TestClass] [TestClass]
public class TrainSaverTest : Python
public class TrainSaverTest
{ {
public void ExportGraph() public void ExportGraph()
{ {


+ 2
- 1
test/TensorFlowNET.UnitTest/VariableTest.cs View File

@@ -3,11 +3,12 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;


namespace TensorFlowNET.UnitTest namespace TensorFlowNET.UnitTest
{ {
[TestClass] [TestClass]
public class VariableTest : Python
public class VariableTest
{ {
[TestMethod] [TestMethod]
public void Initializer() public void Initializer()


+ 1
- 0
test/TensorFlowNET.UnitTest/control_flow_ops_test/CondTestCases.cs View File

@@ -2,6 +2,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.control_flow_ops_test namespace TensorFlowNET.UnitTest.control_flow_ops_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/control_flow_ops_test/WhileContextTestCase.cs View File

@@ -5,6 +5,7 @@ using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tensorflow; using Tensorflow;
using Tensorflow.Operations; using Tensorflow.Operations;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.control_flow_ops_test namespace TensorFlowNET.UnitTest.control_flow_ops_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/gradients_test/GradientsTest.cs View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.gradients_test namespace TensorFlowNET.UnitTest.gradients_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/nest_test/NestTest.cs View File

@@ -6,6 +6,7 @@ using Newtonsoft.Json.Linq;
using NumSharp; using NumSharp;
using Tensorflow; using Tensorflow;
using Tensorflow.Util; using Tensorflow.Util;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.nest_test namespace TensorFlowNET.UnitTest.nest_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/nn_test/ZeroFractionTest.cs View File

@@ -5,6 +5,7 @@ using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using NumSharp; using NumSharp;
using Tensorflow; using Tensorflow;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.nn_test namespace TensorFlowNET.UnitTest.nn_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/ops_test/ControlDependenciesTest.cs View File

@@ -5,6 +5,7 @@ using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tensorflow; using Tensorflow;
using Tensorflow.Eager; using Tensorflow.Eager;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.ops_test namespace TensorFlowNET.UnitTest.ops_test
{ {


+ 1
- 0
test/TensorFlowNET.UnitTest/ops_test/CreateOpFromTfOperationTest.cs View File

@@ -5,6 +5,7 @@ using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Tensorflow; using Tensorflow;
using Tensorflow.Operations; using Tensorflow.Operations;
using static Tensorflow.Python;
namespace TensorFlowNET.UnitTest.ops_test namespace TensorFlowNET.UnitTest.ops_test
{ {


Loading…
Cancel
Save