TensorFlow

官方教程一句话,报错一查全不知。

1. 下载代码

go get -d -v github.com/tensorflow/tensorflow/tensorflow/go

2. 下载所需依赖

  下载protoc解压至GOPATH(其他地方也可以,但是需要确定已经加入PATH环境变量)

protoc需要3.x以上版本

  下载libtensorflow解压到当前目录(其他地方也可以,但是后面的PROTOC参数也要跟对应的改)

libtensorflow 就是 TensorFlow Go 软件包所需的 TensorFlow C 库
这里以libtensorflow-cpu-windows-x86_64-1.14.0.zip为例。
具体可用版本号可以在 这里 查找
其他版本的可以按格式自由组合https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-{cpu/gpu}-{windows/linux/darwin}-x86_64-{1.14.0/1.15.0/等等}.zip

3. 配置依赖(重要)

  首先配置环境变量:

LIBRARY_PATH原值+libtensorflow/lib
PATH原值+LIBRARY_PATH

CMD(临时使用):

rem 配置依赖库
set LIBRARY_PATH=%cd%\lib
set PATH=%PATH%;%%LIBRARY_PATH%%

PowerShell(临时使用):

$env:LIBRARY_PATH="F:\Download\tensorflow\lib"
$env:PATH=$env:PATH+";"+$env:LIBRARY_PATH

  打开文件%GOPATH%/src/github.com/tensorflow/tensorflow/tensorflow/go/genop/generate.sh
在第25行(内容为:fi)后添加:

# 修改GOPATH路径
PWDHOME=$(pwd)
GOPATH=${GOPATH//\\/\/}
GOPATH=/${GOPATH//:/}
echo ${PWDHOME}
echo ${GOPATH}
cd ${GOPATH}/src/github.com/tensorflow/tensorflow/tensorflow/go/genop/

在第57行(内容为:fi)后添加:

# 修改PROTOC参数,引入libtensorflow的include文件
PROTOC="${PROTOC} -I ${PWDHOME}/include"
echo ${PROTOC}
注:关于generate.sh文件的修改已经提交pr

  然后执行生成所需文件
CMD:

bash %GOPATH%/src/github.com/tensorflow/tensorflow/tensorflow/go/genop/generate.sh

PowerShell:

bash $env:GOPATH/src/github.com/tensorflow/tensorflow/tensorflow/go/genop/generate.sh
注:该步骤实际上是拆分了go generate那一步,不编译c库的话go generate不需要全部执行。

4. 测试框架

# 运行测试
go test github.com/tensorflow/tensorflow/tensorflow/go

错误记录

fatal: not a git repository (or any of the parent directories): .git
  Cache_-101b7074211dbb5..jpg
  清空%GOPATH%/src/github.com/tensorflow/tensorflow/,然后重试

cannot find package "github.com/tensorflow/tensorflow/tensorflow/go/core/core_protos_go_proto"
  Cache_3f677d8c93a73de2..jpg
  不可以直接执行go install或者go get,请参考[1. 下载代码]

error:inconsistent package import paths: allocation_description_go_proto api_def_go_proto
  Cache_1c131cfa3670c022..jpg
  windows路径没有正确转换为linux路径,请参考[3. 配置依赖(重要)] ,修改generate.sh文件

Cannot convert path "" to or from windows style
  20200307134541.png
  windows路径没有正确转换为linux路径,请参考[3. 配置依赖(重要)] ,修改generate.sh文件

cannot find -ltensorflow collect2.exe: error: ld returned 1 exit status
  20200307134412.png
  说明依赖库没有正确配置,将tensorflow.lib添加到PATH环境变量即可。

exit status 3221225781
  说明依赖库没有正确配置,将tensorflow.dll添加到PATH环境变量即可。

exit status 3221225794
  原本意思是:应用程序无法正确初始化。该任务被配置为在系统帐户下运行,因此应该具有运行该批处理脚本所需的所有权限。
  但是在这里,它意味着你的CPU不支持所需的指令集。1.5及以下没有强制要求;1.6-2.1(当前最新)需要AVX指令集

正如发行说明中所宣布的那样,TensorFlow发行版本1.6和更高版本的二进制文件是使用AVX指令集预先构建的。这意味着在没有这些指令集的任何CPU上,CPU或GPU版本的TF将无法加载,并出现以下任何错误:ImportError: DLL load failed

参考资料:

  安装 Go 版 TensorFlow
  TensorFlow in Go
  TensorFlow issues
  Common program exit codes and error levels