如何在 golang 中的文本上执行 DL - RNN 模型?

How to execute DL - RNN model on text in golang?

我已经根据 reddit/twitter 对话在 tensor-flow 中构建了 RNN 模型。我把它保存在 pb。有谁知道如何通过 golang 中的模型传递原始文本字符串并生成输出?

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()

您可以使用 tfgo 轻松加载到 Go 中并使用经过训练的张量流模型:只需使用 tf.saved_model.builder.SavedModelBuilder 导出经过训练的模型,如 tfgo 自述文件中所示。

但是,您只需从图中提取输入占位符,然后使用它来馈送网络。

假设您导出模型时调用它 my_model 并用标签 tag 标记它。我们还假设您的输入占位符名为 "Placeholder"。此外,您必须知道输出节点的名称。我们称它为 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]
}