当前位置: 首页 > news >正文

【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.戈麦斯,{.凯撒  阿琼·萨卡尔

相关文章:

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

要访问TensorFlow Hub,请单击此处 — https://www.tensorflow.org/hub 一、说明 TensorFlow Hub是一个库,用于在TensorFlow中发布,发现和使用可重用模型。它提供了一种使用预训练模型执行各种任务(如图像分类、文本分析等&#xf…...

vulnhub靶机doubletrouble

下载地址:doubletrouble: 1 ~ VulnHub 主机发现 arp-scan -l 端口扫描 nmap --min-rate 1000 -p- 192.168.21.151 端口服务扫描 nmap -sV -sT -O -p22,80 192.168.21.151 漏洞扫描 nmap --scriptvuln -p22,80 192.168.21.151 先去看看web页面 这里使用的是qdpm …...

【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占…...

SpringCloud-消息组件

1 简介 了解过RabbitMQ后,可能我们会遇到不同的系统在用不同的队列。比如系统A用的Kafka,系统B用的RabbitMQ,但是没了解过Kafka,因此可以使用Spring Stream,它能够屏蔽地产,像JDBC一样,只关心SQ…...

oringin的x轴(按x轴规定值)绘制不规律的横坐标

1.双击x轴 2.选择刻度线标签 3.选择刻度...

ubuntu安装MySQL

一行指令即可! sudo apt install mysql-server常用MySQL服务指令 sudo service mysql status # 查看服务状态 sudo service mysql start # 启动服务 sudo service mysql stop # 停止服务 sudo service mysql restart # 重启服务终端里面进入Mysql 其中-u后面root是我的用户名…...

背包问题学习笔记-多重背包问题

题意描述: 有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。输入格式 第一行两个整数…...

Net相关的各类开源项目

Net相关的各类开源项目 WPFHandyControlLive-ChartsWPFDeveloperswpf-uidesignStylet WebScheduleMasterYiShaAdminBlog.CoreNebula.AdminNewLife.CubeOpenAuth UnityuGUIUnityCsReferenceEpitomeMyUnityFrameWorkKSFrameworkTowerDefense-GameFramework-Demo 通用ClientServer…...

阿里云服务器修改IP地址的两种方法

阿里云服务器可以更换IP地址吗?可以的,创建6小时以内的云服务器ECS可以免费更换三次公网IP地址,超过6小时的云服务器,可以将公网固定IP地址转成弹性EIP,然后通过换绑EIP的方式来更换IP地址。阿里云服务器网分享阿里云服…...

SpringMVC的数据绑定

一、前言 SpringMVC的数据绑定是指将HTTP请求参数绑定到Java对象上。这样可以方便地从请求中获取数据并将其传递给业务逻辑。在SpringMVC中,可以使用RequestParam和ModelAttribute等注解来实现数据绑定。 二、使用RequestParam注解 RequestParam注解用于将请求参…...

1.1.OpenCV技能树--第一单元--OpenCV简介

目录 1.文章内容来源 2.OpenCV简介 3.课后习题代码复现 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.csdn.net/skill/practice/opencv-77f629e4593845b0bf97e74ca8ec95ae/8292?languageopencv&materialId20807 2.资料来源:https://edu.csdn.net/skill…...

transformer不同的包加载模型的结构不一样

AutoModel AutoModelForTokenClassification 结论: AutoModel加载的模型与AutoModelForTokenClassification最后一层是不一样的,从这个模型来看,AutoModelForTokenClassification加载的结果是对的 问题: 为什么AutoModel和Aut…...

【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能

刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外,还支持…...

C语言:选择+编程(每日一练Day9)

目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:自除数 思路一: 题二:除自身以外数组的乘积 思路二: 本人实力有限可能对…...

蓝桥等考Python组别十三级003

第一部分:选择题 1、Python L13 (15分) 运行下面程序,输出的结果是( )。 t = (1, 2, 2, 1, 4, 3, 2) print(t.count(2)) 1234正确答案:C 2、Python L13 (...

2023年CSP-J真题详解+分析数据(选择题篇)

目录 前言 2023CSP-J江苏卷详解 小结 前言 下面由我来给大家讲解一下CSP-J的选择题部分。 2023CSP-J江苏卷详解 1.答案 A 解析:const在C中是常量的意思,其作用是声明一个变量,值从头至尾不能被修改 2.答案 D 解析:八进制…...

基于三平面映射的地形纹理化【Triplanar Mapping】

你可能遇到过这样的地形:悬崖陡峭的一侧的纹理拉伸得如此之大,以至于看起来不切实际。 也许你有一个程序化生成的世界,你无法对其进行 UV 展开和纹理处理。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 三平面映射(Trip…...

初步了解nodejs语法和web模块

在此, 第一个Node.js实例_js firstnode-CSDN博客 通过node运行一个简单的server.js,实现了一个http服务器; 但是还没有解析server.js的代码,下面看一下; require 指令 在 Node.js 中,使用 require 指令来…...

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示 📍相关篇《stc单片机使用外部中断+EC11编码器实现计数功能》 🎈《STC单片机+EC11编码器实现调节PWM输出占空比》 🌼实际操作效果 🍁整个项目实现框架: 📓EC11接线原理图: 📓项目工程简介 📝仅凭借一个EC11编…...

数据结构刷题训练——二叉树篇(一)

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...