Я создал график, который содержит некоторые операции из tf.math. Я назвал их правильно. И он работает правильно, если я его создам и запускаю сеанс в той же функции. Но если я хочу сохранить график или восстановить его в другой функции, эти узлы не будут видны, ie AssertionError: не на графике. Я хочу получить tf.math.count_nonzero в качестве вывода
def create_graph(kernel_size, output_pb_file_path):
with tf.Graph().as_default() as g:
# Make Gaussian Kernel with desired specs.
gauss_kernel = gaussian_kernel(kernel_size, 0.0, 4.0)
# Expand dimensions of `gauss_kernel` for `tf.nn.conv2d` signature.
gauss_kernel = gauss_kernel[:, :, tf.newaxis, tf.newaxis]
image1 = tf.placeholder(dtype=tf.uint8, shape=(1, 480, 848, 1), name='image1')
image2 = tf.placeholder(dtype=tf.uint8, shape=(1, 480, 848, 1), name='image2')
preprocessed_image1 = tf.dtypes.cast(image1, tf.float32)
preprocessed_image2 = tf.dtypes.cast(image2, tf.float32)
# Convolve.
smooth_image1 = tf.nn.conv2d(preprocessed_image1, gauss_kernel, strides=[1, 1, 1, 1], padding="SAME",
name='smooth_image1')
smooth_image2 = tf.nn.conv2d(preprocessed_image2, gauss_kernel, strides=[1, 1, 1, 1], padding="SAME",
name='smooth_image2')
diff_image = tf.math.abs(tf.math.subtract(smooth_image1, smooth_image2, name='sub_diff'), name='abs_diff')
bino = tf.cast(diff_image, tf.uint8, name='bino')
bino_thresh = tf.cast(bino > 50, tf.uint8, name='bino_thresh')
bino_jpg = tf.multiply(bino_thresh, 255, name='bino_jpg')
bino_jpg = tf.reshape(bino_jpg, (480, 848, 1), name='bino_jpg_reshaped')
nonzero = tf.math.count_nonzero(bino_jpg, dtype=tf.int64, name='nonzero')
return g
Затем в другой функции я делаю:
nonzero = comp_graph.get_tensor_by_name('nonzero:0')
И получаю:
AssertionError: nonzero is not in graph
Это происходит только с операциями tf.math, и я не могу понять ни причину, ни способ правильно выполнить эту операцию
Я бы очень признателен за любые мысли