Browse Source

gen_math_ops.mul(x, y)

tags/v0.1.0-Tensor
Oceania2018 6 years ago
parent
commit
35141c54b9
17 changed files with 180 additions and 45 deletions
  1. +0
    -6
      TensorFlow.NET.sln
  2. +5
    -0
      src/TensorFlowNET.Core/APIs/tf.math.cs
  3. +1
    -0
      src/TensorFlowNET.Core/Graphs/Graph.cs
  4. +41
    -15
      src/TensorFlowNET.Core/Operations/OpDefLibrary.cs
  5. +11
    -0
      src/TensorFlowNET.Core/Operations/gen_math_ops.cs
  6. +16
    -4
      src/TensorFlowNET.Core/Sessions/BaseSession.cs
  7. +1
    -5
      src/TensorFlowNET.Core/TensorFlowNET.Core.csproj
  8. +7
    -5
      src/TensorFlowNET.Core/Tensors/RefVariable.cs
  9. +1
    -1
      src/TensorFlowNET.Core/Tensors/Variable.cs
  10. +8
    -0
      src/TensorFlowNET.Core/Tensors/dtypes.cs
  11. +4
    -2
      src/TensorFlowNET.Core/tf.cs
  12. +38
    -0
      test/TensorFlowNET.Examples/BasicEagerApi.cs
  13. +2
    -2
      test/TensorFlowNET.Examples/BasicOperations.cs
  14. +42
    -0
      test/TensorFlowNET.Examples/LinearRegression.cs
  15. +1
    -2
      test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj
  16. +1
    -2
      test/TensorFlowNET.UnitTest/TensorFlowNET.UnitTest.csproj
  17. +1
    -1
      test/TensorFlowNET.UnitTest/VariableTest.cs

+ 0
- 6
TensorFlow.NET.sln View File

@@ -9,8 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Core", "src\T
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Examples", "test\TensorFlowNET.Examples\TensorFlowNET.Examples.csproj", "{1FE60088-157C-4140-91AB-E96B915E4BAE}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Examples", "test\TensorFlowNET.Examples\TensorFlowNET.Examples.csproj", "{1FE60088-157C-4140-91AB-E96B915E4BAE}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NumSharp.Core", "..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj", "{EC622ADF-8DAE-474B-B18E-9598A4F91BA2}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -29,10 +27,6 @@ Global
{1FE60088-157C-4140-91AB-E96B915E4BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU {1FE60088-157C-4140-91AB-E96B915E4BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE60088-157C-4140-91AB-E96B915E4BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FE60088-157C-4140-91AB-E96B915E4BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE60088-157C-4140-91AB-E96B915E4BAE}.Release|Any CPU.Build.0 = Release|Any CPU {1FE60088-157C-4140-91AB-E96B915E4BAE}.Release|Any CPU.Build.0 = Release|Any CPU
{EC622ADF-8DAE-474B-B18E-9598A4F91BA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC622ADF-8DAE-474B-B18E-9598A4F91BA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC622ADF-8DAE-474B-B18E-9598A4F91BA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC622ADF-8DAE-474B-B18E-9598A4F91BA2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE


+ 5
- 0
src/TensorFlowNET.Core/APIs/tf.math.cs View File

@@ -15,5 +15,10 @@ namespace Tensorflow
{ {
return gen_math_ops.mul(x, y); return gen_math_ops.mul(x, y);
} }

public static unsafe Tensor multiply(Tensor x, RefVariable y)
{
return gen_math_ops.mul(x, y);
}
} }
} }

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

@@ -24,6 +24,7 @@ namespace Tensorflow
private List<String> _unfetchable_ops = new List<string>(); private List<String> _unfetchable_ops = new List<string>();


private string _name_stack; private string _name_stack;
public string _graph_key;
public Status Status { get; } public Status Status { get; }


public Graph() public Graph()


+ 41
- 15
src/TensorFlowNET.Core/Operations/OpDefLibrary.cs View File

@@ -36,24 +36,50 @@ namespace Tensorflow
foreach (var input_arg in op_def.InputArg) foreach (var input_arg in op_def.InputArg)
{ {
var input_name = input_arg.Name; var input_name = input_arg.Name;
if (keywords.ContainsKey(input_name))
switch (keywords[input_name])
{ {
inputs.Add(keywords[input_name] as Tensor);
}

if (!String.IsNullOrEmpty(input_arg.TypeAttr))
{
attrs[input_arg.TypeAttr] = (keywords[input_name] as Tensor).dtype;
case Tensor value:
if (keywords.ContainsKey(input_name))
{
inputs.Add(value);
}

if (!String.IsNullOrEmpty(input_arg.TypeAttr))
{
attrs[input_arg.TypeAttr] = value.dtype;
}

if (input_arg.IsRef)
{

}
else
{
input_types.Add(value.dtype);
}
break;
case RefVariable value:
if (keywords.ContainsKey(input_name))
{
inputs.Add(value._initial_value);
}

if (!String.IsNullOrEmpty(input_arg.TypeAttr))
{
attrs[input_arg.TypeAttr] = value._initial_value.dtype;
}

if (input_arg.IsRef)
{

}
else
{
input_types.Add(value._initial_value.dtype);
}
break;
} }


if (input_arg.IsRef)
{

}
else
{
input_types.Add((keywords[input_name] as Tensor).dtype);
}
} }


// Process remaining attrs // Process remaining attrs


+ 11
- 0
src/TensorFlowNET.Core/Operations/gen_math_ops.cs View File

@@ -31,6 +31,17 @@ namespace Tensorflow
return new Tensor(_op, 0, _op.OutputType(0)); return new Tensor(_op, 0, _op.OutputType(0));
} }


public static Tensor mul(Tensor x, RefVariable y)
{
var keywords = new Dictionary<string, object>();
keywords.Add("x", x);
keywords.Add("y", y);

var _op = _op_def_lib._apply_op_helper("Mul", name: "mul", keywords: keywords);

return new Tensor(_op, 0, _op.OutputType(0));
}

public static Tensor mat_mul(Tensor a, Tensor b, bool transpose_a = false, bool transpose_b = false) public static Tensor mat_mul(Tensor a, Tensor b, bool transpose_a = false, bool transpose_b = false)
{ {
var keywords = new Dictionary<string, object>(); var keywords = new Dictionary<string, object>();


+ 16
- 4
src/TensorFlowNET.Core/Sessions/BaseSession.cs View File

@@ -124,25 +124,25 @@ namespace Tensorflow
// wired, don't know why we have to start from offset 9. // wired, don't know why we have to start from offset 9.
var bytes = tensor.Data(); var bytes = tensor.Data();
var output = UTF8Encoding.Default.GetString(bytes, 9, bytes.Length - 9); var output = UTF8Encoding.Default.GetString(bytes, 9, bytes.Length - 9);
result[i] = tensor.NDims == 0 ? output : np.array(output).reshape(ndims);
result[i] = fetchValue(tensor, ndims, output);
} }
break; break;
case TF_DataType.TF_FLOAT: case TF_DataType.TF_FLOAT:
{ {
var output = *(float*)c_api.TF_TensorData(output_values[i]); var output = *(float*)c_api.TF_TensorData(output_values[i]);
result[i] = tensor.NDims == 0 ? output : np.array(output).reshape(ndims);
result[i] = fetchValue(tensor, ndims, output);
} }
break; break;
case TF_DataType.TF_INT16: case TF_DataType.TF_INT16:
{ {
var output = *(short*)c_api.TF_TensorData(output_values[i]); var output = *(short*)c_api.TF_TensorData(output_values[i]);
result[i] = tensor.NDims == 0 ? output : np.array(output).reshape(ndims);
result[i] = fetchValue(tensor, ndims, output);
} }
break; break;
case TF_DataType.TF_INT32: case TF_DataType.TF_INT32:
{ {
var output = *(int*)c_api.TF_TensorData(output_values[i]); var output = *(int*)c_api.TF_TensorData(output_values[i]);
result[i] = tensor.NDims == 0 ? output : np.array(output).reshape(ndims);
result[i] = fetchValue(tensor, ndims, output);
} }
break; break;
default: default:
@@ -153,6 +153,18 @@ namespace Tensorflow
return result; return result;
} }


private object fetchValue<T>(Tensor tensor, int[] ndims, T output)
{
if (tensor.NDims == 0)
{
return output;
}
else
{
return np.array(output).reshape(ndims);
}
}

/// <summary> /// <summary>
/// If a tensor handle that is fed to a device incompatible placeholder, /// If a tensor handle that is fed to a device incompatible placeholder,
/// we move the tensor to the right device, generate a new tensor handle, /// we move the tensor to the right device, generate a new tensor handle,


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

@@ -36,15 +36,11 @@ Docs: https://tensorflownet.readthedocs.io</Description>


<ItemGroup> <ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.6.1" /> <PackageReference Include="Google.Protobuf" Version="3.6.1" />
<PackageReference Include="NumSharp" Version="0.6.3" />
<PackageReference Include="NumSharp" Version="0.6.4" />
</ItemGroup> </ItemGroup>


<ItemGroup> <ItemGroup>
<Content CopyToOutputDirectory="PreserveNewest" Include="./runtimes/win-x64/native/tensorflow.dll" Link="tensorflow.dll" Pack="true" PackagePath="runtimes/win-x64/native/tensorflow.dll" /> <Content CopyToOutputDirectory="PreserveNewest" Include="./runtimes/win-x64/native/tensorflow.dll" Link="tensorflow.dll" Pack="true" PackagePath="runtimes/win-x64/native/tensorflow.dll" />
</ItemGroup> </ItemGroup>


<ItemGroup>
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" />
</ItemGroup>

</Project> </Project>

+ 7
- 5
src/TensorFlowNET.Core/Tensors/RefVariable.cs View File

@@ -10,17 +10,19 @@ namespace Tensorflow
public Tensor _initial_value; public Tensor _initial_value;


public RefVariable(object initial_value, public RefVariable(object initial_value,
TF_DataType trainable,
string name = "",
TF_DataType trainable = TF_DataType.DtInvalid,
bool validate_shape = true) : bool validate_shape = true) :
base(initial_value, trainable, validate_shape)
base(initial_value, name, trainable, validate_shape)
{ {
_init_from_args(initial_value, trainable);
_init_from_args(initial_value, name, trainable);
} }


private void _init_from_args(object initial_value, private void _init_from_args(object initial_value,
TF_DataType trainable)
string name = "",
TF_DataType trainable = TF_DataType.DtInvalid)
{ {
var name = ops.name_scope("", "Variable", initial_value);
name = ops.name_scope("", "Variable", initial_value);
_initial_value = ops.convert_to_tensor(initial_value, name: "initial_value"); _initial_value = ops.convert_to_tensor(initial_value, name: "initial_value");
} }
} }


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

@@ -16,7 +16,7 @@ namespace Tensorflow
/// </summary> /// </summary>
public class Variable public class Variable
{ {
public Variable(object initial_value, TF_DataType trainable, bool validate_shape = true)
public Variable(object initial_value, string name = "", TF_DataType trainable = TF_DataType.DtInvalid, bool validate_shape = true)
{ {


} }


+ 8
- 0
src/TensorFlowNET.Core/Tensors/dtypes.cs View File

@@ -12,6 +12,14 @@ namespace Tensorflow
{ {
case TF_DataType.TF_INT32: case TF_DataType.TF_INT32:
return typeof(int); return typeof(int);
case TF_DataType.TF_INT16:
return typeof(short);
case TF_DataType.TF_FLOAT:
return typeof(float);
case TF_DataType.TF_DOUBLE:
return typeof(double);
case TF_DataType.TF_STRING:
return typeof(string);
default: default:
throw new NotImplementedException("as_numpy_datatype failed"); throw new NotImplementedException("as_numpy_datatype failed");
} }


+ 4
- 2
src/TensorFlowNET.Core/tf.cs View File

@@ -11,16 +11,18 @@ namespace Tensorflow
public static partial class tf public static partial class tf
{ {
public static TF_DataType int16 = TF_DataType.TF_INT16; public static TF_DataType int16 = TF_DataType.TF_INT16;
public static TF_DataType float16 = TF_DataType.TF_HALF;
public static TF_DataType float32 = TF_DataType.TF_FLOAT; public static TF_DataType float32 = TF_DataType.TF_FLOAT;
public static TF_DataType float64 = TF_DataType.TF_DOUBLE;
public static TF_DataType chars = TF_DataType.TF_STRING; public static TF_DataType chars = TF_DataType.TF_STRING;


public static Context context = new Context(); public static Context context = new Context();


public static Graph g = new Graph(c_api.TF_NewGraph()); public static Graph g = new Graph(c_api.TF_NewGraph());


public static object Variable<T>(T data, TF_DataType dtype = TF_DataType.DtInvalid)
public static RefVariable Variable<T>(T data, string name = "", TF_DataType dtype = TF_DataType.DtInvalid)
{ {
return new RefVariable(data, dtype);
return new RefVariable(data, name, dtype);
} }


public static unsafe Tensor placeholder(TF_DataType dtype, TensorShape shape = null) public static unsafe Tensor placeholder(TF_DataType dtype, TensorShape shape = null)


+ 38
- 0
test/TensorFlowNET.Examples/BasicEagerApi.cs View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Text;
using Tensorflow;

namespace TensorFlowNET.Examples
{
/// <summary>
/// Basic introduction to TensorFlow's Eager API.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/1_Introduction/basic_eager_api.py
/// </summary>
public class BasicEagerApi : IExample
{
private Tensor a, b, c, d;
public void Run()
{
// Set Eager API
Console.WriteLine("Setting Eager mode...");
tf.enable_eager_execution();

// Define constant tensors
Console.WriteLine("Define constant tensors");
a = tf.constant(2);
Console.WriteLine($"a = {a}");
b = tf.constant(3);
Console.WriteLine($"b = {b}");

// Run the operation without the need for tf.Session
Console.WriteLine("Running operations, without tf.Session");
c = a + b;
Console.WriteLine($"a + b = {c}");
d = a * b;
Console.WriteLine($"a * b = {d}");

// Full compatibility with Numpy
}
}
}

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

@@ -19,7 +19,7 @@ namespace TensorFlowNET.Examples
// Basic constant operations // Basic constant operations
// The value returned by the constructor represents the output // The value returned by the constructor represents the output
// of the Constant op. // of the Constant op.
/*var a = tf.constant(2);
var a = tf.constant(2);
var b = tf.constant(3); var b = tf.constant(3);
// Launch the default graph. // Launch the default graph.
@@ -50,7 +50,7 @@ namespace TensorFlowNET.Examples
// Run every operation with variable input // Run every operation with variable input
Console.WriteLine($"Addition with variables: {sess.run(add, feed_dict)}"); Console.WriteLine($"Addition with variables: {sess.run(add, feed_dict)}");
Console.WriteLine($"Multiplication with variables: {sess.run(mul, feed_dict)}"); Console.WriteLine($"Multiplication with variables: {sess.run(mul, feed_dict)}");
}*/
}


// ---------------- // ----------------
// More in details: // More in details:


+ 42
- 0
test/TensorFlowNET.Examples/LinearRegression.cs View File

@@ -0,0 +1,42 @@
using NumSharp.Core;
using System;
using System.Collections.Generic;
using System.Text;
using Tensorflow;

namespace TensorFlowNET.Examples
{
/// <summary>
/// A linear regression learning algorithm example using TensorFlow library.
/// https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py
/// </summary>
public class LinearRegression : IExample
{
private NumPyRandom rng = np.random;

public void Run()
{
// Parameters
double learning_rate = 0.01;
int training_epochs = 1000;
int display_step = 50;

// Training Data
var train_X = np.array(3.3, 4.4, 5.5, 6.71, 6.93, 4.168, 9.779, 6.182, 7.59, 2.167,
7.042, 10.791, 5.313, 7.997, 5.654, 9.27, 3.1);
var train_Y = np.array(1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221,
2.827, 3.465, 1.65, 2.904, 2.42, 2.94, 1.3);
var n_samples = train_X.shape[0];

// tf Graph Input
var X = tf.placeholder(tf.float64);
var Y = tf.placeholder(tf.float64);

// Set model weights
var W = tf.Variable(rng.randn<double>(), name: "weight");
var b = tf.Variable(rng.randn<double>(), name: "bias");

var aa = tf.multiply(X, W);
}
}
}

+ 1
- 2
test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj View File

@@ -6,11 +6,10 @@
</PropertyGroup> </PropertyGroup>


<ItemGroup> <ItemGroup>
<PackageReference Include="NumSharp" Version="0.6.3" />
<PackageReference Include="NumSharp" Version="0.6.4" />
</ItemGroup> </ItemGroup>


<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" />
<ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" /> <ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" />
</ItemGroup> </ItemGroup>




+ 1
- 2
test/TensorFlowNET.UnitTest/TensorFlowNET.UnitTest.csproj View File

@@ -19,11 +19,10 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" /> <PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" /> <PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
<PackageReference Include="NumSharp" Version="0.6.3" />
<PackageReference Include="NumSharp" Version="0.6.4" />
</ItemGroup> </ItemGroup>


<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" />
<ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" /> <ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" />
</ItemGroup> </ItemGroup>




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

@@ -12,7 +12,7 @@ namespace TensorFlowNET.UnitTest
[TestMethod] [TestMethod]
public void StringVar() public void StringVar()
{ {
var mammal1 = tf.Variable("Elephant", tf.chars);
var mammal1 = tf.Variable("Elephant", "var1", tf.chars);
var mammal2 = tf.Variable("Tiger"); var mammal2 = tf.Variable("Tiger");
} }




Loading…
Cancel
Save