Я пытаюсь воспроизвести вывод модуля Tensorflow Hub
, который основан на Tensorflow Slim
контрольной точке, используя модули Tensorflow Slim
. Однако я не могу получить ожидаемый результат. Например, давайте загрузим необходимые библиотеки, создадим образец ввода и заполнитель для подачи данных:
import tensorflow_hub as hub
from tensorflow.contrib.slim import nets
images = np.random.rand(1,224,224,3).astype(np.float32)
inputs = tf.placeholder(shape=[None, 224, 224, 3], dtype=tf.float32)
Загрузите модуль TF Hub
:
resnet_hub = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_152/feature_vector/3")
features_hub = resnet_hub(inputs, signature="image_feature_vector", as_dict=True)["resnet_v2_152/block4"]
Теперь сделаем то же самое с TF Slim
и создадим загрузчик, который загрузит контрольную точку:
with slim.arg_scope(nets.resnet_utils.resnet_arg_scope()):
_, end_points = nets.resnet_v2.resnet_v2_152(image, is_training=False)
features_slim = end_points["resnet_v2_152/block4"]
loader = tf.train.Saver(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope="resnet_v2_152"))
Теперь, когда у нас все готово, мы можем проверить, одинаковы ли результаты:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
loader.restore(sess, "resnet_v2_152_2017_04_14/resnet_v2_152.ckpt")
slim_output = sess.run(features_slim, feed_dict={inputs: images})
hub_output = sess.run(features_hub, feed_dict={inputs: images})
np.testing.assert_array_equal(slim_output, hub_output)
Однако утверждение не выполняется, потому что два вывода не совпадают. Я предполагаю, что это связано с тем, что TF Hub
использует внутреннюю предварительную обработку входных данных, которой не хватает реализации TF Slim
.
Дайте мне знать, что вы думаете!