Eli Belash 6 years ago
parent
commit
02d75dfb7f
15 changed files with 101 additions and 14 deletions
  1. +1
    -1
      src/TensorFlowNET.Core/APIs/tf.train.cs
  2. +10
    -2
      src/TensorFlowNET.Core/Operations/Initializers/RandomNormal.cs
  3. +1
    -2
      src/TensorFlowNET.Core/Operations/array_ops.py.cs
  4. +1
    -1
      src/TensorFlowNET.Core/Operations/gen_math_ops.cs
  5. +1
    -1
      src/TensorFlowNET.Core/Operations/gen_random_ops.py.cs
  6. +2
    -1
      src/TensorFlowNET.Core/Operations/random_ops.py.cs
  7. +5
    -0
      src/TensorFlowNET.Core/Tensors/TensorShape.cs
  8. +19
    -3
      src/TensorFlowNET.Core/Train/ExponentialMovingAverage.cs
  9. +23
    -0
      src/TensorFlowNET.Core/Variables/RefVariable.cs
  10. +6
    -0
      src/TensorFlowNET.Core/Variables/gen_state_ops.py.cs
  11. +8
    -0
      src/TensorFlowNET.Core/Variables/state_ops.cs
  12. +5
    -0
      test/TensorFlowNET.Examples/ImageProcessing/YOLO/Main.cs
  13. +15
    -0
      test/TensorFlowNET.Examples/ImageProcessing/YOLO/YOLOv3.cs
  14. +3
    -0
      test/TensorFlowNET.UnitTest/ImageTest.cs
  15. +1
    -3
      test/TensorFlowNET.UnitTest/NameScopeTest.cs

+ 1
- 1
src/TensorFlowNET.Core/APIs/tf.train.cs View File

@@ -31,7 +31,7 @@ namespace Tensorflow
public Optimizer AdamOptimizer(float learning_rate, string name = "Adam")
=> new AdamOptimizer(learning_rate, name: name);

public object ExponentialMovingAverage(float decay)
public ExponentialMovingAverage ExponentialMovingAverage(float decay)
=> new ExponentialMovingAverage(decay);

public Saver Saver(VariableV1[] var_list = null) => new Saver(var_list: var_list);


+ 10
- 2
src/TensorFlowNET.Core/Operations/Initializers/RandomNormal.cs View File

@@ -40,12 +40,20 @@ namespace Tensorflow.Operations.Initializers

public Tensor call(TensorShape shape, TF_DataType dtype = TF_DataType.DtInvalid)
{
throw new NotImplementedException();
if (dtype == TF_DataType.DtInvalid)
dtype = this.dtype;
return random_ops.random_normal(shape, mean, stddev, dtype, seed: seed);
}

public object get_config()
{
throw new NotImplementedException();
return new
{
mean,
stddev,
seed,
dtype
};
}
}
}

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

@@ -260,8 +260,7 @@ namespace Tensorflow
return tf_with(ops.name_scope(name, "ones", new { dims }), scope =>
{
name = scope;
var shape = ops.convert_to_tensor(dims, dtype: TF_DataType.TF_INT32);
var output = gen_array_ops.fill(shape, constant_op.constant(1.0f, dtype: dtype), name: name);
var output = _constant_if_small(1, dims, dtype, name);
return output;
});
}


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

@@ -141,7 +141,7 @@ namespace Tensorflow
{
var _op = _op_def_lib._apply_op_helper("Add", name, args: new { x, y });
return _op.outputs[0];
return _op.output;
}
public static Tensor atan(Tensor x, string name = null)


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

@@ -40,7 +40,7 @@ namespace Tensorflow
name: name,
args: new { shape, dtype, seed, seed2 });

return _op.outputs[0];
return _op.output;
}

/// <summary>


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

@@ -39,9 +39,10 @@ namespace Tensorflow
{
return tf_with(ops.name_scope(name, "random_normal", new { shape, mean, stddev }), scope =>
{
name = scope;
var shape_tensor = _ShapeTensor(shape);
var mean_tensor = ops.convert_to_tensor(mean, dtype: dtype, name: "mean");
var stddev_tensor = ops.convert_to_tensor(stddev, dtype: dtype, name = "stddev");
var stddev_tensor = ops.convert_to_tensor(stddev, dtype: dtype, name: "stddev");
var (seed1, seed2) = random_seed.get_seed(seed);
var rnd = gen_random_ops.random_standard_normal(shape_tensor, dtype: dtype, seed: seed1, seed2: seed2);
var mul = rnd * stddev_tensor;


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

@@ -143,6 +143,11 @@ namespace Tensorflow
}
}

public override string ToString()
{
return shape.ToString();
}

public static implicit operator TensorShape(Shape shape) => new TensorShape((int[]) shape.Dimensions.Clone());
public static implicit operator Shape(TensorShape shape) => new Shape((int[]) shape.dims.Clone());


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

@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using static Tensorflow.Binding;

namespace Tensorflow.Train
{
@@ -11,6 +13,7 @@ namespace Tensorflow.Train
bool _zero_debias;
string _name;
public string name => _name;
List<VariableV1> _averages;

public ExponentialMovingAverage(float decay, int? num_updates = null, bool zero_debias = false,
string name = "ExponentialMovingAverage")
@@ -19,6 +22,7 @@ namespace Tensorflow.Train
_num_updates = num_updates;
_zero_debias = zero_debias;
_name = name;
_averages = new List<VariableV1>();
}

/// <summary>
@@ -26,11 +30,23 @@ namespace Tensorflow.Train
/// </summary>
/// <param name="var_list"></param>
/// <returns></returns>
public Operation apply(VariableV1[] var_list = null)
public Operation apply(RefVariable[] var_list = null)
{
throw new NotImplementedException("");
}
if (var_list == null)
var_list = variables.trainable_variables() as RefVariable[];

foreach(var var in var_list)
{
if (!_averages.Contains(var))
{
ops.init_scope();
var slot = new SlotCreator();
var.initialized_value();
// var avg = slot.create_zeros_slot
}
}

throw new NotImplementedException("");
}
}
}

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

@@ -308,5 +308,28 @@ namespace Tensorflow
{
throw new NotImplementedException();
}

/// <summary>
/// Returns the value of this variable, read in the current context.
/// </summary>
/// <returns></returns>
private ITensorOrOperation read_value()
{
return array_ops.identity(_variable, name: "read");
}

public Tensor is_variable_initialized(RefVariable variable)
{
return state_ops.is_variable_initialized(variable);
}

public Tensor initialized_value()
{
ops.init_scope();
throw new NotImplementedException("");
/*return control_flow_ops.cond(is_variable_initialized(this),
read_value,
() => initial_value);*/
}
}
}

+ 6
- 0
src/TensorFlowNET.Core/Variables/gen_state_ops.py.cs View File

@@ -14,6 +14,7 @@
limitations under the License.
******************************************************************************/
using System;
using System.Collections.Generic;
using Tensorflow.Eager;
@@ -145,5 +146,10 @@ namespace Tensorflow
var _op = _op_def_lib._apply_op_helper("ScatterAdd", name: name, args: new { @ref, indices, updates, use_locking });
return _op.outputs[0];
}
public static Tensor is_variable_initialized(RefVariable @ref, string name = null)
{
throw new NotImplementedException("");
}
}
}

+ 8
- 0
src/TensorFlowNET.Core/Variables/state_ops.cs View File

@@ -106,5 +106,13 @@ namespace Tensorflow
throw new NotImplementedException("scatter_add");
}
public static Tensor is_variable_initialized(RefVariable @ref, string name = null)
{
if (@ref.dtype.is_ref_dtype())
return gen_state_ops.is_variable_initialized(@ref: @ref, name: name);
throw new NotImplementedException("");
//return @ref.is_initialized(name: name);
}
}
}

+ 5
- 0
test/TensorFlowNET.Examples/ImageProcessing/YOLO/Main.cs View File

@@ -94,6 +94,11 @@ namespace TensorFlowNET.Examples.ImageProcessing.YOLO
model = new YOLOv3(cfg, input_data, trainable);
});

tf_with(tf.name_scope("define_weight_decay"), scope =>
{
var moving_ave = tf.train.ExponentialMovingAverage(moving_ave_decay).apply((RefVariable[])tf.trainable_variables());
});

return graph;
}



+ 15
- 0
test/TensorFlowNET.Examples/ImageProcessing/YOLO/YOLOv3.cs View File

@@ -37,6 +37,21 @@ namespace TensorFlowNET.Examples.ImageProcessing.YOLO
upsample_method = cfg.YOLO.UPSAMPLE_METHOD;

(conv_lbbox, conv_mbbox, conv_sbbox) = __build_nework(input_data);

tf_with(tf.variable_scope("pred_sbbox"), scope =>
{
// pred_sbbox = decode(conv_sbbox, anchors[0], strides[0]);
});

tf_with(tf.variable_scope("pred_mbbox"), scope =>
{
// pred_sbbox = decode(conv_sbbox, anchors[0], strides[0]);
});

tf_with(tf.variable_scope("pred_lbbox"), scope =>
{
// pred_sbbox = decode(conv_sbbox, anchors[0], strides[0]);
});
}

private (Tensor, Tensor, Tensor) __build_nework(Tensor input_data)


+ 3
- 0
test/TensorFlowNET.UnitTest/ImageTest.cs View File

@@ -8,6 +8,9 @@ using static Tensorflow.Binding;

namespace TensorFlowNET.UnitTest
{
/// <summary>
/// Find more examples in https://www.programcreek.com/python/example/90444/tensorflow.read_file
/// </summary>
[TestClass]
public class ImageTest
{


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

@@ -69,9 +69,7 @@ namespace TensorFlowNET.UnitTest
Assert.AreEqual("scope1", g._name_stack);
var const3 = tf.constant(2.0);
Assert.AreEqual("scope1/Const_1:0", const3.name);
}

;
};

g.Dispose();



Loading…
Cancel
Save