【问题标题】:How to get all layers from Keras Model with TensorFlow hub如何使用 TensorFlow hub 从 Keras 模型中获取所有层
【发布时间】:2021-10-13 16:50:13
【问题描述】:
我使用来自hub.KerasLayer 的efficientnetv2,我想在使用model.summary() 时查看所有层,但它只显示“keras_layer (KerasLayer)”
| Layer (type) |
Output Shape |
Param # |
| keras_layer (KerasLayer) |
(None, 1280) |
5919312 |
| dropout (Dropout) |
(None, 1280) |
0 |
| dense (Dense) |
(None, 2) |
2562 |
【问题讨论】:
标签:
tensorflow2.0
tensorflow-hub
【解决方案1】:
这样你就可以“跳入”模型;
import tensorflow_hub as hub
malli = hub.KerasLayer("https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet21k_b0/feature_vector/2")
print("Thickness of the model:", len(malli.weights))
for i in range(len(malli.weights)):
print("In layer ",malli.weights[i].name," the content is: ", malli.weights[i])
...当然要注意输出很长,但是根据您的需要修改输出打印。
【解决方案2】:
TensorFlow 的SavedModel 本质上是一个计算图。虽然您原则上可以检查其结构,但没有关于高级架构块的信息。
如果您想访问各个层,更好的选择可能是使用作者original implementation 中的模型。可以这样构造:
from effnetv2_model import get_model
model = get_model('efficientnetv2-s', weights='imagenet21k-ft1k', with_endpoints=True)
预训练的权重可用于与TensorFlow Hub 相同的配置。 model.summary() 显示单个 (Fused)MBConv 块。
另请注意,TensorFlow 的未来版本 will include EfficientNet v2(已在夜间构建中提供)。