diff --git a/src/TensorFlowNET.Console/TensorFlowNET.Console.csproj b/src/TensorFlowNET.Console/TensorFlowNET.Console.csproj index b78a25f3..a047afb9 100644 --- a/src/TensorFlowNET.Console/TensorFlowNET.Console.csproj +++ b/src/TensorFlowNET.Console/TensorFlowNET.Console.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/TensorFlowNET.Core/APIs/c_api.cs b/src/TensorFlowNET.Core/APIs/c_api.cs index c1575fb4..d3dc15ed 100644 --- a/src/TensorFlowNET.Core/APIs/c_api.cs +++ b/src/TensorFlowNET.Core/APIs/c_api.cs @@ -43,7 +43,7 @@ namespace Tensorflow /// public partial class c_api { - public const string TensorFlowLibName = @"D:\SciSharp\tensorflow-google\bazel-bin\tensorflow\tensorflow.dll"; + public const string TensorFlowLibName = "tensorflow"; public static string StringPiece(IntPtr handle) { diff --git a/src/TensorFlowNET.Core/APIs/tf.data.cs b/src/TensorFlowNET.Core/APIs/tf.data.cs new file mode 100644 index 00000000..7eee3a90 --- /dev/null +++ b/src/TensorFlowNET.Core/APIs/tf.data.cs @@ -0,0 +1,30 @@ +/***************************************************************************** + Copyright 2020 The TensorFlow.NET Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using NumSharp; + +namespace Tensorflow +{ + public partial class tensorflow + { + public DataOps data { get; } = new DataOps(); + + public class DataOps + { + public TensorSliceDataset Dataset { get; } = new TensorSliceDataset(); + } + } +} diff --git a/src/TensorFlowNET.Core/APIs/tf.keras.cs b/src/TensorFlowNET.Core/APIs/tf.keras.cs new file mode 100644 index 00000000..ec3af440 --- /dev/null +++ b/src/TensorFlowNET.Core/APIs/tf.keras.cs @@ -0,0 +1,25 @@ +/***************************************************************************** + Copyright 2020 Haiping Chen. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using NumSharp; + +namespace Tensorflow +{ + public partial class tensorflow + { + public KerasApi keras { get; } = new KerasApi(); + } +} diff --git a/src/TensorFlowNET.Core/Data/DatasetOps.cs b/src/TensorFlowNET.Core/Data/DatasetOps.cs new file mode 100644 index 00000000..4035ee4f --- /dev/null +++ b/src/TensorFlowNET.Core/Data/DatasetOps.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Tensorflow +{ + public class DatasetOps + { + } +} diff --git a/src/TensorFlowNET.Core/Data/TensorSliceDataset.cs b/src/TensorFlowNET.Core/Data/TensorSliceDataset.cs new file mode 100644 index 00000000..8f6a6dac --- /dev/null +++ b/src/TensorFlowNET.Core/Data/TensorSliceDataset.cs @@ -0,0 +1,20 @@ +using NumSharp; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Tensorflow +{ + public class TensorSliceDataset + { + public TensorSliceDataset(params NDArray[] elements) + { + + } + + public TensorSliceDataset from_tensor_slices(params NDArray[] elements) + { + throw new NotImplementedException(""); + } + } +} diff --git a/src/TensorFlowNET.Core/Keras/Datasets/DatasetPass.cs b/src/TensorFlowNET.Core/Keras/Datasets/DatasetPass.cs new file mode 100644 index 00000000..48fb3b82 --- /dev/null +++ b/src/TensorFlowNET.Core/Keras/Datasets/DatasetPass.cs @@ -0,0 +1,27 @@ +using NumSharp; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Tensorflow.Keras.Datasets +{ + public class DatasetPass + { + public (NDArray, NDArray) Train { get; set; } + public (NDArray, NDArray) Test { get; set; } + + public void Deconstruct(out NDArray x_train, out NDArray y_train, out NDArray x_test, out NDArray y_test) + { + x_train = Train.Item1; + y_train = Train.Item2; + x_test = Test.Item1; + y_test = Test.Item2; + } + + public void Deconstruct(out (NDArray, NDArray) train, out (NDArray, NDArray) test) + { + train = Train; + test = Test; + } + } +} diff --git a/src/TensorFlowNET.Core/Keras/Datasets/KerasDataset.cs b/src/TensorFlowNET.Core/Keras/Datasets/KerasDataset.cs new file mode 100644 index 00000000..5aabfdf0 --- /dev/null +++ b/src/TensorFlowNET.Core/Keras/Datasets/KerasDataset.cs @@ -0,0 +1,27 @@ +/***************************************************************************** + Copyright 2020 Haiping Chen. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Tensorflow.Keras.Datasets +{ + public class KerasDataset + { + public Mnist mnist { get; } = new Mnist(); + } +} diff --git a/src/TensorFlowNET.Core/Keras/Datasets/Mnist.cs b/src/TensorFlowNET.Core/Keras/Datasets/Mnist.cs new file mode 100644 index 00000000..37eae319 --- /dev/null +++ b/src/TensorFlowNET.Core/Keras/Datasets/Mnist.cs @@ -0,0 +1,76 @@ +/***************************************************************************** + Copyright 2020 Haiping Chen. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +******************************************************************************/ + +using NumSharp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; + +namespace Tensorflow.Keras.Datasets +{ + public class Mnist + { + string origin_folder = "https://storage.googleapis.com/tensorflow/tf-keras-datasets/"; + string file_name = "mnist.npz"; + + /// + /// Loads the [MNIST dataset](http://yann.lecun.com/exdb/mnist/). + /// + /// + public DatasetPass load_data() + { + var file = Download(); + var bytes = File.ReadAllBytes(file); + var datax = LoadX(bytes); + var datay = LoadY(bytes); + return new DatasetPass + { + Train = (datax.Item1, datay.Item1), + Test = (datax.Item2, datay.Item2) + }; + } + + (NDArray, NDArray) LoadX(byte[] bytes) + { + var y = np.Load_Npz(bytes); + return (y["x_train.npy"], y["x_test.npy"]); + } + + (NDArray, NDArray) LoadY(byte[] bytes) + { + var y = np.Load_Npz(bytes); + return (y["y_train.npy"], y["y_test.npy"]); + } + + string Download() + { + var fileSaveTo = Path.Combine(Path.GetTempPath(), file_name); + + if (File.Exists(fileSaveTo)) + { + Console.WriteLine($"The file {fileSaveTo} already exists"); + return fileSaveTo; + } + + using var wc = new WebClient(); + wc.DownloadFileTaskAsync(origin_folder + file_name, fileSaveTo).Wait(); + + return fileSaveTo; + } + } +} diff --git a/src/TensorFlowNET.Core/Keras/KerasApi.cs b/src/TensorFlowNET.Core/Keras/KerasApi.cs new file mode 100644 index 00000000..f9fd94d6 --- /dev/null +++ b/src/TensorFlowNET.Core/Keras/KerasApi.cs @@ -0,0 +1,12 @@ +using System.Data; +using Tensorflow.Keras; +using Tensorflow.Keras.Datasets; + +namespace Tensorflow +{ + public class KerasApi + { + public KerasDataset datasets { get; } = new KerasDataset(); + public Initializers initializers { get; } = new Initializers(); + } +} diff --git a/src/TensorFlowNET.Core/Keras/tf.keras.cs b/src/TensorFlowNET.Core/Keras/tf.keras.cs deleted file mode 100644 index dee173f8..00000000 --- a/src/TensorFlowNET.Core/Keras/tf.keras.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Tensorflow.Keras; - -namespace Tensorflow -{ - public partial class tensorflow - { - public class keras - { - public static Initializers initializers => new Initializers(); - } - } -} diff --git a/src/TensorFlowNET.Core/TensorFlow.Binding.csproj b/src/TensorFlowNET.Core/TensorFlow.Binding.csproj index e462fded..410c62c2 100644 --- a/src/TensorFlowNET.Core/TensorFlow.Binding.csproj +++ b/src/TensorFlowNET.Core/TensorFlow.Binding.csproj @@ -5,7 +5,7 @@ TensorFlow.NET Tensorflow 2.2.0 - 0.20.0-alpha2 + 0.20.0-preview1 8.0 Haiping Chen, Meinrad Recheis, Eli Belash SciSharp STACK diff --git a/test/TensorFlowNET.UnitTest/Tensorflow.UnitTest.csproj b/test/TensorFlowNET.UnitTest/Tensorflow.UnitTest.csproj index 081bb3a2..ec8c2ec1 100644 --- a/test/TensorFlowNET.UnitTest/Tensorflow.UnitTest.csproj +++ b/test/TensorFlowNET.UnitTest/Tensorflow.UnitTest.csproj @@ -44,10 +44,10 @@ - - + + - +