Tensorflow 2 Hub: как я могу получить результат промежуточного слоя?

Я пытаюсь реализовать следующую сеть Fots для обнаружения текста с использованием нового тензорного потока 2. Авторы используют resnet в качестве основы их сети, поэтому моей первой мыслью было использовать resnet концентратора tensoflow для загрузки предварительно обученной сети. Но проблема в том, что я не могу найти способ распечатать сводку модуля, который загружается с tfhub?

Есть ли возможность посмотреть слои загруженных модулей из tf-hub? Спасибо


Обновить

К сожалению, resnet недоступен для tf2-hub, поэтому я решил использовать встроенную реализацию resent для keras, по крайней мере, до тех пор, пока не будет концентратора impl. этого.

Вот как я получаю промежуточные уровни resnet с помощью tf2.keras.applications:

import numpy as np
import tensorflow as tf
from tensorflow import keras

layers_out = ["activation_9", "activation_21", "activation_39", "activation_48"]

imgs = np.random.randn(2, 640, 640, 3).astype(np.float32)
model = keras.applications.resnet50.ResNet50(input_shape=(640, 640, 3), include_top=False)
intermid_outputs= [model.get_layer(layer_name).output for layer_name in layers_out]
shared_conds = keras.Model(inputs=model.input, outputs=intermid_outputs)
Y = conv_shared(imgs)
shapes = [y.shape for y in Y]
print(shapes)

person arash javanmard    schedule 08.08.2019    source источник


Ответы (1)


Вы можете сделать что-то вроде этого, чтобы проверить промежуточные результаты:

resnet = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3")
outputs = resnet(np.random.rand(1,224,224,3), signature="image_feature_vector", as_dict=True)
for intermediate_output in outputs.keys():
    print(intermediate_output)

Затем, если вы хотите связать промежуточный уровень модуля концентратора с остальной частью вашего графика, вы можете сделать:

resnet = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3")
features = resnet(images, signature="image_feature_vector", as_dict=True)["resnet_v2_50/block4"]
flatten = tf.reshape(features, (-1, features.shape[3]))

Предполагая, что мы хотим извлечь функции из последнего блока ResNet.

person gorjan    schedule 08.08.2019
comment
Хорошо, тогда в чем вопрос? - person gorjan; 08.08.2019
comment
Мне пришлось отключить активное выполнение в tf2, чтобы получить имена слоев, чтобы это работало. Кроме того, более новые версии не поддерживают загрузку с hub.Module. Я не нашел в документации примера того, как выбирать из промежуточных слоев после загрузки с hub.KerasLayer - person Saravanabalagi Ramachandran; 25.02.2020