2017-11-06 7 views
0

reddit/twitterの会話に基づいてtensor-flowRNNモデルをビルドしました。私はpbにそれを保存しました。誰もがgolangのモデルを介して生のテキスト文字列を渡し、出力を生成する方法を知っていますか?ただtfgo READMEに示すようtf.saved_model.builder.SavedModelBuilderを使用して訓練されたモデルをエクスポート:golangのテキストにDL-RNNモデルを実行するにはどうすればよいですか?

modeldir := "/my_model.pb" 

// Buffer input text 
var buffer bytes.Buffer 

args := os.Args[1:] 

for _, arg := range args { 
    buffer.WriteString(arg + " ") 
} 

inputText := buffer.String() 

// Load the serialized GraphDef from a file. 

model, err := ioutil.ReadFile(modeldir) 
if err != nil { 
    log.Fatal(err) 
} 
// Construct an in-memory graph from the serialized form. 
graph := tf.NewGraph() 
if err := graph.Import(model, ""); err != nil { 
    log.Fatal(err) 
} 
// Create a session for inference over graph. 
session, err := tf.NewSession(graph, nil) 
if err != nil { 
    log.Fatal(err) 
} 
defer session.Close() 

答えて

1

あなたは簡単に行くにロードし、tensorflow訓練されたモデルを使用するようにtfgoを使用することができます。

ただし、入力プレースホルダをグラフから抽出して、それを使用してネットワークにフィードするだけで済みます。

モデルをエクスポートしてmy_modelとし、タグtagでタグ付けしたとします。また、入力プレースホルダの名前が「プレースホルダ」であるとします。さらに、出力ノードの名前を知る必要があります。それをoutput/node/path/opとしましょう。あなたのコードは次のようになります:

import (
     "fmt" 
     tg "github.com/galeone/tfgo" 
     tf "github.com/tensorflow/tensorflow/tensorflow/go" 
     "flags" 
) 

func main() { 
     model := tg.LoadModel("my_model", []string{"tag"}, nil) 

     // Buffer input text 
     var buffer bytes.Buffer 
     args := os.Args[1:] 

     for _, arg := range args { 
      buffer.WriteString(arg + " ") 
     } 
     // handle the retunred error below, if any 
     inputText, _ := tf.NewTensor(buffer.String()) 

     results := model.Exec([]tf.Output{ 
       model.Op("output/node/path/op", 0), 
     }, map[tf.Output]*tf.Tensor{ 
       model.Op("Placeholder", 0): inputText, 
     }) 
     // do something with results[0] 
} 
+0

inputTextを 'tensorflow'型に変換するには、' tg.Cast'関数をどのように使いますか?ルートを最初に 'root:= tg.NewRoot()'とし、 'A = tg.Cast(root、A、tf.Int32)'とする必要がありますか?関数情報は次のように指定します: 'キャストは現在のテンソルを要求されたdtypeにキャストします '。 'inputText'を現在のテンソルに変換する方法を説明できますか?変換で 'ルート 'の役割は何ですか? –

+1

ルートはグラフのルートです。グラフを記述しているので必要です。しかし、 'inputText'(Go変数)をテンソルに変換したい場合(' inputText'を保持する 'tf.Output'変数に)、' tg.Cast'を使う必要はありませんテンソルの中で)、しかし、Go値 – nessuno

+0

thxから 'tf.Output'を作成するには' tg.Const'を使う必要がありますが、これは 'inputText:= buffer.String()'のように間違っていると思います。 (出力、ノード/パス/演算子) 'inputTextTensor:= tg.Const(root、inputText)'は '\t'の型シグニチャと一致しません。 」、0)、 \t}、マップ[tf.Output] * tf.Tensor { \t \t model.Op( "INPUT_DATA"、0):inputTextTensor、 \t}) 'エラーで:' inputTextTensor(タイプを使用することはできませんtensorflow.Output)型として*テンソルフローマップ値でensor ' –

関連する問題