model = tfhub.KerasLayer('https://tfhub.dev/google/imagenet/inception_v1/feature_vector/4', trainable=False, arguments=dict(return_endpoints=True))
input = tf.keras.layers.Input((224, 224, 3))
outputs = model(input)
for k, v in sorted(outputs.items()):
print(k, v.shape)
import tensorflow as tf
import tensorflow_hub as hub
resnet_v2 = hub.load(os.path.join(tfhub_dir, 'imagenet_resnet_v2_50_classification_5'))
print(tf.__version__)
resnet_v2.summary()
single_keras_layer = resnet_v2.layers[0]
variables = single_keras_layer.variables
for i, v in enumerate(variables):
print('[{:03d}] {} [{}]'.format(i, v.name, v.shape))
4条答案
按热度按时间dgsult0t1#
有一种未记录的方法可以从TF-Slim导出的某些TF 2 SavedModels中获取中间层,例如https://tfhub.dev/google/imagenet/inception_v1/feature_vector/4:将
return_endpoints=True
传递给SavedModel的__call__
函数会将输出更改为dict
。注:此接口可能会更改或删除,并且存在已知问题。
此示例的输出:
需要注意的问题:
__call__
计算所有输出(并在训练期间应用所有更新操作),而不管稍后使用的输出。来源:https://github.com/tensorflow/hub/issues/453
kuuvgm7e2#
因为
return_endpoints=True
似乎不再工作了。你可以这样做:
wnvonmuf3#
为了能够轻松地做到这一点,预训练模型的创建者需要使输出准备好被访问。例如,通过使用额外的函数或额外的签名来输出您想要使用的激活。
7ajki6be4#
这并不能给予您以编程方式访问这些层,但它确实允许您检查它们。
输出量