TF2.0 - Data Pipelines

本文介绍了TensorFlow 2.0中数据加载的方法,包括使用tf.data.Dataset从各种来源加载数据,如张量切片、生成器、图像、CSV文件等,并详细讲解了Dataset对象的属性和操作,如map、filter、batch等。
部署运行你感兴趣的模型镜像

学习TF2.0时的一些总结,参考资官方文档https://www.tensorflow.org/guide/data#top_of_page

首先加载相关库

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

tf.data.Dataset

tf.data中提供了一个tf.data.Dataset()抽象,它可以表示一系列元素(图像和对应的标签)。Dataset的创建必须从数据开始.

dataset = tf.data.Dataset.from_tensor_slices([9, 3, 1, 5, 3, 7, 5, 0])
for elem in dataset:   # 使用for循环
    print(elem.numpy())
it = iter(dataset)   # 使用iterator对象
print(next(it).numpy())

Dataset对象的element_spec属性可以查看每个元素的类型,返回一个tf.TypeSpec对象

dataset1 = tf.data.Dataset.from_tensor_slices(tf.random.uniform([4, 10]))
print(dataset1.element_spec)

Dataset对象支持任何结构,可以使用Dataset.map()Dataset.filter()对每个元素进行操作

for z in dataset1:
    print(z.numpy())

数据生成器

使用python的生成器作为数据源,Dataset.from_generator()将python生成器转化为tf.data.Dataset对象

def count(stop):
    i = 0
    while i < stop:
        yield i
        i += 1

for n in count(5):
    print(n)

from_generator()有三个参数需要注意:args是需要传给函数的参数,output_types是创建tf.Graph时需要的参数,output_shapes是返回的数据大小

ds_counter = tf.data.Dataset.from_generator(
    count, args=[25], output_types=tf.int32)
for count_batch in ds_counter.repeat().batch(7).take(5):   # 每个batch取7个,总共取5个batch
    print(count_batch.numpy())

一般情况下,最好将output_typesoutput_shape明确指定

def gen_series():
    i = 0
    while True:
        size = np.random.randint(0, 10)
        yield i, np.random.normal(size=(size,))
        i += 1

for i, series in gen_series():
    print(i, ":", series)
    if i > 5:
        break

ds_series = tf.data.Dataset.from_generator(
    gen_series,
    output_types=(tf.int32, tf.float32),
    output_shapes=((), (None,)))    # 明确指定outpu_types和output_shapes
print(ds_series)

当对一个变长的数据进行batch时,可以使用Dataset.padded_batch

ds_series_batch = ds_series.shuffle(
    20).padded_batch(10, padded_shapes=([], [None]))
ids, sequence_batch = next(iter(ds_series_batch))
print(ids.numpy())
print()
print(sequence_batch.numpy())

加载图像数据

在处理图像数据时,将preprocessing.image.ImageDataGenerator封装为一个tf.data.Dataset

flowers = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True
)
img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=20)
images, labels = next(img_gen.flow_from_directory(flowers))   # 使用iteration方式遍历
ds = tf.data.Dataset.from_generator(
    img_gen.flow_from_directory,
    args=[flowers],
    output_types=(tf.float32, tf.float32)
    output_shapes=([32, 256, 256, 3], [32, 5])
)

加载CSV数据

也可以将CSV类型的数据直接通过from_tensor_slices()生成tf.data.Dataset

titanic_file = tf.keras.utils.get_file(
    "train.csv",
    "https://storage.googleapis.com/tf-datasets/titanic/train.csv")
df = pd.read_csv(titanic_file, index_col=None)
titanic_slices = tf.data.Dataset.from_tensor_slices(dict(df))   # 通过字典的形式加载数据
for feature_batch in titanic_slices.take(1):
    for key, value in feature_batch.items():
        print("  {!r:20s}: {}".format(key, value))

tf.data有一种更灵活的数据加载方式,experimental.make_csv_dataset()支持列级别的查询,batching和shuffling。

titanic_batchs = tf.data.experimental.make_csv_dataset(
    titanic_file,
    batch_size=4,
    label_name='survived'
)

for feature_batch, label_batch in titanic_batchs.take(1):
    print("'survived' : {}".format(label_batch))
    print("features:")
    for key, value in feature_batch.items():
        print("  {!r:20s}: {}".format(key, value))

同时可以使用select_columns参数选择特征的子集

titanic_batchs = tf.data.experimental.make_csv_dataset(
    titanic_file,
    batch_size=4,
    label_name='survived',
    # select_columns里一定要包含label_name
    select_columns=['class', 'fare', 'survived']
)

for feature_batch, label_batch in titanic_batchs.take(1):
    print("'survived: {}".format(label_batch))
    for key, value in feature_batch.items():
        print("  {!r:20s}: {}".format(key, value))

还有一个底层的类experimental.CsvDataset提供更精细的控制,这种方法不支持列的查询,同时必须指定每一列的数据类型

titanic_types = [tf.int32, tf.string, tf.float32, tf.int32,
                 tf.int32, tf.float32, tf.string, tf.string, tf.string, tf.string]
dataset = tf.data.experimental.CsvDataset(
    titanic_file, titanic_types, header=True)
for line in dataset.take(10):
  print([item.numpy() for item in line])

Batching

Dataset.batch()可以将n个连续的元素堆叠到一个元素中,tf.stack()的功能与该函数相同

inc_dataset = tf.data.Dataset.range(100)
dec_dataset = tf.data.Dataset.range(0, -100, -1)
dataset = tf.data.Dataset.zip((inc_dataset, dec_dataset))
batched_dataset = dataset.batch(4)   # 每个batch取4个case
for batch in batched_dataset.take(5):   # 取5个batch
    print([arr.numpy() for arr in batch])

Dataset.batch()可能会造成不明确的batch大小,因为最后一个batch可能不足,drop_remainder可以忽略掉最后一个batch

batched_dataset = dataset.batch(7, drop_remainder=True)
print(batched_dataset)

针对大多数输入大小可变的模型,Dataset.padded_batch()可以对不同维度的大小进行改变

dataset = tf.data.Dataset.range(10)
dataset = dataset.map(lambda x: tf.fill([tf.cast(x, tf.int32)], x))   # tf.fill()将x扩展到第一个参数的维度,x必须是标量
dataset = dataset.padded_batch(4, padded_shapes=(None,), drop_remainder=True)
for batch in dataset.repeat().take(5):
    print(batch.numpy())
    print()

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

TypeError Traceback (most recent call last) Cell In[6], line 3 1 import numpy as np 2 import pandas as pd ----> 3 import tensorflow as tf 4 import matplotlib.pyplot as plt 5 from sklearn.preprocessing import StandardScaler File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\__init__.py:37 34 import sys as _sys 35 import typing as _typing ---> 37 from tensorflow.python.tools import module_util as _module_util 38 from tensorflow.python.util.lazy_loader import LazyLoader as _LazyLoader 40 # Make sure code inside the TensorFlow codebase can use tf2.enabled() at import. File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\__init__.py:42 37 from tensorflow.python.eager import context 39 # pylint: enable=wildcard-import 40 41 # Bring in subpackages. ---> 42 from tensorflow.python import data 43 from tensorflow.python import distribute 44 # from tensorflow.python import keras File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\__init__.py:21 15 """`tf.data.Dataset` API for input pipelines. 16 17 See [Importing Data](https://tensorflow.org/guide/data) for an overview. 18 """ 20 # pylint: disable=unused-import ---> 21 from tensorflow.python.data import experimental 22 from tensorflow.python.data.ops.dataset_ops import AUTOTUNE 23 from tensorflow.python.data.ops.dataset_ops import Dataset File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\experimental\__init__.py:96 15 """Experimental API for building input pipelines. 16 17 This module contains experimental `Dataset` sources and transformations that can (...) 92 @@UNKNOWN_CARDINALITY 93 """ 95 # pylint: disable=unused-import ---> 96 from tensorflow.python.data.experimental import service 97 from tensorflow.python.data.experimental.ops.batching import dense_to_ragged_batch 98 from tensorflow.python.data.experimental.ops.batching import dense_to_sparse_batch File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\experimental\service\__init__.py:419 1 # Copyright 2020 The TensorFlow Authors. All Rights Reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 13 # limitations under the License. 14 # ============================================================================== 15 """API for using the tf.data service. 16 17 This module contains: (...) 416 job of ParameterServerStrategy). 417 """ --> 419 from tensorflow.python.data.experimental.ops.data_service_ops import distribute 420 from tensorflow.python.data.experimental.ops.data_service_ops import from_dataset_id 421 from tensorflow.python.data.experimental.ops.data_service_ops import register_dataset File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\experimental\ops\data_service_ops.py:24 22 from tensorflow.python import tf2 23 from tensorflow.python.compat import compat ---> 24 from tensorflow.python.data.experimental.ops import compression_ops 25 from tensorflow.python.data.experimental.service import _pywrap_server_lib 26 from tensorflow.python.data.experimental.service import _pywrap_utils File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\experimental\ops\compression_ops.py:16 1 # Copyright 2020 The TensorFlow Authors. All Rights Reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 13 # limitations under the License. 14 # ============================================================================== 15 """Ops for compressing and uncompressing dataset elements.""" ---> 16 from tensorflow.python.data.util import structure 17 from tensorflow.python.ops import gen_experimental_dataset_ops as ged_ops 20 def compress(element): File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\util\structure.py:23 20 import six 21 import wrapt ---> 23 from tensorflow.python.data.util import nest 24 from tensorflow.python.framework import composite_tensor 25 from tensorflow.python.framework import ops File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\data\util\nest.py:36 16 """## Functions for working with arbitrarily nested sequences of elements. 17 18 NOTE(mrry): This fork of the `tensorflow.python.util.nest` module (...) 31 arrays. 32 """ 34 import six as _six ---> 36 from tensorflow.python.framework import sparse_tensor as _sparse_tensor 37 from tensorflow.python.util import _pywrap_utils 38 from tensorflow.python.util import nest File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\framework\sparse_tensor.py:24 22 from tensorflow.python import tf2 23 from tensorflow.python.framework import composite_tensor ---> 24 from tensorflow.python.framework import constant_op 25 from tensorflow.python.framework import dtypes 26 from tensorflow.python.framework import ops File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\framework\constant_op.py:25 23 from tensorflow.core.framework import types_pb2 24 from tensorflow.python.eager import context ---> 25 from tensorflow.python.eager import execute 26 from tensorflow.python.framework import dtypes 27 from tensorflow.python.framework import op_callbacks File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\eager\execute.py:23 21 from tensorflow.python import pywrap_tfe 22 from tensorflow.python.eager import core ---> 23 from tensorflow.python.framework import dtypes 24 from tensorflow.python.framework import ops 25 from tensorflow.python.framework import tensor_shape File ~\anaconda3\envs\py39\lib\site-packages\tensorflow\python\framework\dtypes.py:34 31 from tensorflow.python.types import trace 32 from tensorflow.core.function import trace_type ---> 34 _np_bfloat16 = _pywrap_bfloat16.TF_bfloat16_type() 37 class DTypeMeta(type(_dtypes.DType), abc.ABCMeta): 38 pass TypeError: Unable to convert function return value to a Python type! The signature was () -> handle
最新发布
10-16
<think>好的,用户想下载并使用CosyVoice语音生成大模型2.0-0.5B。首先,我需要确认用户是否有足够的背景知识。他们可能已经了解了一些关于语音生成模型的基础,但需要具体的操作步骤。 接下来,用户的问题集中在如何下载和使用这个模型。根据提供的引用资料,特别是引用[3]中的体验地址,ModelScope平台可能是主要的下载来源。我需要检查是否还有其他官方渠道,比如GitHub或官方网站,但根据现有信息,ModelScope应该是主要的途径。 然后,我需要考虑用户可能的操作系统和环境。他们可能需要安装Python、PyTorch或其他依赖库。因此,步骤中应包括环境配置,比如安装ModelScope库和相关依赖。 另外,用户可能需要示例代码来运行模型。根据引用[1]和[2],模型支持多语言和细粒度控制,所以代码示例应该展示如何加载模型、输入文本、生成语音,并保存结果。同时,要提醒用户注意硬件要求,比如GPU加速,这可能影响他们的使用体验。 还要注意权限和许可证问题,确保用户知道模型的使用限制,比如是否允许商用,是否需要申请API密钥等。引用中提到的阿里开源,可能意味着需要遵守特定的开源协议。 用户可能遇到的常见问题包括安装错误、依赖冲突或生成语音时的配置问题。需要提前在步骤中给出解决建议,比如使用虚拟环境,检查CUDA版本等。 最后,生成相关问题时要围绕模型的应用场景、技术原理和优化方法,帮助用户进一步探索。确保引用正确,比如引用[2]和[3]中的信息,增强回答的可信度。 总结下来,回答需要结构清晰,分步骤指导下载和使用的流程,提供代码示例,注意事项,并附上相关问题供用户参考。同时,确保所有技术细节准确,符合用户的实际操作需求。</think>### 如何下载并使用 CosyVoice 语音生成大模型 2.0-0.5B #### 步骤 1:访问官方资源平台 1. **ModelScope 模型库** CosyVoice 2.0-0.5B 的官方资源可通过阿里云旗下的 **ModelScope 平台**获取。 - 访问链接:[ModelScope CosyVoice 2.0-0.5B 页面](https://www.modelscope.cn/models/iic/CosyVoice2-0.5B/summary) [^3] - 注册/登录账号后,点击“立即体验”或“下载模型”按钮。 2. **GitHub 仓库** 阿里开源社区可能同步更新代码和技术文档,建议查看以下仓库: - [CosyVoice GitHub 页面](https://github.com/funaudiollm/CosyVoice2.0) [^2] --- #### 步骤 2:安装依赖环境 模型基于 Python 和 PyTorch 实现,需提前配置以下环境: ```bash # 安装 ModelScope 基础库 pip install modelscope # 安装语音生成相关依赖 pip install torch torchaudio pip install funasr ``` --- #### 步骤 3:加载模型与生成语音 使用以下示例代码加载模型并生成语音: ```python from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks # 初始化语音合成管道 text_to_speech = pipeline( task=Tasks.text_to_speech, model='iic/CosyVoice2-0.5B', model_revision='v2.0.0' ) # 输入文本并生成语音 input_text = "欢迎使用 CosyVoice 2.0 语音生成模型" result = text_to_speech(input_text, voice='default', speed=1.0, pitch=0) # 保存生成的音频文件 import soundfile as sf sf.write('output.wav', result["waveform"], result["sample_rate"]) ``` --- #### 步骤 4:关键参数说明 1. **多语言支持** 通过 `language` 参数指定语言(如 `zh`、`en`、`ja`)[^2]。 2. **细粒度控制** 调整 `speed`(语速)、`pitch`(音高)和 `voice`(音色)参数实现定制化输出。 --- #### 注意事项 1. **硬件要求** 建议使用 GPU 环境(如 NVIDIA CUDA 11.8+)加速推理。 2. **模型许可证** 确认开源协议(如 Apache 2.0)是否允许商用[^2]。 3. **流式合成** 若需实时语音生成,参考官方文档的 **双向流式 API** 配置[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值