「TensorFlowSharp」の版間の差分
imported>Administrator 編集の要約なし |
|||
| (4人の利用者による、間の13版が非表示) | |||
| 1行目: | 1行目: | ||
'''TensorFlowSharp'''<ref>https://github.com/migueldeicaza/TensorFlowSharp</ref> | '''TensorFlowSharp'''<ref>https://github.com/migueldeicaza/TensorFlowSharp</ref>とは、[[TensorFlow]]を[[Mono]]から叩けるようにしたバインディングライブラリである。 | ||
== 概要 == | == 概要 == | ||
Miguel de | [[Mono]]の神様である[[Miguel de Icaza]]氏のツイッターから流れてきた。 | ||
[[ソースコード]]レベルでの[[移植]]ではなくバインディングなので事前の環境構築が必要となる。 | |||
事前に構築した[[データベース]]をもとに[[Xamarin]]と[[スマホ]]単体で[[人工知能]]が使えるようになると色々おもしろいかもしれない。 | |||
== 環境構築 == | == 環境構築 == | ||
| 13行目: | 14行目: | ||
ln -s /usr/local/lib/libtensorflow.so /usr/local/lib/libtensorflow.dylib | ln -s /usr/local/lib/libtensorflow.so /usr/local/lib/libtensorflow.dylib | ||
== 公式サンプルを動かしてみる == | |||
TensorFlowSharpの[[ソースコード]](サンプル含む)を落としてくる。 | TensorFlowSharpの[[ソースコード]](サンプル含む)を落としてくる。 | ||
git clone https://github.com/migueldeicaza/TensorFlowSharp.git | git clone https://github.com/migueldeicaza/TensorFlowSharp.git | ||
| 25行目: | 27行目: | ||
SampleTestプロジェクトを実行してみると以下の部分で例外が発生して落ちる。なぜかは知らん。 | SampleTestプロジェクトを実行してみると以下の部分で例外が発生して落ちる。なぜかは知らん。 | ||
TFWhileParams result = TF_NewWhile (handle, inputs, inputs.Length, cstatus.handle); | TFWhileParams result = TF_NewWhile (handle, inputs, inputs.Length, cstatus.handle); | ||
== プロジェクトを作ってみる == | |||
* プラットフォーム:x64 ←これ重要 | |||
*: Xamarin Studioで「コンソールアプリケーション」を作るとデフォルトで「x86」となっているので変更する。libtensorflowが64ビット必須であるため「x86」にしたままビルドすると実行時に落ちる。必ずx64でビルドする必要がある。 | |||
* フレームワーク:.NET Framework 4.6.1以上 | |||
*: Xamarin Studioで「コンソールアプリケーション」を作るとデフォルトで「.NET Framework 4.5」となっているので変更する。これをやらないとTensorFlowSharpを参照に追加する際にグレーアウトしている。 | |||
*: [[Visual Studio for Mac]]でプロジェクトを新規作成すると.NET Framework 4.7が選ばれるはずなので変更する必要はない。 | |||
* TensorFlowSharpへの「参照」を追加する。 | |||
*: <s>NuGetにもTensorFlowSharpCoreというライブラリがあるようだが何故かパッケージ追加に失敗する。TensorFlowSharpのソースコードを落としてきてプロジェクトごと参照に追加する方法だと問題ない。</s> | |||
*: NuGet版も正常に動くようになっている。「TensorFlowSharp」で検索していれる。 | |||
== サンプル == | |||
=== 足し算 === | |||
とりあえず「c = a + b」という式をTensorFlowに投げて実行してみる。<syntaxhighlight> | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using TensorFlow; | |||
namespace sample | |||
{ | |||
class MainClass | |||
{ | |||
public static void Main(string[] args) | |||
{ | |||
var graph = new TFGraph(); | |||
var a = graph.Const( 1, "a"); // a = 1 | |||
var b = graph.Const( 2, "b"); // b = 2 | |||
var c = graph.Add( a, b, "c"); // c = a + b | |||
// 実行 | |||
var session = new TFSession(graph, new TFSessionOptions()); | |||
var runner = session.GetRunner(); | |||
var result = runner.Run(c); | |||
// c = 3 | |||
Console.WriteLine(result.FirstOrDefault()); | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
=== 保存と読込 === | |||
1年前はできなかった保存と読込ができるようになったぞ。トレーニングも捗るな。<syntaxhighlight> | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
using TensorFlow; | |||
namespace tensor1 | |||
{ | |||
class MainClass | |||
{ | |||
public static void Main(string[] args) | |||
{ | |||
using (var graph = new TFGraph()) | |||
{ | |||
Console.WriteLine("-- save --"); | |||
using (var session = new TFSession(graph)) | |||
{ | |||
// 数値を作る | |||
var a = session.Graph.Const(30, "a"); | |||
var b = session.Graph.Const(12, "b"); | |||
// 足し算 | |||
var multiplyResults = session.GetRunner().Run(session.Graph.Add(a, b)); | |||
var multiplyResultValue = multiplyResults.GetValue(); | |||
Console.WriteLine("a + b = {0}", multiplyResultValue); | |||
// 保存 | |||
session.SaveTensors("saved.tsf", ("a", a), ("b", b)); | |||
} | |||
Console.WriteLine("-- load --"); | |||
using (var session = new TFSession()) | |||
{ | |||
// 読込 | |||
var a = session.RestoreTensor("saved.tsf", "a", TFDataType.Int32); | |||
var b = session.RestoreTensor("saved.tsf", "b", TFDataType.Int32); | |||
// 足し算 | |||
var multiplyResults = session.GetRunner().Run(session.Graph.Add(a, b)); | |||
var multiplyResultValue = multiplyResults.GetValue(); | |||
Console.WriteLine("a + b = {0}", multiplyResultValue); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
== 関連項目 == | == 関連項目 == | ||
| 33行目: | 127行目: | ||
{{stub}} | {{stub}} | ||
<references /> | |||