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 | 人工智慧 |