| @@ -51,7 +51,7 @@ namespace Tensorflow | |||
| if(NumControlInputs > 0) | |||
| { | |||
| IntPtr control_input_handle = Marshal.AllocHGlobal(Marshal.SizeOf<IntPtr>()); | |||
| IntPtr control_input_handle = Marshal.AllocHGlobal(Marshal.SizeOf<IntPtr>() * NumControlInputs); | |||
| c_api.TF_OperationGetControlInputs(_handle, control_input_handle, NumControlInputs); | |||
| for (int i = 0; i < NumControlInputs; i++) | |||
| { | |||
| @@ -71,7 +71,7 @@ namespace Tensorflow | |||
| if(NumControlOutputs > 0) | |||
| { | |||
| IntPtr control_output_handle = Marshal.AllocHGlobal(Marshal.SizeOf<IntPtr>()); | |||
| IntPtr control_output_handle = Marshal.AllocHGlobal(Marshal.SizeOf<IntPtr>() * NumControlOutputs); | |||
| c_api.TF_OperationGetControlOutputs(_handle, control_output_handle, NumControlInputs); | |||
| for (int i = 0; i < NumControlInputs; i++) | |||
| { | |||
| @@ -77,13 +77,5 @@ namespace Tensorflow | |||
| IntPtr target_opers, int ntargets, | |||
| IntPtr run_metadata, | |||
| IntPtr status); | |||
| [DllImport(TensorFlowLibName)] | |||
| public static extern unsafe void TF_SessionRun(IntPtr session, TF_Buffer* run_options, | |||
| IntPtr inputs, IntPtr input_values, int ninputs, | |||
| IntPtr outputs, IntPtr[] output_values, int noutputs, | |||
| IntPtr target_opers, int ntargets, | |||
| IntPtr run_metadata, | |||
| IntPtr status); | |||
| } | |||
| } | |||
| @@ -14,9 +14,9 @@ namespace TensorFlowNET.UnitTest | |||
| { | |||
| private IntPtr session_; | |||
| private List<IntPtr> inputs_ = new List<IntPtr>(); | |||
| private List<TF_Output> inputs_ = new List<TF_Output>(); | |||
| private List<IntPtr> input_values_ = new List<IntPtr>(); | |||
| private List<IntPtr> outputs_ = new List<IntPtr>(); | |||
| private List<TF_Output> outputs_ = new List<TF_Output>(); | |||
| private List<IntPtr> output_values_ = new List<IntPtr>(); | |||
| private List<IntPtr> targets_ = new List<IntPtr>(); | |||
| @@ -33,9 +33,10 @@ namespace TensorFlowNET.UnitTest | |||
| inputs_.Clear(); | |||
| foreach (var input in inputs) | |||
| { | |||
| var i = new TF_Output(input.Key, 0); | |||
| var handle = Marshal.AllocHGlobal(Marshal.SizeOf<TF_Output>()); | |||
| Marshal.StructureToPtr(new TF_Output(input.Key, 0), handle, false); | |||
| inputs_.Add(handle); | |||
| Marshal.StructureToPtr(i, handle, false); | |||
| inputs_.Add(i); | |||
| input_values_.Add(input.Value); | |||
| } | |||
| @@ -58,7 +59,7 @@ namespace TensorFlowNET.UnitTest | |||
| { | |||
| var handle = Marshal.AllocHGlobal(Marshal.SizeOf<TF_Output>()); | |||
| Marshal.StructureToPtr(new TF_Output(output, 0), handle, true); | |||
| outputs_.Add(handle); | |||
| outputs_.Add(new TF_Output(output, 0)); | |||
| handle = Marshal.AllocHGlobal(Marshal.SizeOf<IntPtr>()); | |||
| output_values_.Add(IntPtr.Zero); | |||
| } | |||
| @@ -76,13 +77,13 @@ namespace TensorFlowNET.UnitTest | |||
| public unsafe void Run(Status s) | |||
| { | |||
| IntPtr inputs_ptr = inputs_.Count == 0 ? IntPtr.Zero : inputs_[0]; | |||
| IntPtr input_values_ptr = inputs_.Count == 0 ? IntPtr.Zero : input_values_[0]; | |||
| IntPtr outputs_ptr = outputs_.Count == 0 ? IntPtr.Zero : outputs_[0]; | |||
| IntPtr[] output_values_ptr = output_values_.ToArray();// output_values_.Count == 0 ? IntPtr.Zero : output_values_[0]; | |||
| var inputs_ptr = inputs_.ToArray();// inputs_.Count == 0 ? IntPtr.Zero : inputs_[0]; | |||
| var input_values_ptr = input_values_.ToArray();// inputs_.Count == 0 ? IntPtr.Zero : input_values_[0]; | |||
| var outputs_ptr = outputs_.ToArray();// outputs_.Count == 0 ? IntPtr.Zero : outputs_[0]; | |||
| var output_values_ptr = output_values_.ToArray();// output_values_.Count == 0 ? IntPtr.Zero : output_values_[0]; | |||
| IntPtr targets_ptr = IntPtr.Zero; | |||
| c_api.TF_SessionRun(session_, null, inputs_ptr, input_values_ptr, 0, | |||
| c_api.TF_SessionRun(session_, null, inputs_ptr, input_values_ptr, 1, | |||
| outputs_ptr, output_values_ptr, outputs_.Count, | |||
| targets_ptr, targets_.Count, | |||
| IntPtr.Zero, s); | |||
| @@ -256,7 +256,7 @@ namespace TensorFlowNET.UnitTest | |||
| EXPECT_EQ(0, neg.GetControlInputs().Length); | |||
| EXPECT_EQ(0, neg.NumControlOutputs); | |||
| EXPECT_EQ(0, neg.GetControlOutputs().Length); | |||
| // Import it again, with an input mapping, return outputs, and a return | |||
| // operation, into the same graph. | |||
| c_api.TF_DeleteImportGraphDefOptions(opts); | |||
| @@ -270,7 +270,7 @@ namespace TensorFlowNET.UnitTest | |||
| EXPECT_EQ(1, c_api.TF_ImportGraphDefOptionsNumReturnOperations(opts)); | |||
| var results = c_api.TF_GraphImportGraphDefWithResults(graph, graph_def, opts, s); | |||
| EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
| Operation scalar2 = graph.OperationByName("imported2/scalar"); | |||
| Operation feed2 = graph.OperationByName("imported2/feed"); | |||
| Operation neg2 = graph.OperationByName("imported2/neg"); | |||
| @@ -287,7 +287,7 @@ namespace TensorFlowNET.UnitTest | |||
| EXPECT_EQ(0, return_outputs[0].index); | |||
| EXPECT_EQ(scalar, return_outputs[1].oper); // remapped | |||
| EXPECT_EQ(0, return_outputs[1].index); | |||
| // Check return operation | |||
| var return_opers = graph.ReturnOperations(results); | |||
| ASSERT_EQ(1, return_opers.Length); | |||
| @@ -302,26 +302,26 @@ namespace TensorFlowNET.UnitTest | |||
| c_api.TF_ImportGraphDefOptionsAddControlDependency(opts, feed2); | |||
| c_api.TF_GraphImportGraphDef(graph, graph_def, opts, s); | |||
| EXPECT_EQ(TF_Code.TF_OK, s.Code); | |||
| var scalar3 = graph.OperationByName("imported3/scalar"); | |||
| var feed3 = graph.OperationByName("imported3/feed"); | |||
| var neg3 = graph.OperationByName("imported3/neg"); | |||
| ASSERT_TRUE(scalar3 != IntPtr.Zero); | |||
| ASSERT_TRUE(feed3 != IntPtr.Zero); | |||
| ASSERT_TRUE(neg3 != IntPtr.Zero); | |||
| // Check that newly-imported scalar and feed have control deps (neg3 will | |||
| // inherit them from input) | |||
| var control_inputs = scalar3.GetControlInputs(); | |||
| ASSERT_EQ(2, scalar3.NumControlInputs); | |||
| EXPECT_EQ(feed, control_inputs[0]); | |||
| EXPECT_EQ(feed2, control_inputs[1]); | |||
| control_inputs = feed3.GetControlInputs(); | |||
| ASSERT_EQ(2, feed3.NumControlInputs); | |||
| EXPECT_EQ(feed, control_inputs[0]); | |||
| EXPECT_EQ(feed2, control_inputs[1]); | |||
| // Export to a graph def so we can import a graph with control dependencies | |||
| graph_def.Dispose(); | |||
| graph_def = new Buffer(); | |||
| @@ -35,7 +35,7 @@ namespace TensorFlowNET.UnitTest | |||
| feed_dict.Add(a, 3.0f); | |||
| feed_dict.Add(b, 2.0f); | |||
| var o = sess.run(c, feed_dict); | |||
| //var o = sess.run(c, feed_dict); | |||
| } | |||
| } | |||
| @@ -20,10 +20,10 @@ namespace TensorFlowNET.UnitTest | |||
| var graph = new Graph(); | |||
| // Make a placeholder operation. | |||
| var feed = c_test_util.ScalarConst(3, graph, s, "scalar1"); //c_test_util.Placeholder(graph, s); | |||
| var feed = c_test_util.Placeholder(graph, s); | |||
| // Make a constant operation with the scalar "2". | |||
| var two = c_test_util.ScalarConst(2, graph, s, "scalar2"); | |||
| var two = c_test_util.ScalarConst(2, graph, s); | |||
| // Add operation. | |||
| var add = c_test_util.Add(feed, two, graph, s); | |||
| @@ -34,7 +34,7 @@ namespace TensorFlowNET.UnitTest | |||
| // Run the graph. | |||
| var inputs = new Dictionary<IntPtr, IntPtr>(); | |||
| inputs.Add(feed, c_test_util.Int32Tensor(3)); | |||
| //csession.SetInputs(inputs); | |||
| csession.SetInputs(inputs); | |||
| var outputs = new List<IntPtr> { add }; | |||
| csession.SetOutputs(outputs); | |||