Слой tf.image.per_image_standardization()
создаст некоторые внутренние переменные, которые можно использовать для восстановления исходных данных.Обратите внимание, что это недокументированное поведение и не гарантируется, что он останется прежним.Тем не менее, пока вы можете использовать приведенный ниже код (проверено) для справки, как получить соответствующие тензоры и восстановить исходные данные:
import tensorflow as tf
import numpy as np
img_size = 3
a = tf.placeholder( shape = ( img_size, img_size, 1 ), dtype = tf.float32 )
b = tf.image.per_image_standardization( a )
with tf.Session() as sess:
tensors, tensor_names = [], []
for l in sess.graph.get_operations():
tensors.append( sess.graph.get_tensor_by_name( l.name + ":0" ) )
tensor_names.append( l.name )
#mean_t = sess.graph.get_tensor_by_name( "per_image_standardization/Mean:0" )
#variance_t = sess.graph.get_tensor_by_name( "per_image_standardization/Sqrt:0" )
foobar = np.reshape( np.array( range( img_size * img_size ), dtype = np.float32 ), ( img_size, img_size, 1 ) )
res = sess.run( tensors, feed_dict = { a : foobar } )
#for i in xrange( len( res ) ):
# print( i, tensor_names[ i ] + ":" )
# print( res[ i ] )
# print()
mean = res[ 6 ] # "per_image_standardization/Mean:0"
variance = res[ 13 ] # "per_image_standardization/Sqrt:0"
standardized = res[ 18 ] # "per_image_standardization:0"
original = standardized * variance + mean
print( original )
Вы можете раскомментировать строки mean_t
и variance_t
, чтобыполучить ссылку на соответствующие тензоры по имени.(Требуется некоторая перезапись части sess.run()
.) Вы можете раскомментировать четыре строки, начинающиеся с for i in xrange(...
(перезапись не требуется), чтобы напечатать все доступные созданные тензоры для вашего редактирования.:)
Вышеприведенный код, как есть, выводит:
[[[0.]
[1.]
[2.]]
[[3.]
[4.]
[5.]]
[[6.]
[7.]
[8.]]]
Это именно те данные, которые были переданы в сеть.