@@ -11,6 +11,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Core", "src\T | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TensorFlowNET.Utility", "src\TensorFlowNET.Utility\TensorFlowNET.Utility.csproj", "{00D9085C-0FC7-453C-A0CC-BAD98F44FEA0}" | |||
EndProject | |||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KerasNET.Core", "..\Keras.NET\src\KerasNET.Core\KerasNET.Core.csproj", "{07E37E81-3BCD-4BBB-AE5D-28527F1C7745}" | |||
EndProject | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TensorFlowNET.Visualization", "TensorFlowNET.Visualization\TensorFlowNET.Visualization.csproj", "{4BB2ABD1-635E-41E4-B534-CB5B6A2D754D}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|Any CPU = Debug|Any CPU | |||
@@ -33,6 +37,14 @@ Global | |||
{00D9085C-0FC7-453C-A0CC-BAD98F44FEA0}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{00D9085C-0FC7-453C-A0CC-BAD98F44FEA0}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{00D9085C-0FC7-453C-A0CC-BAD98F44FEA0}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{07E37E81-3BCD-4BBB-AE5D-28527F1C7745}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{07E37E81-3BCD-4BBB-AE5D-28527F1C7745}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{07E37E81-3BCD-4BBB-AE5D-28527F1C7745}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{07E37E81-3BCD-4BBB-AE5D-28527F1C7745}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{4BB2ABD1-635E-41E4-B534-CB5B6A2D754D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{4BB2ABD1-635E-41E4-B534-CB5B6A2D754D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{4BB2ABD1-635E-41E4-B534-CB5B6A2D754D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{4BB2ABD1-635E-41E4-B534-CB5B6A2D754D}.Release|Any CPU.Build.0 = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -0,0 +1,45 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore.Mvc; | |||
namespace TensorFlowNET.Visualization.Controllers | |||
{ | |||
[Route("api/[controller]")] | |||
[ApiController] | |||
public class ValuesController : ControllerBase | |||
{ | |||
// GET api/values | |||
[HttpGet] | |||
public ActionResult<IEnumerable<string>> Get() | |||
{ | |||
return new string[] { "value1", "value2" }; | |||
} | |||
// GET api/values/5 | |||
[HttpGet("{id}")] | |||
public ActionResult<string> Get(int id) | |||
{ | |||
return "value"; | |||
} | |||
// POST api/values | |||
[HttpPost] | |||
public void Post([FromBody] string value) | |||
{ | |||
} | |||
// PUT api/values/5 | |||
[HttpPut("{id}")] | |||
public void Put(int id, [FromBody] string value) | |||
{ | |||
} | |||
// DELETE api/values/5 | |||
[HttpDelete("{id}")] | |||
public void Delete(int id) | |||
{ | |||
} | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.IO; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore; | |||
using Microsoft.AspNetCore.Hosting; | |||
using Microsoft.Extensions.Configuration; | |||
using Microsoft.Extensions.Logging; | |||
namespace TensorFlowNET.Visualization | |||
{ | |||
public class Program | |||
{ | |||
public static void Main(string[] args) | |||
{ | |||
CreateWebHostBuilder(args).Build().Run(); | |||
} | |||
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => | |||
WebHost.CreateDefaultBuilder(args) | |||
.UseStartup<Startup>(); | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore.Builder; | |||
using Microsoft.AspNetCore.Hosting; | |||
using Microsoft.AspNetCore.Mvc; | |||
using Microsoft.Extensions.Configuration; | |||
using Microsoft.Extensions.DependencyInjection; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.Options; | |||
namespace TensorFlowNET.Visualization | |||
{ | |||
public class Startup | |||
{ | |||
public Startup(IConfiguration configuration) | |||
{ | |||
Configuration = configuration; | |||
} | |||
public IConfiguration Configuration { get; } | |||
// This method gets called by the runtime. Use this method to add services to the container. | |||
public void ConfigureServices(IServiceCollection services) | |||
{ | |||
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); | |||
} | |||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | |||
public void Configure(IApplicationBuilder app, IHostingEnvironment env) | |||
{ | |||
if (env.IsDevelopment()) | |||
{ | |||
app.UseDeveloperExceptionPage(); | |||
} | |||
app.UseMvc(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,13 @@ | |||
<Project Sdk="Microsoft.NET.Sdk.Web"> | |||
<PropertyGroup> | |||
<TargetFramework>netcoreapp2.2</TargetFramework> | |||
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Microsoft.AspNetCore.App" /> | |||
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" /> | |||
</ItemGroup> | |||
</Project> |
@@ -0,0 +1,9 @@ | |||
{ | |||
"Logging": { | |||
"LogLevel": { | |||
"Default": "Debug", | |||
"System": "Information", | |||
"Microsoft": "Information" | |||
} | |||
} | |||
} |
@@ -0,0 +1,8 @@ | |||
{ | |||
"Logging": { | |||
"LogLevel": { | |||
"Default": "Warning" | |||
} | |||
}, | |||
"AllowedHosts": "*" | |||
} |
@@ -51,4 +51,8 @@ Docs: https://tensorflownet.readthedocs.io</Description> | |||
<Content CopyToOutputDirectory="PreserveNewest" Include="./runtimes/win-x64/native/tensorflow.dll" Link="tensorflow.dll" Pack="true" PackagePath="runtimes/win-x64/native/tensorflow.dll" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Folder Include="APIs\Keras\" /> | |||
</ItemGroup> | |||
</Project> |
@@ -11,8 +11,15 @@ | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\..\..\Keras.NET\src\KerasNET.Core\KerasNET.Core.csproj" /> | |||
<ProjectReference Include="..\..\src\TensorFlowNET.Core\TensorFlowNET.Core.csproj" /> | |||
<ProjectReference Include="..\..\src\TensorFlowNET.Utility\TensorFlowNET.Utility.csproj" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Reference Include="Newtonsoft.Json"> | |||
<HintPath>C:\Program Files\dotnet\sdk\NuGetFallbackFolder\newtonsoft.json\9.0.1\lib\netstandard1.0\Newtonsoft.Json.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
</Project> |
@@ -4,6 +4,9 @@ using System.IO; | |||
using System.Text; | |||
using Tensorflow; | |||
using NumSharp.Core; | |||
using Newtonsoft.Json; | |||
using System.Linq; | |||
using Keras; | |||
namespace TensorFlowNET.Examples | |||
{ | |||
@@ -14,10 +17,20 @@ namespace TensorFlowNET.Examples | |||
public void Run() | |||
{ | |||
PrepareData(); | |||
var((train_data, train_labels), (test_data, test_labels)) = PrepareData(); | |||
Console.WriteLine($"Training entries: {train_data.size}, labels: {train_labels.size}"); | |||
// A dictionary mapping words to an integer index | |||
var word_index = GetWordIndex(); | |||
train_data = keras.preprocessing.sequence.pad_sequences(train_data, | |||
value: word_index["<PAD>"], | |||
padding: "post", | |||
maxlen: 256); | |||
} | |||
private void PrepareData() | |||
private ((NDArray, NDArray), (NDArray, NDArray)) PrepareData() | |||
{ | |||
Directory.CreateDirectory(dir); | |||
@@ -32,14 +45,39 @@ namespace TensorFlowNET.Examples | |||
NDArray x_train = File.ReadAllLines(Path.Join(dir, "x_train.txt")); | |||
NDArray labels_train = File.ReadAllLines(Path.Join(dir, "y_train.txt")); | |||
NDArray indices_train = File.ReadAllLines(Path.Join(dir, "indices_train.txt")); | |||
x_train = x_train[indices_train]; | |||
labels_train = labels_train[indices_train]; | |||
// x_train = x_train[indices_train]; | |||
// labels_train = labels_train[indices_train]; | |||
NDArray x_test = File.ReadAllLines(Path.Join(dir, "x_test.txt")); | |||
NDArray labels_test = File.ReadAllLines(Path.Join(dir, "y_test.txt")); | |||
NDArray indices_test = File.ReadAllLines(Path.Join(dir, "indices_test.txt")); | |||
x_test = x_test[indices_test]; | |||
labels_test = labels_test[indices_test]; | |||
// x_test = x_test[indices_test]; | |||
// labels_test = labels_test[indices_test]; | |||
// not completed | |||
var xs = x_train.hstack(x_test); | |||
var labels = labels_train.hstack(labels_test); | |||
var idx = x_train.size; | |||
var y_train = labels_train; | |||
var y_test = labels_test; | |||
return ((x_train, y_train), (x_test, y_test)); | |||
} | |||
private Dictionary<string, int> GetWordIndex() | |||
{ | |||
var result = new Dictionary<string, int>(); | |||
var json = File.ReadAllText(Path.Join(dir, "imdb_word_index.json")); | |||
var dict = JsonConvert.DeserializeObject<Dictionary<string, int>>(json); | |||
dict.Keys.Select(k => result[k] = dict[k] + 3).ToList(); | |||
result["<PAD>"] = 0; | |||
result["<START>"] = 1; | |||
result["<UNK>"] = 2; // unknown | |||
result["<UNUSED>"] = 3; | |||
return result; | |||
} | |||
} | |||
} |