Google Protobuf - Small update and parsing a tensorflow GraphDef

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Google Protobuf - Small update and parsing a tensorflow GraphDef

Holger Freyther
A short update on the current state of my implementation. I heard there is interest to use it to parse tensor flow models.


0.) Load the BaselineOfProtobuf from https://github.com/zecke/pharo-protobuf



1.) Generate code

Use the Google protoc to generate a descriptor set:

$ protoc -o tf.pb --include_imports tensorflow/core/framework/graph.proto



And then use this descriptor to generate code:

        | descriptor nameTable generator |
        descriptor := GPBFileDescriptorSet
                materializeFrom: 'tf.pb' asFileReference  binaryReadStream.
        nameTable := GPBTypeNamesVisitor new.
        nameTable customPrefix: 'TF_'.
        generator := GPBGeneratingVisitor new typeNames: nameTable; targetPackage: 'Tensorflow-Definitions'.
        descriptor visit: nameTable.
        generator visit: descriptor.




2.) Parse a model (e.g. the inception v3 model)

TF_GraphDef materializeFrom: 'inception_v3_2016_08_28_frozen.pb' asFileReference binaryReadStream

3.) ???

I guess load it into tensorflow?



I am not sure if the endianness for the Float is correct (if not the weights are wrong so please be careful and have a look).


There are still plenty of TODOs left. JSON and TextProto parsing needs to be implemented. Working on the official regression suite is needed as well. Strict/Non-strict modes for parsing are needed as well.