Browse Source

add debug info

tags/v0.12
Oceania2018 6 years ago
parent
commit
66eddd6ba7
15 changed files with 142 additions and 46 deletions
  1. +1
    -1
      src/TensorFlowNET.Core/Framework/meta_graph.cs
  2. +1
    -0
      src/TensorFlowNET.Core/Framework/smart_module.cs
  3. +9
    -9
      src/TensorFlowNET.Core/Graphs/Graph.cs
  4. +2
    -0
      src/TensorFlowNET.Core/Operations/NnOps/gen_nn_ops.cs
  5. +0
    -4
      src/TensorFlowNET.Core/Operations/Operation.Control.cs
  6. +4
    -1
      src/TensorFlowNET.Core/Operations/Operation.Input.cs
  7. +7
    -1
      src/TensorFlowNET.Core/Operations/Operation.Output.cs
  8. +29
    -9
      src/TensorFlowNET.Core/Operations/Operation.cs
  9. +5
    -4
      src/TensorFlowNET.Core/TensorFlowNET.Core.csproj
  10. +7
    -0
      src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs
  11. +39
    -7
      src/TensorFlowNET.Core/Tensors/Tensor.cs
  12. +5
    -1
      src/TensorFlowNET.Core/Tensors/TensorShape.cs
  13. +1
    -1
      src/TensorFlowNET.Core/Train/ExponentialMovingAverage.cs
  14. +31
    -6
      src/TensorFlowNET.Core/ops.GraphKeys.cs
  15. +1
    -2
      test/TensorFlowNET.UnitTest/MultithreadingTests.cs

+ 1
- 1
src/TensorFlowNET.Core/Framework/meta_graph.cs View File

@@ -134,7 +134,7 @@ namespace Tensorflow
}
break;
default:
Console.WriteLine("import_scoped_meta_graph_with_return_elements");
Console.WriteLine($"import_scoped_meta_graph_with_return_elements {col.Key}");
continue;
}
}


+ 1
- 0
src/TensorFlowNET.Core/Framework/smart_module.cs View File

@@ -15,6 +15,7 @@
******************************************************************************/

using System;
using static Tensorflow.Binding;

namespace Tensorflow.Framework
{


+ 9
- 9
src/TensorFlowNET.Core/Graphs/Graph.cs View File

@@ -75,7 +75,7 @@ namespace Tensorflow
/// then create a TensorFlow session to run parts of the graph across a set of local and remote devices.
/// </summary>
/// <remarks>https://www.tensorflow.org/guide/graphs <br></br>https://www.tensorflow.org/api_docs/python/tf/Graph</remarks>
public partial class Graph : DisposableObject, IEnumerable<Operation>
public partial class Graph : DisposableObject//, IEnumerable<Operation>
{
private Dictionary<int, ITensorOrOperation> _nodes_by_id;
public Dictionary<string, ITensorOrOperation> _nodes_by_name;
@@ -257,17 +257,17 @@ namespace Tensorflow
if (inputs == null)
inputs = new Tensor[0];

foreach ((int idx, Tensor a) in enumerate(inputs))
{

}

if (String.IsNullOrEmpty(name))
if (string.IsNullOrEmpty(name))
name = op_type;
// If a names ends with a '/' it is a "name scope" and we use it as-is,
// after removing the trailing '/'.
name = name.EndsWith("/") ? ops.name_from_scope_name(name) : unique_name(name);
var node_def = ops._NodeDef(op_type, name, device: "", attrs: attrs);
if (name.Contains("define_loss/bigger_box_loss/mul_13"))
{
}

var input_ops = inputs.Select(x => x.op).ToArray();
var control_inputs = _control_dependencies_for_inputs(input_ops);
@@ -526,14 +526,14 @@ namespace Tensorflow
return debugString;*/
}

private IEnumerable<Operation> GetEnumerable()
/*private IEnumerable<Operation> GetEnumerable()
=> c_api_util.tf_operations(this);

IEnumerator<Operation> IEnumerable<Operation>.GetEnumerator()
=> GetEnumerable().GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=> throw new NotImplementedException();
=> throw new NotImplementedException();*/

public static implicit operator IntPtr(Graph graph)
{


+ 2
- 0
src/TensorFlowNET.Core/Operations/NnOps/gen_nn_ops.cs View File

@@ -14,6 +14,8 @@
limitations under the License.
******************************************************************************/

using static Tensorflow.Binding;

namespace Tensorflow.Operations
{
public class gen_nn_ops


+ 0
- 4
src/TensorFlowNET.Core/Operations/Operation.Control.cs View File

@@ -54,10 +54,6 @@ namespace Tensorflow
public void _set_control_flow_context(ControlFlowContext ctx)
{
if(name == "define_loss/conv_sobj_branch/batch_normalization/cond/FusedBatchNorm_1")
{
}
_control_flow_context = ctx;
}


+ 4
- 1
src/TensorFlowNET.Core/Operations/Operation.Input.cs View File

@@ -14,6 +14,7 @@
limitations under the License.
******************************************************************************/
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Runtime.InteropServices;
@@ -37,7 +38,9 @@ namespace Tensorflow
}
return num;
}
#if SERIALIZABLE
[JsonIgnore]
#endif
public int NumInputs => c_api.TF_OperationNumInputs(_handle);
private TF_DataType[] _input_types => _inputs._inputs.Select(x => x.dtype).ToArray();


+ 7
- 1
src/TensorFlowNET.Core/Operations/Operation.Output.cs View File

@@ -14,6 +14,7 @@
limitations under the License.
******************************************************************************/

using Newtonsoft.Json;
using System;
using System.Linq;
using System.Runtime.InteropServices;
@@ -23,6 +24,9 @@ namespace Tensorflow
{
public partial class Operation
{
#if SERIALIZABLE
[JsonIgnore]
#endif
public int NumOutputs => c_api.TF_OperationNumOutputs(_handle);
public TF_DataType OutputType(int index) => c_api.TF_OperationOutputType(_tf_output(index));

@@ -40,7 +44,9 @@ namespace Tensorflow

private Tensor[] _outputs;
public Tensor[] outputs => _outputs;

#if SERIALIZABLE
[JsonIgnore]
#endif
public Tensor output => _outputs.FirstOrDefault();

public int NumControlOutputs => c_api.TF_OperationNumControlOutputs(_handle);


+ 29
- 9
src/TensorFlowNET.Core/Operations/Operation.cs View File

@@ -15,6 +15,9 @@
******************************************************************************/

using Google.Protobuf.Collections;
#if SERIALIZABLE
using Newtonsoft.Json;
#endif
using System;
using System.Collections.Generic;
using System.IO;
@@ -43,20 +46,37 @@ namespace Tensorflow
/// </summary>
public partial class Operation : ITensorOrOperation
{
private readonly IntPtr _handle; // _c_op in python
private readonly Graph _graph;
private NodeDef _node_def;
private readonly IntPtr _handle; // _c_op in python

public string type => OpType;
public Graph graph => _graph;
public int _id => _id_value;
public int _id_value;
private readonly Graph _graph;
private NodeDef _node_def;
#if SERIALIZABLE
[JsonIgnore]
#endif
public string type => OpType;
#if SERIALIZABLE
[JsonIgnore]
#endif
public Graph graph => _graph;
#if SERIALIZABLE
[JsonIgnore]
#endif
public int _id => _id_value;
#if SERIALIZABLE
[JsonIgnore]
#endif
public int _id_value;
#if SERIALIZABLE
[JsonIgnore]
#endif
public Operation op => this;
public TF_DataType dtype => TF_DataType.DtInvalid;
public string name => _handle == IntPtr.Zero ? null : c_api.StringPiece(c_api.TF_OperationName(_handle));
public string OpType => _handle == IntPtr.Zero ? null : c_api.StringPiece(c_api.TF_OperationOpType(_handle));
public string Device => _handle == IntPtr.Zero ? null : c_api.StringPiece(c_api.TF_OperationDevice(_handle));

public string Device => _handle == IntPtr.Zero ? null : c_api.StringPiece(c_api.TF_OperationDevice(_handle));
#if SERIALIZABLE
[JsonIgnore]
#endif
public NodeDef node_def
{
get


+ 5
- 4
src/TensorFlowNET.Core/TensorFlowNET.Core.csproj View File

@@ -5,7 +5,7 @@
<AssemblyName>TensorFlow.NET</AssemblyName>
<RootNamespace>Tensorflow</RootNamespace>
<TargetTensorFlow>1.14.0</TargetTensorFlow>
<Version>0.11.7</Version>
<Version>0.11.8</Version>
<Authors>Haiping Chen, Meinrad Recheis, Eli Belash</Authors>
<Company>SciSharp STACK</Company>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
@@ -17,7 +17,7 @@
<PackageTags>TensorFlow, NumSharp, SciSharp, MachineLearning, TensorFlow.NET, C#</PackageTags>
<Description>Google's TensorFlow full binding in .NET Standard.
Docs: https://tensorflownet.readthedocs.io</Description>
<AssemblyVersion>0.11.7.0</AssemblyVersion>
<AssemblyVersion>0.11.8.0</AssemblyVersion>
<PackageReleaseNotes>Changes since v0.10.0:
1. Upgrade NumSharp to v0.20.3.
2. Add DisposableObject class to manage object lifetime.
@@ -34,7 +34,7 @@ Docs: https://tensorflownet.readthedocs.io</Description>
13. Return VariableV1 instead of RefVariable.
14. Add Tensor overload to GradientDescentOptimizer.</PackageReleaseNotes>
<LangVersion>7.3</LangVersion>
<FileVersion>0.11.7.0</FileVersion>
<FileVersion>0.11.8.0</FileVersion>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<SignAssembly>true</SignAssembly>
@@ -43,7 +43,7 @@ Docs: https://tensorflownet.readthedocs.io</Description>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;SERIALIZABLE</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@@ -66,6 +66,7 @@ Docs: https://tensorflownet.readthedocs.io</Description>

<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.5.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="NumSharp" Version="0.20.4" />
</ItemGroup>



+ 7
- 0
src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs View File

@@ -25,6 +25,7 @@ using System.Text;
using NumSharp.Backends;
using NumSharp.Backends.Unmanaged;
using static Tensorflow.c_api;
using Newtonsoft.Json;

namespace Tensorflow
{
@@ -44,11 +45,17 @@ namespace Tensorflow
/// <summary>
/// True if this Tensor holds data allocated by C#.
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public bool IsMemoryOwner => AllocationType >= AllocationType.Marshal;

/// <summary>
/// The allocation method used to create this Tensor.
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public AllocationType AllocationType { get; protected set; }

/// <summary>


+ 39
- 7
src/TensorFlowNET.Core/Tensors/Tensor.cs View File

@@ -28,6 +28,7 @@ using NumSharp.Backends;
using NumSharp.Backends.Unmanaged;
using NumSharp.Utilities;
using Tensorflow.Framework;
using Newtonsoft.Json;

namespace Tensorflow
{
@@ -43,19 +44,29 @@ namespace Tensorflow
private readonly int _value_index;
private TF_Output? _tf_output;
private readonly TF_DataType _override_dtype;

#if SERIALIZABLE
[JsonIgnore]
#endif
public int Id => _id;

/// <summary>
/// The Graph that contains this tensor.
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public Graph graph => op?.graph;

/// <summary>
/// The Operation that produces this tensor as an output.
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public Operation op => _op;

#if SERIALIZABLE
[JsonIgnore]
#endif
public Tensor[] outputs => op.outputs;

/// <summary>
@@ -72,24 +83,40 @@ namespace Tensorflow
/// The DType of elements in this tensor.
/// </summary>
public TF_DataType dtype => _handle == IntPtr.Zero ? _override_dtype : c_api.TF_TensorType(_handle);

#if SERIALIZABLE
[JsonIgnore]
#endif
public ulong bytesize => _handle == IntPtr.Zero ? 0 : c_api.TF_TensorByteSize(_handle);
#if SERIALIZABLE
[JsonIgnore]
#endif
public ulong itemsize => _handle == IntPtr.Zero ? 0 : c_api.TF_DataTypeSize(dtype);
#if SERIALIZABLE
[JsonIgnore]
#endif
public ulong size => _handle == IntPtr.Zero ? 0 : bytesize / itemsize;
public IntPtr buffer => _handle == IntPtr.Zero ? IntPtr.Zero : c_api.TF_TensorData(_handle);
private IntPtr buffer => _handle == IntPtr.Zero ? IntPtr.Zero : c_api.TF_TensorData(_handle);
public int num_consumers(TF_Output oper_out) => _handle == IntPtr.Zero ? 0 : c_api.TF_OperationOutputNumConsumers(oper_out);
#if SERIALIZABLE
[JsonIgnore]
#endif
public int NDims => rank;

/// <summary>
/// The name of the device on which this tensor will be produced, or null.
/// </summary>
public string Device => op.Device;

#if SERIALIZABLE
[JsonIgnore]
#endif
public int[] dims => shape;

/// <summary>
/// Used for keep other pointer when do implicit operating
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public object Tag { get; set; }


@@ -139,6 +166,9 @@ namespace Tensorflow
return rank < 0 ? null : shape;
}

#if SERIALIZABLE
[JsonIgnore]
#endif
public TensorShape TensorShape => rank < 0 ? new TensorShape() : tensor_util.to_shape(shape);

/// <summary>
@@ -479,9 +509,11 @@ namespace Tensorflow
} else
throw new InvalidOperationException($"Tensor.AllocationHandle is not null ({AllocationHandle}) but AllocationType is not matched to a C# allocation type ({AllocationType}).");
}

#if SERIALIZABLE
[JsonIgnore]
#endif
public bool IsDisposed => _disposed;

public int tensor_int_val { get; set; }
// public int tensor_int_val { get; set; }
}
}

+ 5
- 1
src/TensorFlowNET.Core/Tensors/TensorShape.cs View File

@@ -1,4 +1,5 @@
using NumSharp;
using Newtonsoft.Json;
using NumSharp;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
@@ -35,6 +36,9 @@ namespace Tensorflow
/// <summary>
/// Returns the size this shape represents.
/// </summary>
#if SERIALIZABLE
[JsonIgnore]
#endif
public int size
{
get


+ 1
- 1
src/TensorFlowNET.Core/Train/ExponentialMovingAverage.cs View File

@@ -46,7 +46,7 @@ namespace Tensorflow.Train
value,
name,
colocate_with_primary: true);
ops.add_to_collection(ops.GraphKeys.MOVING_AVERAGE_VARIABLES, var);
ops.add_to_collection(tf.GraphKeys.MOVING_AVERAGE_VARIABLES, var);
_averages[var] = avg;
}
else


+ 31
- 6
src/TensorFlowNET.Core/ops.GraphKeys.cs View File

@@ -30,8 +30,10 @@ namespace Tensorflow
public class GraphKeys
{
#region const

/// <summary>
/// Key to collect concatenated sharded variables.
/// </summary>
public const string CONCATENATED_VARIABLES_ = "concatenated_variables";
/// <summary>
/// the subset of `Variable` objects that will be trained by an optimizer.
/// </summary>
@@ -52,7 +54,12 @@ namespace Tensorflow
/// </summary>
public const string LOSSES_ = "losses";

public const string MOVING_AVERAGE_VARIABLES = "moving_average_variables";
public const string LOCAL_VARIABLES_ = "local_variables";

public const string METRIC_VARIABLES_ = "metric_variables";
public const string MODEL_VARIABLES_ = "model_variables";

public const string MOVING_AVERAGE_VARIABLES_ = "moving_average_variables";

/// <summary>
/// Key to collect Variable objects that are global (shared across machines).
@@ -64,7 +71,21 @@ namespace Tensorflow

public const string GLOBAL_STEP_ = "global_step";

public string[] _VARIABLE_COLLECTIONS_ = new string[] { "variables", "trainable_variables", "model_variables" };
/// <summary>
/// List of all collections that keep track of variables.
/// </summary>
public string[] _VARIABLE_COLLECTIONS_ = new string[]
{
GLOBAL_VARIABLES_,
LOCAL_VARIABLES_,
METRIC_VARIABLES_,
MODEL_VARIABLES_,
TRAINABLE_VARIABLES_,
MOVING_AVERAGE_VARIABLES_,
CONCATENATED_VARIABLES_,
TRAINABLE_RESOURCE_VARIABLES_
};

/// <summary>
/// Key to collect BaseSaverBuilder.SaveableObject instances for checkpointing.
/// </summary>
@@ -86,7 +107,8 @@ namespace Tensorflow

#endregion


public string CONCATENATED_VARIABLES => CONCATENATED_VARIABLES_;
/// <summary>
/// the subset of `Variable` objects that will be trained by an optimizer.
/// </summary>
@@ -106,13 +128,16 @@ namespace Tensorflow
/// Key to collect local variables that are local to the machine and are not
/// saved/restored.
/// </summary>
public string LOCAL_VARIABLES = "local_variables";
public string LOCAL_VARIABLES = LOCAL_VARIABLES_;

/// <summary>
/// Key to collect losses
/// </summary>
public string LOSSES => LOSSES_;

public string METRIC_VARIABLES => METRIC_VARIABLES_;
public string MOVING_AVERAGE_VARIABLES = MOVING_AVERAGE_VARIABLES_;

/// <summary>
/// Key to collect Variable objects that are global (shared across machines).
/// Default collection for all variables, except local ones.


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

@@ -82,8 +82,7 @@ namespace TensorFlowNET.UnitTest
var sess_graph = sess.GetPrivate<Graph>("_graph");
sess_graph.Should().NotBeNull();
default_graph.Should().NotBeNull()
.And.BeEquivalentTo(sess_graph)
.And.BeEquivalentTo(beforehand);
.And.BeEquivalentTo(sess_graph);

Console.WriteLine($"{tid}-{default_graph.graph_key}");



Loading…
Cancel
Save