Как получить активации всех слоев для конкретного входа для модулей Tensorflow Hub? - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в Tensorflow Hub. Я хочу использовать модуль I3D и перенастроить эту сеть на другой набор данных, и мне нужно получить последний скрытый слой, а также выходные данные некоторых других слоев. Мне было интересно, есть ли способ получить активацию других слоев. Единственная подпись, предоставляемая для I3D, это просто «по умолчанию». Я думаю, что должен быть способ легко получить выходные данные всех слоев с помощью модулей Tensorflow Hub.

import tensorflow_hub as hub
module = hub.Module("https://tfhub.dev/deepmind/i3d-kinetics-600/1", trainable=False)
logits = module(inp)

Это даст мне окончательный вывод слоя. Как я могу получить выходные данные другого слоя, например, выход второго слоя свертки?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете получить другие слои по имени.Используя Inception-v3 в качестве примера:

import tensorflow_hub as hub

module = hub.Module("https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1")
logits = module(inp)

logits содержит все слои моделей.Вы можете просмотреть их, вызвав items():

print(logits.items())

. Выводится словарь, содержащий все слои на графике, некоторые из которых показаны ниже:

dict_items([
('InceptionV3/Mixed_6c', <tf.Tensor 'module_2_apply_image_feature_vector/InceptionV3/InceptionV3/Mixed_6c/concat:0' shape=(1, 17, 17, 768) dtype=float32>), 
('InceptionV3/Mixed_6d', <tf.Tensor 'module_2_apply_image_feature_vector/InceptionV3/InceptionV3/Mixed_6d/concat:0' shape=(1, 17, 17, 768) dtype=float32>), 
('InceptionV3/Mixed_6e', <tf.Tensor 'module_2_apply_image_feature_vector/InceptionV3/InceptionV3/Mixed_6e/concat:0' shape=(1, 17, 17, 768) dtype=float32>),
('default', <tf.Tensor 'module_2_apply_image_feature_vector/hub_output/feature_vector/SpatialSqueeze:0' shape=(1, 2048) dtype=float32>),     
('InceptionV3/MaxPool_5a_3x3', <tf.Tensor 'module_2_apply_image_feature_vector/InceptionV3/InceptionV3/MaxPool_5a_3x3/MaxPool:0' shape=(1, 35, 35, 192) dtype=float32>)])

Обычно длячтобы получить последний слой, вы должны использовать default:

sess.run(logits['default'])

Но вы можете так же легко получить другие слои, используя их имя:

sess.run(logits['InceptionV3/MaxPool_5a_3x3'])
0 голосов
/ 13 сентября 2018

https://tfhub.dev/deepmind/i3d-kinetics-400/1 (а также версия * -600) экспортируют только последний слой, поэтому не существует должным образом поддерживаемого способа получить другие слои. (Тем не менее, вы всегда можете поэкспериментировать, осмотрев график и выбрав тензоры по имени, но это может привести к тому, что вы перестанете работать с более новыми версиями модулей или библиотек.)

...