はじめましてkatoutです。
この記事は巷で流行ってると聞くTensorFlowをVisualStudioで動かそうという試みです。
ちなみに機械学習についてはこれが入門で始めるので新しい知識を求めている方向けではございません。
また、もっと他の最善の方法があると思うので知っている方がいましたら教えてください。
目的
Installing TensorFlow for Cという公式ドキュメントがありますがwindowsはサポートに含まれていません。
それをwindowsでやってみようというのが今回の目的です。
全体の流れ
- jenkinsおじさんがビルドしたdllをダンロード
- libの生成
- VisualStudioで読み込み
- Hello World!
1.dllのダウンロード
tensorflow公式jenkinsよりcライブラリdllをダウンロードします。
libtensorflow-cpu-windows-x86_64.zip
中身を見ると以下のようになっており暗黙的リンクをするにはlibが足りないため生成を行います。
c_api.h
LICENSE
tensorflow.dll
2. libの生成
libを生成するにはvisual studioに付属しているlib.exeを利用することで作成できます。
libを作るためまずdefファイルが必要となるため以下のコマンドで定義を調べ
dumpbin.exe /EXPORTS tensorflow.dll > tensorflow.txt
Microsoft (R) COFF/PE Dumper Version 14.00.24215.1
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file tensorflow.dll
File Type: DLL
Section contains the following exports for libtensorflow.so
00000000 characteristics
593620A4 time date stamp Tue Jun 6 12:25:24 2017
0.00 version
1 ordinal base
131 number of functions
131 number of names
ordinal hint RVA name
1 0 020A4440 ?DEVICE_CPU@tensorflow@@3QEBDEB
2 1 020A4448 ?DEVICE_GPU@tensorflow@@3QEBDEB
3 2 020A4450 ?DEVICE_SYCL@tensorflow@@3QEBDEB
4 3 00172050 TF_AbortWhile
5 4 00172060 TF_AddControlInput
6 5 00172070 TF_AddGradients
...
defファイル自力を作ります。
LIBRARY tensorflow
EXPORTS
TF_AbortWhile
TF_AddControlInput
TF_AddGradients
...
TF_TensorType
TF_Version
最後に作成したtensorflow.defからlib.exeを利用しtensorflow.libを生成します。
lib /def:tensorflow.def /machine:x64
c_api.h
LICENSE
tensorflow.def
tensorflow.dll
tensorflow.exp
tensorflow.lib
tensorflow.txt
3.visual studioで読み込み
-
適当にwin32コンソールアプリケーションを作成
-
構成プロパティ / C/C++ / 全般の「追加インクルードディレクトリ」に一番はじめにdlしたc_api.hのフォルダを追加
-
構成プロパティ / リンカー / 全般の「追加ライブラリディレクトリ」にtensorflow.libが含まれるフォルダを追加
-
一番はじめにdlしてきたtensorflow.dllを実行ファイルと同じ階層へ配置
$(SolutionDir)\x64\Debug\tensorflow.dll
4.Hello World!
Installing TensorFlow for Cのドキュメントに従って以下のファイルを作成し実行。
#include <stdio.h>
#include <c_api.h>
void main() {
printf("Hello from TensorFlow C library version %s\n", TF_Version() );
}
おわりに
素直にcmake CMakeLists.txt でビルドすればいいと思います。時間があるときにやってみたいと思います。
次はc++のライブリラリを読み込んで実際にtensorflowにて機械学習を動かす部分を目指します。