「TensorFlowSharp」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''TensorFlowSharp'''<ref>https://github.com/migueldeicaza/TensorFlowSharp</ref>とは、[[TensorFlow]]を[[Mono]]から叩けるようにしたバインディングライブラリである。
+
'''TensorFlowSharp'''<ref>https://github.com/migueldeicaza/TensorFlowSharp</ref>とは、TensorFlowを[[Mono]]から叩けるようにしたバインディングライブラリである。
 
   
 
   
 
== 概要 ==
 
== 概要 ==
[[Mono]]の神様である[[Miguel de Icaza]]氏のツイッターから流れてきた。
+
Miguel de Icaza氏のツイッターから流れてきた。
[[ソースコード]]レベルでの[[移植]]ではなくバインディングなので事前の環境構築が必要となる。
+
ソースコードレベルでの移植ではなくバインディングなので事前の環境構築が必要となる。
事前に構築した[[データベース]]をもとに[[Xamarin]]と[[スマホ]]単体で[[人工知能]]が使えるようになると色々おもしろいかもしれない。
 
  
 
== 環境構築 ==
 
== 環境構築 ==
14行目: 13行目:
 
  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
28行目: 26行目:
 
  TFWhileParams result = TF_NewWhile (handle, inputs, inputs.Length, cstatus.handle);
 
  TFWhileParams result = TF_NewWhile (handle, inputs, inputs.Length, cstatus.handle);
  
== プロジェクトを作ってみる ==
+
== プロジェクトを作る ==
 +
* フレームワーク:.NET Framework 4.6.1
 
* プラットフォーム:x64 ←これ重要
 
* プラットフォーム: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」で検索していれる。
 
  
== サンプル ==
+
libtensorflowが64ビット必須であるため、プラットフォームターゲットを「x86」にしたままビルドすると実行時に落ちる。
 
+
必ずx64でビルドする必要がある。
=== 足し算 ===
 
とりあえず「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>
 
  
 
== 関連項目 ==
 
== 関連項目 ==
127行目: 40行目:
  
 
{{stub}}
 
{{stub}}
<references />
 

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: