| @@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Examples", "t | |||||
| EndProject | EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Core", "src\TensorFlowNET.Core\TensorFlowNET.Core.csproj", "{FD682AC0-7B2D-45D3-8B0D-C6D678B04144}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Core", "src\TensorFlowNET.Core\TensorFlowNET.Core.csproj", "{FD682AC0-7B2D-45D3-8B0D-C6D678B04144}" | ||||
| EndProject | EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NumSharp.Core", "..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj", "{1FE7246F-9273-42A8-841C-98051356FB67}" | |||||
| EndProject | |||||
| Global | Global | ||||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
| @@ -27,6 +29,10 @@ Global | |||||
| {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Debug|Any CPU.Build.0 = Debug|Any CPU | {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Release|Any CPU.ActiveCfg = Release|Any CPU | {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Release|Any CPU.Build.0 = Release|Any CPU | {FD682AC0-7B2D-45D3-8B0D-C6D678B04144}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| {1FE7246F-9273-42A8-841C-98051356FB67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
| {1FE7246F-9273-42A8-841C-98051356FB67}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
| {1FE7246F-9273-42A8-841C-98051356FB67}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
| {1FE7246F-9273-42A8-841C-98051356FB67}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
| EndGlobalSection | EndGlobalSection | ||||
| GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
| HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
| @@ -9,7 +9,7 @@ namespace Tensorflow | |||||
| { | { | ||||
| public static Tensor constant(NDArray nd, string name = "Const", bool verify_shape = false) | public static Tensor constant(NDArray nd, string name = "Const", bool verify_shape = false) | ||||
| { | { | ||||
| return constant_op.Create(nd, name, verify_shape); | |||||
| return constant_op.Constant(nd, name, verify_shape); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -21,14 +21,14 @@ namespace Tensorflow | |||||
| return gen_math_ops.mul(x, y); | return gen_math_ops.mul(x, y); | ||||
| } | } | ||||
| public static Tensor pow(Tensor x, Tensor y) | |||||
| public static Tensor pow(Tensor x, double y) | |||||
| { | { | ||||
| return gen_math_ops.pow(x, y); | return gen_math_ops.pow(x, y); | ||||
| } | } | ||||
| public static Tensor reduce_sum(Tensor input, int? axis = null) | |||||
| public static Tensor reduce_sum(Tensor input, int[] axis = null) | |||||
| { | { | ||||
| return gen_math_ops.sum(input, input); | |||||
| return gen_math_ops.sum(input, axis); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System; | |||||
| using NumSharp.Core; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.IO; | using System.IO; | ||||
| using System.Runtime.InteropServices; | using System.Runtime.InteropServices; | ||||
| @@ -21,21 +22,30 @@ namespace Tensorflow | |||||
| string scope = g.unique_name(name) + "/"; | string scope = g.unique_name(name) + "/"; | ||||
| var default_type_attr_map = new Dictionary<string, object>(); | |||||
| foreach (var attr_def in op_def.Attr) | foreach (var attr_def in op_def.Attr) | ||||
| { | { | ||||
| if (attr_def.Type != "type") continue; | if (attr_def.Type != "type") continue; | ||||
| var key = attr_def.Name; | var key = attr_def.Name; | ||||
| if(attr_def.DefaultValue != null) | |||||
| { | |||||
| default_type_attr_map[key] = attr_def.DefaultValue.Type; | |||||
| } | |||||
| } | } | ||||
| var attrs = new Dictionary<string, object>(); | var attrs = new Dictionary<string, object>(); | ||||
| // Perform input type inference | |||||
| var inputs = new List<Tensor>(); | var inputs = new List<Tensor>(); | ||||
| var input_types = new List<TF_DataType>(); | var input_types = new List<TF_DataType>(); | ||||
| // Perform input type inference | |||||
| 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[input_name] is double int_value) | |||||
| { | |||||
| keywords[input_name] = constant_op.Constant(int_value, input_name); | |||||
| } | |||||
| if (keywords[input_name] is Tensor value) | if (keywords[input_name] is Tensor value) | ||||
| { | { | ||||
| if (keywords.ContainsKey(input_name)) | if (keywords.ContainsKey(input_name)) | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System; | |||||
| using NumSharp.Core; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.IO; | using System.IO; | ||||
| using System.Text; | using System.Text; | ||||
| @@ -42,6 +43,17 @@ namespace Tensorflow | |||||
| return new Tensor(_op, 0, _op.OutputType(0)); | return new Tensor(_op, 0, _op.OutputType(0)); | ||||
| } | } | ||||
| public static Tensor real_div(Tensor x, Tensor y) | |||||
| { | |||||
| var keywords = new Dictionary<string, object>(); | |||||
| keywords.Add("x", x); | |||||
| keywords.Add("y", y); | |||||
| var _op = _op_def_lib._apply_op_helper("RealDiv", name: "truediv", 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>(); | ||||
| @@ -55,7 +67,7 @@ namespace Tensorflow | |||||
| return new Tensor(_op, 0, _op.OutputType(0)); | return new Tensor(_op, 0, _op.OutputType(0)); | ||||
| } | } | ||||
| public static Tensor pow(Tensor x, Tensor y) | |||||
| public static Tensor pow(Tensor x, double y) | |||||
| { | { | ||||
| var keywords = new Dictionary<string, object>(); | var keywords = new Dictionary<string, object>(); | ||||
| keywords.Add("x", x); | keywords.Add("x", x); | ||||
| @@ -66,13 +78,15 @@ namespace Tensorflow | |||||
| return new Tensor(_op, 0, _op.OutputType(0)); | return new Tensor(_op, 0, _op.OutputType(0)); | ||||
| } | } | ||||
| public static Tensor sum(Tensor x, Tensor y) | |||||
| public static Tensor sum(Tensor input, int[] axis = null) | |||||
| { | { | ||||
| if(axis == null) axis = new int[0]; | |||||
| var keywords = new Dictionary<string, object>(); | var keywords = new Dictionary<string, object>(); | ||||
| keywords.Add("x", x); | |||||
| keywords.Add("y", y); | |||||
| keywords.Add("input", input); | |||||
| keywords.Add("reduction_indices", constant_op.Constant(axis)); | |||||
| keywords.Add("keep_dims", false); | |||||
| var _op = _op_def_lib._apply_op_helper("Pow", name: "Pow", keywords: keywords); | |||||
| var _op = _op_def_lib._apply_op_helper("Sum", keywords: keywords); | |||||
| return new Tensor(_op, 0, _op.OutputType(0)); | return new Tensor(_op, 0, _op.OutputType(0)); | ||||
| } | } | ||||
| @@ -7,7 +7,7 @@ using System.Text; | |||||
| namespace Tensorflow | namespace Tensorflow | ||||
| { | { | ||||
| public class BaseSession : IDisposable | |||||
| public class BaseSession | |||||
| { | { | ||||
| protected Graph _graph; | protected Graph _graph; | ||||
| protected bool _opened; | protected bool _opened; | ||||
| @@ -35,19 +35,12 @@ namespace Tensorflow | |||||
| c_api.TF_DeleteSessionOptions(opts); | c_api.TF_DeleteSessionOptions(opts); | ||||
| } | } | ||||
| public void Dispose() | |||||
| public virtual NDArray run(Tensor fetches, Dictionary<Tensor, NDArray> feed_dict = null) | |||||
| { | { | ||||
| return _run(fetches, feed_dict); | |||||
| } | } | ||||
| public virtual object run(Tensor fetches, Dictionary<Tensor, NDArray> feed_dict = null) | |||||
| { | |||||
| var result = _run(fetches, feed_dict); | |||||
| return result; | |||||
| } | |||||
| private object _run(Tensor fetches, Dictionary<Tensor, NDArray> feed_dict = null) | |||||
| private NDArray _run(Tensor fetches, Dictionary<Tensor, NDArray> feed_dict = null) | |||||
| { | { | ||||
| var feed_dict_tensor = new Dictionary<Tensor, NDArray>(); | var feed_dict_tensor = new Dictionary<Tensor, NDArray>(); | ||||
| @@ -77,7 +70,7 @@ namespace Tensorflow | |||||
| return fetch_handler.build_results(null, results); | return fetch_handler.build_results(null, results); | ||||
| } | } | ||||
| private object[] _do_run(List<Tensor> fetch_list, Dictionary<Tensor, NDArray> feed_dict) | |||||
| private NDArray[] _do_run(List<Tensor> fetch_list, Dictionary<Tensor, NDArray> feed_dict) | |||||
| { | { | ||||
| var feeds = feed_dict.Select(x => new KeyValuePair<TF_Output, Tensor>(x.Key._as_tf_output(), new Tensor(x.Value))).ToArray(); | var feeds = feed_dict.Select(x => new KeyValuePair<TF_Output, Tensor>(x.Key._as_tf_output(), new Tensor(x.Value))).ToArray(); | ||||
| var fetches = fetch_list.Select(x => x._as_tf_output()).ToArray(); | var fetches = fetch_list.Select(x => x._as_tf_output()).ToArray(); | ||||
| @@ -85,7 +78,7 @@ namespace Tensorflow | |||||
| return _call_tf_sessionrun(feeds, fetches); | return _call_tf_sessionrun(feeds, fetches); | ||||
| } | } | ||||
| private unsafe object[] _call_tf_sessionrun(KeyValuePair<TF_Output, Tensor>[] feed_dict, TF_Output[] fetch_list) | |||||
| private unsafe NDArray[] _call_tf_sessionrun(KeyValuePair<TF_Output, Tensor>[] feed_dict, TF_Output[] fetch_list) | |||||
| { | { | ||||
| // Ensure any changes to the graph are reflected in the runtime. | // Ensure any changes to the graph are reflected in the runtime. | ||||
| _extend_graph(); | _extend_graph(); | ||||
| @@ -109,14 +102,12 @@ namespace Tensorflow | |||||
| status.Check(true); | status.Check(true); | ||||
| object[] result = new object[fetch_list.Length]; | |||||
| var result = new NDArray[fetch_list.Length]; | |||||
| for (int i = 0; i < fetch_list.Length; i++) | for (int i = 0; i < fetch_list.Length; i++) | ||||
| { | { | ||||
| var tensor = new Tensor(output_values[i]); | var tensor = new Tensor(output_values[i]); | ||||
| Type type = tensor.dtype.as_numpy_datatype(); | |||||
| var ndims = tensor.shape.Select(x => (int)x).ToArray(); | |||||
| switch (tensor.dtype) | switch (tensor.dtype) | ||||
| { | { | ||||
| case TF_DataType.TF_STRING: | case TF_DataType.TF_STRING: | ||||
| @@ -124,25 +115,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] = fetchValue(tensor, ndims, output); | |||||
| result[i] = fetchValue(tensor, 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] = fetchValue(tensor, ndims, output); | |||||
| result[i] = fetchValue(tensor, 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] = fetchValue(tensor, ndims, output); | |||||
| result[i] = fetchValue(tensor, 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] = fetchValue(tensor, ndims, output); | |||||
| result[i] = fetchValue(tensor, output); | |||||
| } | } | ||||
| break; | break; | ||||
| default: | default: | ||||
| @@ -153,16 +144,22 @@ namespace Tensorflow | |||||
| return result; | return result; | ||||
| } | } | ||||
| private object fetchValue<T>(Tensor tensor, int[] ndims, T output) | |||||
| private NDArray fetchValue<T>(Tensor tensor, T output) | |||||
| { | { | ||||
| NDArray nd; | |||||
| Type type = tensor.dtype.as_numpy_datatype(); | |||||
| var ndims = tensor.shape.Select(x => (int)x).ToArray(); | |||||
| if (tensor.NDims == 0) | if (tensor.NDims == 0) | ||||
| { | { | ||||
| return output; | |||||
| nd = np.array(output).reshape(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| return np.array(output).reshape(ndims); | |||||
| nd = np.array(output).reshape(ndims); | |||||
| } | } | ||||
| return nd; | |||||
| } | } | ||||
| /// <summary> | /// <summary> | ||||
| @@ -4,7 +4,7 @@ using System.Text; | |||||
| namespace Tensorflow | namespace Tensorflow | ||||
| { | { | ||||
| public class Session : BaseSession | |||||
| public class Session : BaseSession, IDisposable | |||||
| { | { | ||||
| private IntPtr _handle; | private IntPtr _handle; | ||||
| public Status Status { get; } | public Status Status { get; } | ||||
| @@ -34,5 +34,12 @@ namespace Tensorflow | |||||
| public static implicit operator IntPtr(Session session) => session._handle; | public static implicit operator IntPtr(Session session) => session._handle; | ||||
| public static implicit operator Session(IntPtr handle) => new Session(handle); | public static implicit operator Session(IntPtr handle) => new Session(handle); | ||||
| public void Dispose() | |||||
| { | |||||
| Options.Dispose(); | |||||
| Status.Dispose(); | |||||
| c_api.TF_DeleteSession(_handle, Status); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System; | |||||
| using NumSharp.Core; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Text; | using System.Text; | ||||
| @@ -21,7 +22,7 @@ namespace Tensorflow | |||||
| } | } | ||||
| } | } | ||||
| public object build_results(object[] values) | |||||
| public NDArray build_results(NDArray[] values) | |||||
| { | { | ||||
| return values[0]; | return values[0]; | ||||
| } | } | ||||
| @@ -35,7 +35,7 @@ namespace Tensorflow | |||||
| _final_fetches = _fetches; | _final_fetches = _fetches; | ||||
| } | } | ||||
| public object build_results(Session session, object[] results) | |||||
| public NDArray build_results(Session session, NDArray[] results) | |||||
| { | { | ||||
| return _fetch_mapper.build_results(results); | return _fetch_mapper.build_results(results); | ||||
| } | } | ||||
| @@ -7,12 +7,25 @@ namespace Tensorflow | |||||
| { | { | ||||
| public static partial class c_api | public static partial class c_api | ||||
| { | { | ||||
| /// <summary> | |||||
| /// Destroy a session object. | |||||
| /// | |||||
| /// Even if error information is recorded in *status, this call discards all | |||||
| /// local resources associated with the session. The session may not be used | |||||
| /// during or after this call (and the session drops its reference to the | |||||
| /// corresponding graph). | |||||
| /// </summary> | |||||
| /// <param name="session">TF_Session*</param> | |||||
| /// <param name="status">TF_Status*</param> | |||||
| [DllImport(TensorFlowLibName)] | |||||
| public static extern void TF_DeleteSession(IntPtr session, IntPtr status); | |||||
| /// <summary> | /// <summary> | ||||
| /// Destroy an options object. | /// Destroy an options object. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="opts">TF_SessionOptions*</param> | /// <param name="opts">TF_SessionOptions*</param> | ||||
| [DllImport(TensorFlowLibName)] | [DllImport(TensorFlowLibName)] | ||||
| public static unsafe extern void TF_DeleteSessionOptions(IntPtr opts); | |||||
| public static extern void TF_DeleteSessionOptions(IntPtr opts); | |||||
| /// <summary> | /// <summary> | ||||
| /// Return a new execution session with the associated graph, or NULL on | /// Return a new execution session with the associated graph, or NULL on | ||||
| @@ -43,4 +43,8 @@ Docs: https://tensorflownet.readthedocs.io</Description> | |||||
| <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> | ||||
| @@ -0,0 +1,34 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Text; | |||||
| namespace Tensorflow | |||||
| { | |||||
| public partial class Tensor | |||||
| { | |||||
| public static implicit operator Tensor(double scalar) | |||||
| { | |||||
| return constant_op.Constant(scalar); | |||||
| } | |||||
| public static implicit operator Tensor(int scalar) | |||||
| { | |||||
| return constant_op.Constant(scalar); | |||||
| } | |||||
| public static implicit operator IntPtr(Tensor tensor) | |||||
| { | |||||
| return tensor._handle; | |||||
| } | |||||
| public static implicit operator Tensor(IntPtr handle) | |||||
| { | |||||
| return new Tensor(handle); | |||||
| } | |||||
| public static implicit operator Tensor(RefVariable var) | |||||
| { | |||||
| return var._initial_value; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -20,5 +20,10 @@ namespace Tensorflow | |||||
| { | { | ||||
| return gen_math_ops.mul(t1, t2); | return gen_math_ops.mul(t1, t2); | ||||
| } | } | ||||
| public static Tensor operator /(Tensor t1, Tensor t2) | |||||
| { | |||||
| return gen_math_ops.real_div(t1, t2); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -19,7 +19,7 @@ namespace Tensorflow | |||||
| public Operation op { get; } | public Operation op { get; } | ||||
| public string name; | public string name; | ||||
| public object value; | |||||
| public int value_index { get; } | public int value_index { get; } | ||||
| private Status status = new Status(); | private Status status = new Status(); | ||||
| @@ -90,7 +90,6 @@ namespace Tensorflow | |||||
| public Tensor(NDArray nd) | public Tensor(NDArray nd) | ||||
| { | { | ||||
| _handle = Allocate(nd); | _handle = Allocate(nd); | ||||
| value = nd.Data(); | |||||
| } | } | ||||
| private IntPtr Allocate(NDArray nd) | private IntPtr Allocate(NDArray nd) | ||||
| @@ -205,30 +204,24 @@ namespace Tensorflow | |||||
| } | } | ||||
| } | } | ||||
| public void Dispose() | |||||
| { | |||||
| c_api.TF_DeleteTensor(_handle); | |||||
| status.Dispose(); | |||||
| } | |||||
| public static implicit operator Tensor(int scalar) | |||||
| { | |||||
| return new Tensor(scalar); | |||||
| } | |||||
| public static implicit operator IntPtr(Tensor tensor) | |||||
| public override string ToString() | |||||
| { | { | ||||
| return tensor._handle; | |||||
| } | |||||
| if(NDims == 0) | |||||
| { | |||||
| switch (dtype) | |||||
| { | |||||
| case TF_DataType.TF_INT32: | |||||
| return Data<int>()[0].ToString(); | |||||
| } | |||||
| } | |||||
| public static implicit operator Tensor(IntPtr handle) | |||||
| { | |||||
| return new Tensor(handle); | |||||
| return ""; | |||||
| } | } | ||||
| public static implicit operator Tensor(RefVariable var) | |||||
| public void Dispose() | |||||
| { | { | ||||
| return var._initial_value; | |||||
| c_api.TF_DeleteTensor(_handle); | |||||
| status.Dispose(); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -19,7 +19,7 @@ namespace Tensorflow | |||||
| /// <param name="name">Optional name for the tensor.</param> | /// <param name="name">Optional name for the tensor.</param> | ||||
| /// <param name="verify_shape">Boolean that enables verification of a shape of values.</param> | /// <param name="verify_shape">Boolean that enables verification of a shape of values.</param> | ||||
| /// <returns></returns> | /// <returns></returns> | ||||
| public static Tensor Create(NDArray nd, string name = "Const", bool verify_shape = false) | |||||
| public static Tensor Constant(NDArray nd, string name = "Const", bool verify_shape = false) | |||||
| { | { | ||||
| Graph g = ops.get_default_graph(); | Graph g = ops.get_default_graph(); | ||||
| var tensor_pb = tensor_util.make_tensor_proto(nd, verify_shape); | var tensor_pb = tensor_util.make_tensor_proto(nd, verify_shape); | ||||
| @@ -44,10 +44,7 @@ namespace Tensorflow | |||||
| attrs: attrs, | attrs: attrs, | ||||
| name: name); | name: name); | ||||
| var const_tensor = op.outputs[0]; | |||||
| const_tensor.value = nd.Data(); | |||||
| return const_tensor; | |||||
| return op.outputs[0]; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -88,7 +88,7 @@ namespace TensorFlowNET.Examples | |||||
| { | { | ||||
| var result = sess.run(product); | var result = sess.run(product); | ||||
| Console.WriteLine(result); | Console.WriteLine(result); | ||||
| if((result as NDArray).Data<int>()[0] != 12) | |||||
| if(result.Data<int>()[0] != 12) | |||||
| { | { | ||||
| throw new Exception("BasicOperations error"); | throw new Exception("BasicOperations error"); | ||||
| } | } | ||||
| @@ -26,6 +26,10 @@ namespace TensorFlowNET.Examples | |||||
| // Run the op | // Run the op | ||||
| var result = sess.run(hello); | var result = sess.run(hello); | ||||
| Console.WriteLine(result); | Console.WriteLine(result); | ||||
| if(!result.ToString().Equals("Hello, TensorFlow!")) | |||||
| { | |||||
| throw new Exception("HelloWorld error"); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -40,8 +40,14 @@ namespace TensorFlowNET.Examples | |||||
| var pred = tf.add(part1, b); | var pred = tf.add(part1, b); | ||||
| // Mean squared error | // Mean squared error | ||||
| var pow = tf.pow(pred - Y, 2); | |||||
| //var cost = tf.reduce_sum(pow) / (2 * n_samples); | |||||
| var sub = pred - Y; | |||||
| var pow = tf.pow(sub, 2); | |||||
| var reduce = tf.reduce_sum(pow); | |||||
| var cost = reduce / (2d * n_samples); | |||||
| // radient descent | |||||
| // Note, minimize() knows to modify W and b because Variable objects are trainable=True by default | |||||
| // var optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -11,6 +11,7 @@ | |||||
| </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> | ||||
| @@ -24,6 +24,7 @@ | |||||
| </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> | ||||