How about Go in TensorFlow?

How about Go in TensorFlow?

來自專欄人工智慧從入門到逆天殺神(FutureAI)4 人贊了文章

title: How about Go in TensorFlow?date: 2018-04-09 22:09:09category: 默認分類

本文介紹 How about Go in TensorFlow?<!-- more -->

How about Go in TensorFlow?

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

我想寫這個很久了,我們想看看採用go寫TensorFlow是一種怎麼樣的體驗?要知道go語言可是世界上最好的語言(拍黃片開始吐槽了..)。如果我們此舉能夠成功,用go語言編譯自己的tensorfow程序,那豈不是編程一個executable file,直接丟給別人就能運行了?好,那我們開始吧。

安裝TensorFlow Go

首先,這個不支持windows,且go的api不受tensorflow官方支持。但是go還是有很多優點吸引著我們來嘗試一下的,如果可以編譯成二進位的獨立文件,那基本上可以拋棄C++了。

首先第一步需要安裝一下tensorflow的C語言鏈接庫:

TF_TYPE="cpu" # Change to "gpu" for GPU support TARGET_DIRECTORY=/usr/local curl -L "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-${TF_TYPE}-$(go env GOOS)-x86_64-1.6.0.tar.gz" | sudo tar -C $TARGET_DIRECTORY -xz

首先是下載,然後解壓到target目錄。這個libtensorflow.so只有18M。我們可以把這個放到一個sh文件裡面去。這個時候你會在/usr/local/lib裡面有libtensorfow.so以及在/usr/local/include裡面有相應的頭文件。

然後我們go get一下tensorflow的go依賴包:

go get github.com/tensorflow/tensorflow/tensorflow/go

完了就可以使用go了!

Go TensorFlow Hello World!

簡單易行的操作之後,我們決定使用Go來寫一個hello world,並且我們會看一下go編譯之後的二進位文件的大小,是否可以獨立分發。

我們已經迫不系帶要用go寫一個hello world 了,但是好像上面的go get操作有點慢,這是因為你懂得原因,git速度很慢,稍等一下,與此同時我們出去喝杯茶。

。。。。

他媽的一小時過了還沒有go get完???

我還能說什麼,我該如何表達。QNMD,速度咋這麼慢。再等等,在等等,稍安勿躁,保持冷靜。

。。。。

午飯都吃完了,才go get完。好吧,讓我們開始吧。

首先,我們需要新建一個`hello_tf.go的文件,然後測試一下我們的hello world的代碼:

package mainimport ( "fmt" tf "github.com/tensorflow/tensorflow/tensorflow/go" "github.com/tensorflow/tensorflow/tensorflow/go/op")func main() { // Construct a graph with an operation that produces a string constant. s := op.NewScope() c := op.Const(s, "Hello from TensorFlow version "+tf.Version()) graph, err := s.Finalize() if err != nil { panic(err) } // Execute the graph in a session. sess, err := tf.NewSession(graph, nil) if err != nil { panic(err) } output, err := sess.Run(nil, []tf.Output{c}, nil) if err != nil { panic(err) } fmt.Println(output[0].Value())}

看上去還不錯,golang的寫法與tensorflow貿易太大的差別。

讓我們編譯一下:

go build -o hello_go hello_tf.go

看上去還是十分6的啊,而且最終編譯的文件大小是3M..emmmmm…如果我把這個給別人,對方沒有任何tensorflow環境, 能執行嗎?

經過我的測試,貌似並不能運行,會出現類似於:

Reason: image not foundAbort trap: 6

的錯誤,究其原因是因為對方機器上沒有安裝tensorflow.so的動態鏈接庫。

不過我們最終還是踩了這坑,並不能說完全沒有用,最起碼,對於深度學習的部署,尤其是0依賴的部署,還是有一些探究了。


推薦閱讀:

Duplex AI演示驚為天人,對於真實性谷歌拒不回應
人工智慧知識推理--大數據與深度學習之下,不應該被拋棄的經典方法
專家分享:深度學習工程師的4個檔次
再不努力,連收銀員都沒得做了
地平線機器人方懿:人工智慧將會無處不在

TAG:Golang最佳實踐 | TensorFlow | 人工智慧 |