任何深度学习框架,为了获得成功,必须提供一系列最先进的模型,以及在流行和广泛接受的数据集上训练的权重,即与训练模型。
TensorFlow现在已经提出了一个更好的框架,称为TensorFlow Hub,它非常易于使用且组织良好。使用TensorFlow Hub,您可以通过几行代码导入大型和流行的模型,自信地执行广泛使用的传输学习活动。TensorFlow Hub非常灵活,可以
值得注意的是,TensorFlow Hub Module仅为我们提供了包含模型体系结构的图形以及在某些数据集上训练的权重。大多数模块允许访问模型的内部层,可以根据不同的用例使用。但是,有些模块不能精细调整。在开始开发之前,建议在TensorFlow Hub网站中查看有关该模块的说明。
前置知识
接下来,让我们看一些可用于了解TensorFlow Hub模块更多细节的重要方面和功能。
1)模块实例化:由TensorFlow Hub网站托管用于不同目的(图像分类,文本嵌入等)的不同模型(Inception,ResNet,ElMo等)组成的各种模块。用户必须浏览模块目录,然后在完成其目的和模型后,需要复制托管模型的URL。然后,用户可以像这样实例化他的模块:
importtensorflow_hub as hub
module= hub.Module(<>, trainable=True)
除了URL参数,另一个最值得注意的参数是'trainable'。如果用户希望微调/修改模型的权重,则必须将此参数设置为True 。
2)签名:模块的签名指定了每个模块的作用。如果未明确提及签名,则所有模块都带有“默认”签名并使用它。对于大多数模块,当使用“默认”签名时,模型的内部层将从用户中抽象出来。用于列出模块的所有签名名称的函数是get_signature_names()。
importtensorflow_hub as hub
module= hub.Module('https://tfhub.dev/google/imagenet/inception_v3/classification/1')print(module.get_signature_names())#['default', 'image_classification', 'image_feature_vector']
3)预期输入:每个模块都有一组预期输入,具体取决于所使用模块的签名。虽然大多数模块都记录了TensorFlow Hub网站中的预期输入集(特别是“默认”签名),但有些模块没有。在这种情况下,使用get_input_info_dict()更容易获得预期输入及其大小和数据类型。
importtensorflow_hub as hub
module= hub.Module('https://tfhub.dev/google/imagenet/inception_v3/classification/1')print(module.get_input_info_dict()) #When no signature is given, considers it as 'default'#{'images': }
print(module.get_input_info_dict(signature='image_feature_vector'))#{'images': }
4)预期输出:为了在构建TensorFlow Hub模型之后构建图的剩余部分,有必要知道预期的输出类型。get_output_info_dict()函数用于此目的。请注意,对于“默认”签名,通常只有一个输出,但是当您使用非默认签名时,图表的多个图层将向您公开。
importtensorflow_hub as hub
module= hub.Module('https://tfhub.dev/google/imagenet/inception_v3/classification/1')print(module.get_output_info_dict()) #When no signature is