diff --git a/src/TensorFlowNET.Core/APIs/tf.variable.cs b/src/TensorFlowNET.Core/APIs/tf.variable.cs index 266d5799..a1b3e1d8 100644 --- a/src/TensorFlowNET.Core/APIs/tf.variable.cs +++ b/src/TensorFlowNET.Core/APIs/tf.variable.cs @@ -23,6 +23,8 @@ namespace Tensorflow TF_DataType dtype = TF_DataType.DtInvalid, object initializer = null, // IInitializer or Tensor bool? trainable = null, + bool? use_resource = null, + bool validate_shape = true, VariableSynchronization synchronization = VariableSynchronization.Auto, VariableAggregation aggregation = VariableAggregation.None) { @@ -32,6 +34,8 @@ namespace Tensorflow name, shape: shape, dtype: dtype, + use_resource: use_resource, + validate_shape: validate_shape, initializer: initializer, trainable: trainable); } diff --git a/src/TensorFlowNET.Core/Train/AdamOptimizer.cs b/src/TensorFlowNET.Core/Train/AdamOptimizer.cs index 9d3cab19..e4e01c77 100644 --- a/src/TensorFlowNET.Core/Train/AdamOptimizer.cs +++ b/src/TensorFlowNET.Core/Train/AdamOptimizer.cs @@ -73,7 +73,8 @@ namespace Tensorflow.Train // Create slots for the first and second moments. foreach(var v in var_list) { - _zero_slot(v, "m", Name); + _zeros_slot(v, "m", Name); + _zeros_slot(v, "v", Name); } } diff --git a/src/TensorFlowNET.Core/Train/Optimizer.cs b/src/TensorFlowNET.Core/Train/Optimizer.cs index cc61c48b..d5c1f5c1 100644 --- a/src/TensorFlowNET.Core/Train/Optimizer.cs +++ b/src/TensorFlowNET.Core/Train/Optimizer.cs @@ -21,7 +21,8 @@ namespace Tensorflow public static int GATE_OP = 1; public static int GATE_GRAPH = 2; - public string Name { get; set; } + string _name; + public string Name => _name; public float LearningRate { get; set; } public Tensor LearningRateTensor { get; set; } public bool _use_locking; @@ -35,7 +36,7 @@ namespace Tensorflow if (String.IsNullOrEmpty(name)) throw new NotImplementedException("Must specify the optimizer name"); - Name = name; + _name = name; _use_locking = use_locking; LearningRate = learning_rate; // Dictionary of slots. @@ -391,22 +392,34 @@ namespace Tensorflow /// /// /// - protected RefVariable _zero_slot(RefVariable var, string slot_name, string op_name) + protected RefVariable _zeros_slot(RefVariable var, string slot_name, string op_name) { var named_slots = _slot_dict(slot_name); if (!named_slots.ContainsKey(_var_key(var))) { var new_slot_variable = slot_creator.create_zeros_slot(var, op_name); + _restore_slot_variable(slot_name: slot_name, variable: var, slot_variable: new_slot_variable); + named_slots[_var_key(var)] = new_slot_variable; } return named_slots[_var_key(var)]; } + /// + /// Restore a newly created slot variable's value. + /// + protected void _restore_slot_variable(string slot_name, RefVariable variable, RefVariable slot_variable) + { + var variable_key = _var_key(variable); + // TODO + } + protected Dictionary _slot_dict(string slot_name) { var named_slots = _slots.ContainsKey(slot_name) ? _slots[slot_name] : null; if(named_slots == null) { - _slots[slot_name] = new Dictionary(); + named_slots = new Dictionary(); + _slots[slot_name] = named_slots; } return named_slots; diff --git a/src/TensorFlowNET.Core/Train/SlotCreator.cs b/src/TensorFlowNET.Core/Train/SlotCreator.cs index 1ee8f774..a666cae0 100644 --- a/src/TensorFlowNET.Core/Train/SlotCreator.cs +++ b/src/TensorFlowNET.Core/Train/SlotCreator.cs @@ -43,7 +43,7 @@ namespace Tensorflow.Train { var validate_shape = shape.is_fully_defined(); var prefix = primary.op.name; - return with(new variable_scope(prefix + "/" + name), delegate + return with(new variable_scope(string.Empty, prefix + "/" + name), delegate { return _create_slot_var(primary, initializer, "", validate_shape, shape, dtype); }); @@ -62,11 +62,11 @@ namespace Tensorflow.Train private RefVariable _create_slot_var(VariableV1 primary, IInitializer val, string scope, bool validate_shape, TensorShape shape, TF_DataType dtype) { - bool use_resource = primary is RefVariable; + bool use_resource = primary is ResourceVariable; if (resource_variable_ops.is_resource_variable(primary)) use_resource = true; - var slot = variable_scope.get_variable( + var slot = tf.get_variable( scope, initializer: val, trainable: false, diff --git a/src/TensorFlowNET.Core/Variables/VariableScope.cs b/src/TensorFlowNET.Core/Variables/VariableScope.cs index 60cd7777..d9816af3 100644 --- a/src/TensorFlowNET.Core/Variables/VariableScope.cs +++ b/src/TensorFlowNET.Core/Variables/VariableScope.cs @@ -37,6 +37,8 @@ namespace Tensorflow TF_DataType dtype = TF_DataType.DtInvalid, object initializer = null, // IInitializer or Tensor bool? trainable = null, + bool? use_resource = null, + bool validate_shape = true, VariableSynchronization synchronization = VariableSynchronization.Auto, VariableAggregation aggregation= VariableAggregation.None) { diff --git a/src/TensorFlowNET.Core/Variables/variable_scope.py.cs b/src/TensorFlowNET.Core/Variables/variable_scope.py.cs index 0482daa6..b84196a3 100644 --- a/src/TensorFlowNET.Core/Variables/variable_scope.py.cs +++ b/src/TensorFlowNET.Core/Variables/variable_scope.py.cs @@ -104,7 +104,7 @@ namespace Tensorflow current_name_scope = ops.name_scope(name_scope); } - if (_name != null || _scope != null) + if (!string.IsNullOrEmpty(_name) || _scope != null) { var name_scope = _scope.name.Split('/').Last(); if (current_name_scope == null) diff --git a/tensorflowlib/README.md b/tensorflowlib/README.md index 21b14b72..00fbb339 100644 --- a/tensorflowlib/README.md +++ b/tensorflowlib/README.md @@ -3,12 +3,12 @@ TensorFlow.NET pack all required libraries in architecture-specific assemblies f Here are some pre-built TensorFlow binaries you can use for each platform: - Linux - - CPU-only: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.13.1.tar.gz - - GPU-enabled: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.13.1.tar.gz -- Mac: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.13.1.tar.gz + - CPU-only: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.14.0.tar.gz + - GPU-enabled: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-1.14.0.tar.gz +- Mac: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.14.0.tar.gz - Windows - - CPU-only: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-windows-x86_64-1.13.1.zip - - GPU-enabled: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.13.1.zip + - CPU-only: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-windows-x86_64-1.14.0.zip + - GPU-enabled: https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.14.0.zip ### Run in Linux @@ -41,7 +41,7 @@ pacman -S git patch unzip 4. Install from local wheel file. -`pip install C:/tmp/tensorflow_pkg/tensorflow-1.13.0-cp36-cp36m-win_amd64.whl` +`pip install C:/tmp/tensorflow_pkg/tensorflow-1.14.0-cp36-cp36m-win_amd64.whl` ### Export more APIs diff --git a/tensorflowlib/runtimes/win-x64/native/tensorflow.dll b/tensorflowlib/runtimes/win-x64/native/tensorflow.dll index d4c2474c..0a854ec6 100644 Binary files a/tensorflowlib/runtimes/win-x64/native/tensorflow.dll and b/tensorflowlib/runtimes/win-x64/native/tensorflow.dll differ diff --git a/test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj b/test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj index 9f4e473d..e399bc82 100644 --- a/test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj +++ b/test/TensorFlowNET.Examples/TensorFlowNET.Examples.csproj @@ -17,7 +17,7 @@ - +