如何使用Golang将数据转换为序列化的tf.Example(tensorflow tfrecords)

时间:2018-01-23 02:03:58

标签: go tensorflow tensorflow-serving

是否有Golang API将数据转换为序列化的tf.Example,也称为tensorflow tfrecords。

我可以找到一个Python api tf.python_io.TFRecordWriter()来实现这一目标。

但是找不到golang的例子。

我想这样做因为我使用golang客户端来调用tensorflow服务而我的输入功能是nn是一个SparseTensor。

2 个答案:

答案 0 :(得分:1)

tf.Example指的是协议缓冲区,而tfrecords通常指的是存储"记录"的文件格式。以字符串的形式(这就是为什么tf.python_io.TFRecordWriter.write()采用字符串)。所以这两者是分开的东西,与技术无关。虽然通常会将tf.Example协议缓冲区序列化为字符串,但TFRecordWriter中的每个记录都有一个。

也就是说,模型通常以tf.Example张量的形式将序列化STRING协议缓冲区作为输入作为输入。如果是这种情况,那么您希望在Go中构建tf.Example协议缓冲区,然后使用proto.Marshal构建要提供的tf.Tensor对象。

不幸的是,自2018年1月起,您必须自己为tf.Example protos生成Go文件。这可以通过以下方式完成:

# Fetch the tools
GOPATH=$(go env GOPATH)
go get github.com/golang/protobuf/proto
go get github.com/golang/protobuf/protoc-gen-go

# Create a directory to generate the files
mkdir -p /tmp/protos/out
cd /tmp/protos

# Clone the TensorFlow sources to get the source .proto files
git clone https://github.com/tensorflow/tensorflow ./src
PATH=$PATH:${GOPATH}/bin

# Generate Go source files from the .proto files.
# Assuming protoc is installed.
# See https://github.com/google/protobuf/releases
protoc \
  -I ./src \
  --go_out ./out \
  ./src/tensorflow/core/framework/*.proto ./src/tensorflow/core/example/*.proto
rm -rf ./src

这将在.pb.go中生成一堆/tmp/protos/out个文件,这些文件可用于构建tf.Example协议缓冲区结构以进行编组。

希望能为您提供足够的信息。

答案 1 :(得分:0)

对于仍然有兴趣与^[1-9]\d*(?: ?(?:[a-zA-Z]|[/-] ?\d+[a-z]?))?$TFRecords进行交互的任何人,都有一个由NVIDIA创建并具有MIT许可证的库,名为 go-tfdata :{{3 }}

它可以将任何记录/样本源转换为tf.data.Example-tf.data.Example文件集。

此外,它本机支持TAR存档到TFRecord的转换。

从示例开始-将TAR转换为TFRecord很简单:

TFRecord