【TensorFlow Hub】:有 100 个预训练模型等你用

要访问TensorFlow Hub,请单击此处 — https://www.tensorflow.org/hub

一、说明

        TensorFlow Hub是一个库,用于在TensorFlow中发布,发现和使用可重用模型。它提供了一种使用预训练模型执行各种任务(如图像分类、文本分析等)的简单方法。

        TensorFlow Hub提供了广泛的预训练模型,由TensorFlow和更广泛的机器学习社区的研究人员和工程师开发。

        以下是TensorFlow Hub中可用的模型类型的一些示例:

  1. 图像分类模型:这些模型在标记图像的大型数据集上进行训练,可以将图像分类为各种类别。TensorFlow Hub中一些流行的图像分类模型包括Inception,MobileNet,ResNet和VGG。
  2. 对象检测模型:这些模型可以检测和定位图像中的对象。TensorFlow Hub中一些流行的对象检测模型包括Faster R-CNN和YOLO。
  3. 自然语言处理 (NLP) 模型:这些模型可以分析文本并执行情绪分析、文本分类和语言翻译等任务。TensorFlow Hub中一些流行的NLP模型包括BERT和ALBERT。
  4. 语音识别模型:这些模型可以将语音转录为文本。TensorFlow Hub 中一些流行的语音识别模型包括 wav2vec2、spice 和 yamnet。
  5. 生成模型:这些模型可以根据输入数据生成新内容,例如图像或文本。TensorFlow Hub中一些流行的生成模型包括Progressive GAN和BigGAN。
  6. 迁移学习模型:这些模型在大型数据集上预先训练,可以使用较小的数据集针对特定任务进行微调。TensorFlow Hub 中的迁移学习模型可用于各种任务,例如图像分类、对象检测、分割和文本分析。

        TensorFlow Hub提供了一种方便的方式来访问这些预先训练的模型,并将其用于各种机器学习任务。这些模型有多种格式,例如 TensorFlow SavedModel、Keras 模型和 TensorFlow.js 模型,可以轻松将它们集成到您的机器学习管道中。

二、安装和使用

2.1 安装 TensorFlow 和 TensorFlow Hub:

        在使用 TensorFlow Hub 之前,您需要同时安装 TensorFlow 和 TensorFlow Hub。您可以在命令提示符或终端中使用 pip 安装它们:

pip install tensorflow
pip install tensorflow-hub 

        这将安装最新版本的TensorFlow和TensorFlow Hub。

三、从 TensorFlow Hub 加载预训练模型:

        您可以在TensorFlow Hub网站(https://tfhub.dev/)上浏览可用的模型。

        要加载预先训练的模型,您首先需要从TensorFlow Hub网站获取其URL。例如,如果要使用在 ImageNet 2K 数据集上预先训练的EfficientNet_v1_s模型进行图像分类,则可以使用以下 URL:

module_url = "https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_s/classification/2"

        接下来,您可以使用类和 URL 创建 Keras 层:hub.KerasLayer

import tensorflow as tf
import tensorflow_hub as hubfeature_extractor = hub.KerasLayer(module_url, input_shape=(384,384,3))

        在此示例中,我们将创建一个 Keras 层,用于从图像中提取特征。 input_shape 参数指定输入图像的形状,在本例中为 384x384 像素,具有 3 个颜色通道 (RGB)。

3.1 使用预先训练的模型执行任务 

        加载预训练模型后,可以使用它来执行特定任务。例如,如果您随机拍摄老虎的图像,则可以执行以下操作:

import numpy as np
import PIL.Image as Image
import matplotlib.pyplot as pltimage = Image.open("image.jpg").resize((384,384))
plt.imshow(image)
plt.show()
image_array = np.array(image) / 255.0
image_batch = np.expand_dims(image_array, axis=0)features = feature_extractor(image_batch)

输出:

        在此示例中,我们从文件加载图像,将其大小调整为 384x384 像素,显示图像,将其转换为 NumPy 数组,并将其规范化为 0 到 1 之间的值。然后,我们向数组添加一个额外的维度来创建一批图像(因为预训练的模型需要一批图像作为输入)。最后,我们使用预先训练的EfficientNet_v2_s模型对图像进行分类。

labels_file = "https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt"#download labels and creates a maps
downloaded_file = tf.keras.utils.get_file("labels.txt", origin=labels_file)classes = []with open(downloaded_file) as f:labels = f.readlines()classes = [l.strip() for l in labels]

        此代码段使用 TensorFlow 库从 Google Cloud Storage 存储桶下载包含 ImageNet 数据集标签的文本文件。文本文件的 URL 存储在 labels_file 变量中。tf.keras.utils.get_file() 然后使用该函数从 URL 指定的 labels_file 下载文件,并将其以名称“labels.txt”保存在本地。 get_file() 函数在本地缓存文件,因此如果再次请求相同的 URL,将使用本地缓存的文件,而不是再次下载文件。

        下载文件后,代码将使用 open() 函数打开它并读取其内容。 readlines() 函数返回一个字符串列表,每个字符串代表文件中的一行。然后,代码使用 strip() 函数删除每行中的所有前导或尾随空格,并将清理后的标签存储在名为“classes”的列表中。

        生成的类列表包含 ImageNet 数据集的 1001 个类(1000 个主类 + 1 个“背景”类)的标签。该列表可用于将神经网络的输出映射到相应的标签以进行显示或进一步分析。    

top_5 = tf.argsort(features, axis=-1, direction="DESCENDING")[0][:5].numpy()features_array = np.array(features)
features_flatten = features_array.flatten()for i, item in enumerate(top_5):class_index = item +1line = classes[class_index].upper()prob = round(features_flatten[item]*10,2)print(f'Predicted class : {line} : with probability : {prob}%')

输出:

Predicted class : TIGER : with probability : 90.79%
Predicted class : TIGER CAT : with probability : 77.36%
Predicted class : JAGUAR : with probability : 37.36%
Predicted class : LYNX : with probability : 29.64%
Predicted class : LEOPARD : with probability : 25.47%

        此代码片段使用 TensorFlow 库来预测输入图像的前 5 个最有可能的 ImageNet 类。

        变量特征包含输入图像的神经网络模型的输出。 tf.argsort() 函数用于按降序对输出值进行排序并返回排序值的索引。通过使用 [0][:5] 对结果张量进行切片来选择前 5 个索引,然后使用 .numpy() 方法将其转换为 NumPy 数组。

      

        features_array 变量是通过将特征张量转换为 NumPy 数组来创建的。 features_flatten 变量是通过将 features_array 展平为一维数组而创建的。

        然后使用 for 循环迭代前 5 个索引。对于每个索引,通过向索引添加 1(因为索引是从 0 开始的,但类标签是从 1 开始的)并将标签转换为大写,从类列表中检索相应的 ImageNet 类标签。

        最后,使用 print() 函数将预测的类标签及其相应的概率打印到控制台。输出将显示前 5 个最有可能的 ImageNet 类别中每个类别的预测类别及其对应的概率。

   

3.2 微调预训练模型(可选):

        如果预训练的模型不能完全满足您的要求,您可以通过添加新层或在新数据集上重新训练它来对其进行微调。下面是如何微调新分类任务的EfficientNet_v2_s模型的示例:

import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.keras import layersmodel_url = "https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_s/feature_vector/2"
model = hub.KerasLayer(model_url, trainable=True)num_classes = 10 #just an examplefine_tuning_model = tf.keras.Sequential([model,layers.Dense(num_classes, activation='softmax')
])fine_tuning_model.compile(optimizer=tf.keras.optimizers.Adam(),loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),metrics=[tf.keras.metrics.CategoricalAccuracy()]
)epochs = 10
batch_size = 32fine_tuning_model.fit(train_data,epochs=epochs,batch_size=batch_size,validation_data=val_data
)test_loss, test_acc = fine_tuning_model.evaluate(test_data)
print('Test accuracy:', test_acc)

        在此示例中,我们通过添加新的密集层进行分类来创建新模型。然后,我们使用优化器、损失函数和指标编译模型。最后,我们在指定数量的 epoch 的新数据集上训练模型。

四、结论

        这些是安装和使用 TensorFlow Hub 的基本步骤。TensorFlow Hub 提供了更多功能,例如缓存、版本控制等,因此请务必查看文档以获取更多信息。

资料引用:

A.瓦斯瓦尼,N.沙泽尔,N.帕尔马,J.乌什科雷特,L.琼斯,A.戈麦斯,{.凯撒  阿琼·萨卡尔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业毕业设计项目推荐11-博客项目(Go+Vue+Mysql)

博客项目(GoVueMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&am…

[黑马程序员TypeScript笔记]------一篇就够了

目录: TypeScript 介绍 TypeScript 是什么?TypeScript 为什么要为 JS 添加类型支持?TypeScript 相比 JS 的优势TypeScript 初体验 安装编译 TS 的工具包 编译并运行 TS 代码 简化运行 TS 的步骤 TypeScript 常用类型 概述类型注解常用基础…

基于微信小程序的付费自习室

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 需求分析3.1用户需求分析3.1.1 学生用户3.1.3 管理员用户 4 数据库设计4.4.1 E…

Linux友人帐之账号用户管理

一、账号管理 1.1简介 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#…

lv7 嵌入式开发-网络编程开发 12 IP协议与ethernet协议

目录 1 IP协议作用和意义 2 IP数据报首部格式 3 IP数据报分片 4 以太网协议作用和意义(链路层) 5 练习 1 IP协议作用和意义 IP网的意义 当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异…

mysql面试题10:MySQL中有哪几种锁?表级锁、行级锁、页面锁区别和联系?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Mysql中有哪几种锁? 在MySQL中,主要有以下几种类型的锁: 共享锁(Shared Lock):也称为读锁。多个事务可以同时持有共享锁,可以读取但不能修…

浏览器渲染原理

1 浏览器是如何渲染页面的? 浏览器的渲染 render 将 html 字符串 --> 像素信息 function render(html) {// ...return pixels; }网络:拿 HTML(JS和CSS也在HTML中); 渲染:渲染; 当浏览器的 …

c语言系统编程之多进程

程序与进程的区别? 程序是静态的未运行的二进制文件,存储在磁盘中 进程是已经运行的二进制文件,存储在内存中 进程的内存划分图有哪几部分? 堆(存储malloc和calloc出来的空间)、栈(局部变量…

Windows10实用的12个快捷组合键

Windows10实用的12个快捷组合键 1、网页多标签切换 CTRL TAB 2、恢复不小心关闭的标签页 CTRLSHIFT T 3、新建标签页 CTRL T 4、高亮选择地址栏 ALT D 5、打开设置 WIN I 6、打开任务管理器 CTRLSHIFT ESC 7、打开文件资源管理器 WIN E 8、黑屏或屏幕卡顿无响应&#x…

面试题: Spring AOP是如何实现的? 它和AspectJ有什么区别?

Spring AOP是如何实现的? 它和AspectJ有什么区别? 背景答案SpringAOP实现与AspectJ区别AOP 的几种实现方案 个人评价 背景 想换工作, 学习一下面试题, 算是学习记录的输出. 答案 SpringAOP实现 Spring AOP 是利用的动态代理的机制, 如果一个Bean 实现了接口, 那么就会采用…

国庆中秋宅家自省: Python在Excel中绘图尝鲜

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 【一】国庆中秋: 悟 【国…

完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验

在我们日常生活中,我们经常会拍摄和观看各种视频内容,无论是旅行记录、家庭聚会还是商务演示,我们都希望能够呈现出最清晰、最精彩的画面效果。而现在,有一个强大的工具可以帮助我们实现这一目标,那就是Perfectly Clea…

出去重复的列值(关键词:distinct)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select distinct 列名 from 表名; 案例:查询emp表中,员工的职位(job),并去重…

网络层·IP协议

承接前文TCP协议-CSDN博客 简介 协议头格式 网段划分(重要) 划分方法 IP地址的数量限制(背景介绍) 私有IP地址和公网IP地址(提出解决思路) NAT技术(解决方法) 路由 网络层 在复杂的网络环境中确定一个合适的路径 IP协议 主机: 配有IP地址, 可以认为就是你的电脑; 路由器:…

计算机网络基础(一):网络系统概述、OSI七层模型、TCP/IP协议及数据传输

通信,在古代是通过书信与他人互通信息的意思。 今天,“通信”这个词的外沿已经得到了极大扩展,它目前的大意是指双方或多方借助某种媒介实现信息互通的行为。 如果按照当代汉语的方式理解“通信”,那么古代的互遣使节、飞鸽传书…

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码 文章目录 基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.帝国主义竞争优化BP神经网络3.1 BP神经网络参数设置3.2 帝国主义竞争算…

Golang interface 接口的应用场景 使用细节

应用场景介绍 对初学者讲,理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景: 1.说现在美国要制造轰炸机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然…

闲聊四种旅游方式

十一长假,先不写那些需要深度思考的话题,先写点轻松的。 关于旅游方式,其实也是受梁斌博士一条微博的一些触动,他说他认识个朋友,自由职业,到处旅游,却从不旺季出行,非常省钱&#x…

1700*C. Number of Ways(贪心前缀和)

Problem - 466C - Codeforces Number of Ways - 洛谷 解析: 首先判断所有数总和是否能被三整除。 之后遍历前缀和数组,如果某个位置的前缀和等于sum/3,则记录。 某个位置前缀和等于sum/3*2则记录答案。 注意由于分成三份,所以同…

微信开放平台第三方开发,实现代小程序备案申请

大家好,我是小悟 微信小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个…