@@ -9,8 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Examples", "t | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Core", "src\TensorFlowNET.Core\TensorFlowNET.Core.csproj", "{FD682AC0-7B2D-45D3-8B0D-C6D678B04144}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NumSharp.Core", "..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj", "{DE97EAD7-B92C-4112-9690-91C40A97179E}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|Any CPU = Debug|Any CPU | |||
@@ -29,10 +27,6 @@ Global | |||
{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.Build.0 = Release|Any CPU | |||
{DE97EAD7-B92C-4112-9690-91C40A97179E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{DE97EAD7-B92C-4112-9690-91C40A97179E}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{DE97EAD7-B92C-4112-9690-91C40A97179E}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{DE97EAD7-B92C-4112-9690-91C40A97179E}.Release|Any CPU.Build.0 = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -0,0 +1,13 @@ | |||
using NumSharp; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace Tensorflow | |||
{ | |||
public static partial class tf | |||
{ | |||
public static Tensor convert_to_tensor(object value, | |||
string name = null) => ops.convert_to_tensor(value, name: name); | |||
} | |||
} |
@@ -29,7 +29,7 @@ namespace Tensorflow | |||
protected IEnumerable<int> range(int start, int end) | |||
{ | |||
return Enumerable.Range(start, end); | |||
return Enumerable.Range(start, end - start); | |||
} | |||
public static T New<T>(object args) where T : IPyClass | |||
@@ -4,10 +4,10 @@ | |||
<TargetFramework>netstandard2.0</TargetFramework> | |||
<AssemblyName>TensorFlow.NET</AssemblyName> | |||
<RootNamespace>Tensorflow</RootNamespace> | |||
<Version>0.6.1-alpha</Version> | |||
<Version>0.6.1</Version> | |||
<Authors>Haiping Chen</Authors> | |||
<Company>SciSharp STACK</Company> | |||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> | |||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||
<Copyright>Apache 2.0</Copyright> | |||
<RepositoryUrl>https://github.com/SciSharp/TensorFlow.NET</RepositoryUrl> | |||
<RepositoryType>git</RepositoryType> | |||
@@ -44,7 +44,7 @@ More math/ linalg APIs.</PackageReleaseNotes> | |||
<ItemGroup> | |||
<PackageReference Include="Google.Protobuf" Version="3.7.0" /> | |||
<PackageReference Include="NumSharp" Version="0.9.0" /> | |||
<PackageReference Include="NumSharp" Version="0.10.0-alpha" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
@@ -57,8 +57,4 @@ More math/ linalg APIs.</PackageReleaseNotes> | |||
<Folder Include="Keras\Initializers\" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" /> | |||
</ItemGroup> | |||
</Project> |
@@ -1,6 +1,8 @@ | |||
using NumSharp; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Diagnostics; | |||
using System.Linq; | |||
using System.Text; | |||
using Tensorflow; | |||
using Tensorflow.Clustering; | |||
@@ -26,7 +28,7 @@ namespace TensorFlowNET.Examples | |||
Datasets mnist; | |||
NDArray full_data_x; | |||
int num_steps = 50; // Total steps to train | |||
int num_steps = 10; // Total steps to train | |||
int k = 25; // The number of clusters | |||
int num_classes = 10; // The 10 digits | |||
int num_features = 784; // Each image is 28x28 pixels | |||
@@ -63,22 +65,43 @@ namespace TensorFlowNET.Examples | |||
// Training | |||
NDArray result = null; | |||
foreach(var i in range(1, num_steps + 1)) | |||
var sw = new Stopwatch(); | |||
foreach (var i in range(1, num_steps + 1)) | |||
{ | |||
sw.Start(); | |||
result = sess.run(new ITensorOrOperation[] { train_op, avg_distance, cluster_idx }, new FeedItem(X, full_data_x)); | |||
if (i % 2 == 0 || i == 1) | |||
print($"Step {i}, Avg Distance: {result[1]}"); | |||
sw.Stop(); | |||
if (i % 5 == 0 || i == 1) | |||
print($"Step {i}, Avg Distance: {result[1]} Elapse: {sw.ElapsedMilliseconds}ms"); | |||
sw.Reset(); | |||
} | |||
var idx = result[2]; | |||
var idx = result[2].Data<int>(); | |||
// Assign a label to each centroid | |||
// Count total number of labels per centroid, using the label of each training | |||
// sample to their closest centroid (given by 'idx') | |||
var counts = np.zeros(k, num_classes); | |||
foreach (var i in range(idx.len)) | |||
counts[idx[i]] += mnist.train.labels[i]; | |||
var counts = np.zeros((k, num_classes), np.float32); | |||
sw.Start(); | |||
foreach (var i in range(idx.Length)) | |||
{ | |||
var x = mnist.train.labels[i]; | |||
counts[idx[i]] += x; | |||
} | |||
sw.Stop(); | |||
print($"Assign a label to each centroid took {sw.ElapsedMilliseconds}ms"); | |||
// Assign the most frequent label to the centroid | |||
var labels_map_array = np.argmax(counts, 1); | |||
var labels_map = tf.convert_to_tensor(labels_map_array); | |||
// Evaluation ops | |||
// Lookup: centroid_id -> label | |||
}); | |||
return false; | |||
@@ -88,7 +88,7 @@ namespace TensorFlowNET.Examples | |||
// Display logs per epoch step | |||
if ((epoch + 1) % display_step == 0) | |||
print($"Epoch: {(epoch + 1).ToString("D4")} cost= {avg_cost.ToString("G9")} elapse= {sw.ElapsedMilliseconds}ms"); | |||
print($"Epoch: {(epoch + 1).ToString("D4")} Cost: {avg_cost.ToString("G9")} Elapse: {sw.ElapsedMilliseconds}ms"); | |||
sw.Reset(); | |||
} | |||
@@ -51,9 +51,9 @@ namespace TensorFlowNET.Examples | |||
long nn_index = sess.run(pred, new FeedItem(xtr, Xtr), new FeedItem(xte, Xte[i])); | |||
// Get nearest neighbor class label and compare it to its true label | |||
int index = (int)nn_index; | |||
print($"Test {i} Prediction: {np.argmax(Ytr[(NDArray)index])} True Class: {np.argmax(Yte[i] as NDArray)}"); | |||
print($"Test {i} Prediction: {np.argmax(Ytr[index])} True Class: {np.argmax(Yte[i])}"); | |||
// Calculate accuracy | |||
if (np.argmax(Ytr[(NDArray)index]) == np.argmax(Yte[i] as NDArray)) | |||
if ((int)np.argmax(Ytr[index]) == (int)np.argmax(Yte[i])) | |||
accuracy += 1f/ Xte.shape[0]; | |||
} | |||
@@ -2,19 +2,18 @@ | |||
<PropertyGroup> | |||
<OutputType>Exe</OutputType> | |||
<TargetFramework>netcoreapp2.1</TargetFramework> | |||
<TargetFramework>netcoreapp2.2</TargetFramework> | |||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Colorful.Console" Version="1.2.9" /> | |||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" /> | |||
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" /> | |||
<PackageReference Include="SharpZipLib" Version="1.1.0" /> | |||
<PackageReference Include="System.Drawing.Common" Version="4.5.1" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" /> | |||
<ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" /> | |||
</ItemGroup> | |||
@@ -1,7 +1,7 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>netcoreapp2.1</TargetFramework> | |||
<TargetFramework>netcoreapp2.2</TargetFramework> | |||
<IsPackable>false</IsPackable> | |||
</PropertyGroup> | |||
@@ -22,7 +22,6 @@ | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\..\..\NumSharp\src\NumSharp.Core\NumSharp.Core.csproj" /> | |||
<ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" /> | |||
<ProjectReference Include="..\TensorFlowNET.Examples\TensorFlowNET.Examples.csproj" /> | |||
</ItemGroup> | |||