Hi,
We post the test.py which generate all our customer layer and special symbol, I paste them here:
test.py
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import sys
import tensorflow as tf
import numpy as np
from tensorflow.python.platform import gfile
slim = tf.contrib.slim
#####################
# tf.split operation
# tf.square operation
# tf.real_div operation
a = tf.placeholder(dtype=tf.float32, shape=[10, 20, 30])
a1, a2 = tf.split(a, [10, 10], 1)
a3 = tf.square(a1) + tf.square(a2)
a4, a5 = tf.split(a3, [5, 5], 0)
a6 = tf.realdiv(a4, a5)
#####################
# tf.expand_dims and squeeze operation
b = tf.placeholder(dtype=tf.float32, shape=[10, 20, 30])
b1 = tf.expand_dims(b, 0)
b2 = tf.squeeze(b1, 0)
#####################
# tf.slice operation
c = tf.placeholder(dtype=tf.float32, shape=[10, 20, 30])
c1 = tf.slice(c, [0, 0, 0], [1, 1, 30])
#####################
# tf.unstack operation
d = tf.placeholder(dtype=tf.float32, shape=[10, 20, 30])
d1 = tf.unstack(d)
#####################
# Launch the default graph.
with tf.Session() as sess:
sess.run(b2, feed_dict={b: np.random.rand(10,20,30)})
#####################
# export the graph
my_graph_def = tf.get_default_graph().as_graph_def(add_shapes=True)
with gfile.FastGFile("test.pb", 'w') as f:
f.write(my_graph_def.SerializeToString())
test.pb.txt
node {
name: "Placeholder"
op: "Placeholder"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
node {
name: "Const"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 2
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
dim {
size: 2
}
}
tensor_content: "\n\000\000\000\n\000\000\000"
}
}
}
}
node {
name: "split/split_dim"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 1
}
}
}
}
node {
name: "split"
op: "SplitV"
input: "Placeholder"
input: "Const"
input: "split/split_dim"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "Tlen"
value {
type: DT_INT32
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 10
}
dim {
size: 30
}
}
shape {
dim {
size: 10
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
attr {
key: "num_split"
value {
i: 2
}
}
}
node {
name: "Square"
op: "Square"
input: "split"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "Square_1"
op: "Square"
input: "split:1"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "add"
op: "Add"
input: "Square"
input: "Square_1"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "Const_1"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 2
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
dim {
size: 2
}
}
tensor_content: "\005\000\000\000\005\000\000\000"
}
}
}
}
node {
name: "split_1/split_dim"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 0
}
}
}
}
node {
name: "split_1"
op: "SplitV"
input: "add"
input: "Const_1"
input: "split_1/split_dim"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "Tlen"
value {
type: DT_INT32
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 5
}
dim {
size: 10
}
dim {
size: 30
}
}
shape {
dim {
size: 5
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
attr {
key: "num_split"
value {
i: 2
}
}
}
node {
name: "RealDiv"
op: "RealDiv"
input: "split_1"
input: "split_1:1"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 5
}
dim {
size: 10
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "Placeholder_1"
op: "Placeholder"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
node {
name: "ExpandDims/dim"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 0
}
}
}
}
node {
name: "ExpandDims"
op: "ExpandDims"
input: "Placeholder_1"
input: "ExpandDims/dim"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "Tdim"
value {
type: DT_INT32
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 1
}
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "Squeeze"
op: "Squeeze"
input: "ExpandDims"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "squeeze_dims"
value {
list {
i: 0
}
}
}
}
node {
name: "Placeholder_2"
op: "Placeholder"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
node {
name: "Slice/begin"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 3
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
dim {
size: 3
}
}
tensor_content: "\000\000\000\000\000\000\000\000\000\000\000\000"
}
}
}
}
node {
name: "Slice/size"
op: "Const"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 3
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
dim {
size: 3
}
}
tensor_content: "\001\000\000\000\001\000\000\000\036\000\000\000"
}
}
}
}
node {
name: "Slice"
op: "Slice"
input: "Placeholder_2"
input: "Slice/begin"
input: "Slice/size"
attr {
key: "Index"
value {
type: DT_INT32
}
}
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 1
}
dim {
size: 1
}
dim {
size: 30
}
}
}
}
}
}
node {
name: "Placeholder_3"
op: "Placeholder"
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
dim {
size: 10
}
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
node {
name: "unstack"
op: "Unpack"
input: "Placeholder_3"
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "_output_shapes"
value {
list {
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
shape {
dim {
size: 20
}
dim {
size: 30
}
}
}
}
}
attr {
key: "axis"
value {
i: 0
}
}
attr {
key: "num"
value {
i: 10
}
}
}
versions {
producer: 22
}
we will also send you the email will attach test.py test.pb test.py.txt and uff_convter_tf tool python code we edited.
you can try to duplicate our problems, Thanks.