2017-11-06 4 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

어떻게하면'tg.Cast' 함수를 사용하여 inputText를'tensorflow' 유형으로 변환 할 수 있습니까? 루트를 먼저'root : = tg.NewRoot()'그리고'A = tg.Cast (root, A, tf.Int32)'로 만들어야합니까? 함수 정보는 다음과 같이 지정합니다.'Cast가 현재 텐서를 요청 된 dtype으로 변환합니다 .' 'inputText'를 현재의 텐서로 변환하는 방법을 설명해 주시겠습니까? 전환에서 '루트'역할은 무엇입니까? –

+1

루트는 그래프의 루트입니다. 그래프를 설명하기 때문에 필요합니다. 그러나,'inputText' (Go 변수)를 텐서 변수 (즉,'inputText'를 저장하는'tf.Output' 변수)로 변환하고자한다면'tg.Cast'를 사용할 필요가 없습니다) 그러나 tg.Const'를 사용하여 Go 값 – nessuno

+0

thx에서'tf.Output'을 생성해야합니다. 그러나이 메소드는'inputText : = buffer.String()'으로 잘못되었습니다. 및 'inputTextTensor : = tg.Const (root, inputText)'의 형식 시그니처가 '\t'과 일치하지 않습니다. 결과 : = model.Exec ([] tf.Output { model.Op ("output/node/path/op "0) \t} 맵 [tf.Output * tf.Tensor { \t \t model.Op ("input_data ", 0) inputTextTensor, \t})'오류'inputTextTensor (형식을 사용할 수없는 tensorflow.Output) 유형 * tensorflow.T 지도 값에 ensor ' –