python - tensorflow.load 与下载 URL
问题描述
我是 TensorFlow 2 的初学者,我使用的是 TensorFlow 2.3.1 版本。
我想构建一个基于 Inception v3 的图像分类器。在我可以使用 Inception 网络中的数据之前,我必须首先准备好数据。对于这个任务,我将使用“oxford_flower102”数据集。我找到了两种获取数据集的方法,但我不知道在哪种情况下应该使用哪种方法。
- 通过使用 tfds.load
import tensorflow as tf
dataset, dataset_info = tfds.load('oxford_flowers102, with_info=True, as_supervised=True)
- 通过下载带有 URL 的数据集
from six.moves import urllib
import os
import tarfile
FILE_NAME='102flowers.tgz'
FLOWERS_DIR = os.getcwd() + '/jpg'
def download_images():
downloadedPath = os.getcwd()+ '/'+FILE_NAME
if not os.path.exists(downloadedPath):
download_ulr='http://www.robots.ox.ac.uk/~vgg/data/flowers/102/102flowers.tgz'
urllib.request.urlretrieve(download_ulr,FILE_NAME)
else:
print('dataset already downloaded in : ', downloadedPath)
def extract_tgz_file():
if not os.path.exists(FLOWERS_DIR):
print('extracting files ...')
tar=tarfile.open(FILE_NAME, "r:gz")
tar.extractall()
tar.close()
print('files now extracted in : ', FLOWERS_DIR)
else:
print('extraced file already exists in : ', FLOWERS_DIR)
def make_dataset_ready():
download_images()
extract_tgz_file()
第一种方法要短得多,而且很容易拆分成训练和测试数据集。第二种方法要长得多,必须手动完成训练和测试数据集的拆分。现在让我来回答我的问题:
- 第二种方式有什么好处,通过 URL 下载它,然后手动将数据集拆分为训练和测试数据集?
tfds.load()
我的目标是稍后将数据集输入 inception v3,使用function对这项任务有什么缺点吗?
谢谢你的支持!
解决方案
tfds.load
是一种 tensorflow 的实用方法,您可以使用它下载一组预定义的数据集。使用这种方法的好处是它返回的数据tf.data.Dataset
可以直接用于训练模型。它还返回类型的第二个值,tfds.core.DatasetInfo
其中包含有关数据集的信息。urllib.request.urlretrieve
是从 url 下载数据的 python 模块。因此,您必须下载托管在 url 上的数据集,了解其格式并将其转换为可用于训练模型或进行推理的格式。- 如果您的意图是在 tensorflow 中训练一个初始模型,那么它的意义就是充分利用
tfds.load
下载数据并使用 tensorflow 数据集来训练它。 - 但是,如果您的数据集不能作为
tfds.load
命名数据集的一部分使用,那么您将必须下载数据并将其转换为所需的格式,其中一种方法是使用urllib
推荐阅读
- c# - Azure 函数读取 SQLite 数据库
- c - 为什么 rand() 在 Linux 上重复数字的频率远高于 Mac?
- java - MSGraph API unarchive Team 和 restore Group 不起作用
- string - 有没有办法做 Sprintf 结果的倒数
- python - Numpy 在不应该返回错误的地方返回错误
- javascript - Safari http 请求标头未反映 axios 拦截器的更改
- html - 未正确对齐 CSS 网格
- powershell - Powershell 中的 Get-PowerBIWorkspace 返回空白元素
- android - 坚持了过去3天。有什么解决方案?
- r - 从 R 循环内的列表中的 S4 对象访问槽