「TensorFlowSharp」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
27行目: 27行目:
  
 
== プロジェクトを作る ==
 
== プロジェクトを作る ==
 +
* プラットフォーム:x64 ←これ重要
 +
*: Xamarin Studioで「コンソールアプリケーション」を作るとデフォルトで「x86」となっているので変更する。libtensorflowが64ビット必須であるため「x86」にしたままビルドすると実行時に落ちる。必ずx64でビルドする必要がある。
 
* フレームワーク:.NET Framework 4.6.1
 
* フレームワーク:.NET Framework 4.6.1
* プラットフォーム:x64 ←これ重要
+
*: Xamarin Studioで「コンソールアプリケーション」を作るとデフォルトで「.NET Framework 4.5」となっているので変更する。これをやらないとTensorFlowSharpを参照に追加する際にグレーアウトしている。
 
 
libtensorflowが64ビット必須であるため、プラットフォームターゲットを「x86」にしたままビルドすると実行時に落ちる。
 
必ずx64でビルドする必要がある。
 
  
 
== サンプル ==
 
== サンプル ==

2017年3月30日 (木) 01:00時点における版

TensorFlowSharp[1]とは、TensorFlowをMonoから叩けるようにしたバインディングライブラリである。

概要

Miguel de Icaza氏のツイッターから流れてきた。 ソースコードレベルでの移植ではなくバインディングなので事前の環境構築が必要となる。

環境構築

Mac

TensorFlowSharp公式の説明ではlibtensorflowのバイナリを直接ダウンロードするように指示されているが、macだとhomebrewにもlibtensorflowがあるようなのでこちらを使った。

brew install libtensorflow

homebrewではlibtensorflowの拡張子が「.so」のままなので「.dylib」のシンボリックリンクを貼る。

ln -s /usr/local/lib/libtensorflow.so /usr/local/lib/libtensorflow.dylib

TensorFlowSharpのソースコード(サンプル含む)を落としてくる。

git clone https://github.com/migueldeicaza/TensorFlowSharp.git
cd TensorFlowSharp

なぜかサンプル周りで使われているパッケージの復元をXamarin Studioで実行すると失敗するのでコンソール上で復元しておく。

nuget restore

Xamarin Studioで開いてみる

open TensorFlowSharp.sln 

SampleTestプロジェクトを実行してみると以下の部分で例外が発生して落ちる。なぜかは知らん。

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を参照に追加する際にグレーアウトしている。

サンプル

とりあえず「c = a + b」という式をTensorFlowに投げて実行してみる。

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());
		}
	}
}

関連項目

参考文献