Частичный прогон тензорного потока на Голанге (состояния RNN) - PullRequest
2 голосов
/ 21 мая 2019

У меня есть модель генерации текста GRN RNN, которую я импортировал как protobuf в Golang.

model, err := tf.LoadSavedModel("poetryModel", []string{"goTag"}, nil)

Аналогично коду из этого урока Tensorflow , я запускаю цикл прогнозирования:

for len(generated_text) < 1000 {
    result, err := model.Session.Run(
            map[tf.Output]*tf.Tensor{
                model.Graph.Operation("inputLayer_input").Output(0): tensor,
            },
            []tf.Output{
                model.Graph.Operation("outputLayer/add").Output(0),
            },
            nil,
        )
    ...}

Тем не менее, эта реализация отбрасывает все промежуточные состояния после каждого цикла, что приводит к неправильному генерированию текста. Я попытался использовать Частичный прогон , но он выдал ошибку при втором прогоне:

pr, err := model.Session.NewPartialRun(
    []tf.Output{ model.Graph.Operation("inputLayer_input").Output(0), },
    []tf.Output{ model.Graph.Operation("outputLayer/add").Output(0), },
    []*tf.Operation{ model.Graph.Operation("outputLayer/add") },
)
if err != nil {
    panic(err)
}

...

result, err := pr.Run(
        map[tf.Output]*tf.Tensor{
            model.Graph.Operation("inputLayer_input").Output(0): tensor,
        },
        []tf.Output{
            model.Graph.Operation("outputLayer/add").Output(0),
        },
        nil,
    )

Error running the session with input, err: Must run 'setup' before performing partial runs!

Этот вопрос похож на этот, но в Python. Также в Go нет документации по настройке функции. Я новичок в работе непосредственно с графом вычислений TF и ​​Golang, поэтому любая помощь приветствуется.

...