【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.xdnf.cn/news/149860.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 配置基础优化

Author:rab 为什么要优化? 你有没有发现,Docker 作为线上环境使用时,Docker 日志驱动程序的日志、存储驱动数据都比较大(尤其是在你容器需要增删比较频繁的时候),动不动就好几百 G 的大小&…

节日灯饰灯串灯出口欧洲CE认证办理

灯串(灯带),这个产品的形状就象一根带子一样,再加上产品的主要原件就是LED,因此叫做灯串或者灯带。2022年,我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

【STM32 LVGL基础教程】初识LVGL

文章目录 前言一、什么是LVGL?二、LVGL的诞生历程三、LVGL的用途四、模拟器使用LVGL4.1 下载codeblocks并运行模拟器lvgl4.2 更改lvgl设置更改帧数更改颜色深度 五、STM32使用LVGL总结 前言 嵌入式系统中的图形用户界面(GUI)已经成为现代设备…

基于goravel的CMS,企业官网通用golang后台管理系统

2023年9月11日10:47:00 仓库地址: https://gitee.com/open-php/zx-goravel-website 框架介绍 Goravel SCUI 后端开发组件 go 1.20 Goravel 1.13 数据库 sql(使用最新日期文件) goravel\doc\sql_bak mysql 8.0 前端开发组件 scui 1.6.9 node v14.21.3 效果图…

基于自私羊群优化的BP神经网络(分类应用) - 附代码

基于自私羊群优化的BP神经网络(分类应用) - 附代码 文章目录 基于自私羊群优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.自私羊群优化BP神经网络3.1 BP神经网络参数设置3.2 自私羊群算法应用 4.测试结果…

uni-app实现图片预览

uni.previewImage预览图片 使用方法&#xff1a; <image class"poster" :src"imageUrl" mode"" click"previewImg(imageUrl)"></image>const previewImg (e) > {uni.previewImage({current: e,urls: image}); } 官…

vulnhub靶机doubletrouble

下载地址&#xff1a;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 …

提升您的 Go 应用性能的 6 种方法

优化您的 Go 应用程序 1. 如果您的应用程序在 Kubernetes 中运行&#xff0c;请自动设置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配额 Go 调度器 可以具有与运行设备的核心数量一样多的线程。由于我们的应用程序在 Kubernetes 环境中的节点上运行&#xff0c;当我们的 Go 应用程…

探秘布隆过滤器:高效数据查找与去重利器

探秘布隆过滤器&#xff1a;高效数据查找与去重利器 引言 在现代计算机科学中&#xff0c;数据的查找与去重是一个至关重要的问题。本文将介绍一种高效的数据结构——布隆过滤器&#xff0c;它能够在海量数据中快速判断某个元素是否存在&#xff0c;同时具有出色的空间效率。…

【数据恢复篇】浅谈FTK Imager数据恢复功能

【数据恢复篇】浅谈FTK Imager数据恢复功能 日常取证工作中&#xff0c;常用FTK Imager制作磁盘镜像、挂载镜像等&#xff0c;但FTK Imager的数据恢复功能也是非常强大的&#xff0c;某些数据的恢复效果不输专业的数据恢复软件&#xff0c;甚至略胜一筹—【蘇小沐】 文章目录 …

突破封锁|华为芯片10年进化史:从K3V1到麒麟9000S

华为海思麒麟芯片过去10年研发历程回顾如下&#xff1a; 2009年&#xff1a;华为推出第一款手机芯片K3V1&#xff0c;采用65nm工艺制程&#xff0c;基于ARM11架构&#xff0c;主频600MHz&#xff0c;支持WCDMA/GSM双模网络。这款芯片搭载在华为U8800手机上&#xff0c;标志着华…

【BBC新闻文章分类】使用 TF 2.0和 LSTM 的文本分类

一、说明 NLP上的许多创新是如何将上下文添加到词向量中。常见的方法之一是使用递归神经网络

[C国演义] 第十三章

第十三章 三数之和四数之和 三数之和 力扣链接 根据题目要求: 返回的数对应的下标各不相同三个数之和等于0不可包含重复的三元组 – – 即顺序是不做要求的 如: [-1 0 1] 和 [0, 1, -1] 是同一个三元组输出答案顺序不做要求 暴力解法: 排序 3个for循环 去重 — — N^3, …

C语言-字符串与输入输出

一、字符串 1、字符串简介 在 C 语言中&#xff0c;字符串实际上是使用空字符 \0 结尾的一维字符数组。因此&#xff0c;\0 是用于标记字符串的结束。 空字符&#xff08;Null character&#xff09;又称结束符&#xff0c;缩写 NUL&#xff0c;是一个数值为 0 的控制字符&…

第一课数组、链表、栈、队列

第一课数组、链表、栈、队列 acwing136 邻值查找---中等题目描述代码展示 lc20.有效的括号--简单题目描述代码展示 lc25.K 个一组翻转链表--困难题目描述代码展示 lc26.删除有序数组中的重复项--简单题目描述代码展示 lc88.合并两个有序数组--简单题目描述代码展示 lc141.环形链…

Java常见API---split()

package daysreplace;public class SplitTest {public static void main(String[] args) {String str"武汉市|孝感市|长沙市|北京市|上海市";String[] array str.split("\\|");System.out.println(array[0]);System.out.println(array[1]);System.out.pri…

Python数据容器——集合的相关操作

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、理解集合 1. 集合是什么&#xff1f; 2. 为什么…

好奇喵 | Tor浏览器——访问.onion网址,揭开Dark Web的神秘面纱

前言 在之前的博客中&#xff1a; 1.Surface Web —&#xff1e; Deep Web —&#xff1e; Dark Web&#xff0c;我们解释了表层网络、深层网络等的相关概念&#xff1b; 2.Tor浏览器——层层剥开洋葱&#xff0c;我们阐述了Tor的历史和基本工作原理&#xff1b; 3.Tor浏览器…

【亲测有效】C盘容量满了,给C盘扩容!!!

前言 相信有很多小伙伴用自己电脑的时候明明不往C盘装东西&#xff0c;但是C盘还是慢慢的变红了&#xff0c;我也是因为C盘满了而备受困扰。又不知道如何解决或者怕自己鼓捣着磁盘数据没了。闲来无事&#xff0c;我查了一些资料&#xff0c;终于将我的C盘容量扩充了且数据保存…

基于Java的在线教育平台设计与实现(源码+lw+ppt+部署文档+视频讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…