zoukankan      html  css  js  c++  java
  • tensorflow学习013——tf.data模块简介及用法

    3.1 tf.data模块简介及用法

    可以从多个数据源非常方便的读取数据
    在第一个epoch中缓存下载,接下来的epoch处理的速度就会变快
    使用简单的代码构建复杂的输入,可以轻松处理大量数据、不同数据格式以及复杂的转换
    tf.data.Dataset 表示一系列的元素、图片,每个元素包含一个或多个Tensor对象,例如在图片通道中,一个元素可能是单个训练样本,具有一对表示图片数据和标签的张量。

    创建tf.data.Dataset方式
    方式一
    直接从Tensor创建Dataset
    例如Dataset.from_tensor_slices()
    参数也可以是Numpy(tensorflow会自动将它转换成Tensor),Tensor,列表
    方式二
    通过对一个或多个tf.data.Dataset对象来使用变换(例如Dataset.zip)来创建Dataset

    一个Dataset对象包含多个元素,每个元素的结构都相同。每个元素包含一个或多个tf.Tensor对象,这些对象被称为组件。Dataset的属性由构成该Dataset的元素的属性映射得到,元素可以是单个张量、张量元组,也可以是张量的嵌套元组。

    使用列表创建
    dataset = tf.data.Dataset.from_tensor_slices([1,2,3,4,5,6,7])
    for ele in dataset:
        print(ele,ele.numpy())
    
    结果如图3-1所示

    image
    图3-1

    可以使用迭代获取每个元素,并且可以使用.numpy()将其转换为array格式

    二维列表创建
    dataset = tf.data.Dataset.from_tensor_slices([[1,2],[3,4],[5,6]])
    for ele in dataset:
        print(ele,ele.numpy())
    
    结果如图3-2所示

    image
    图3-2
    其shape为(2,)说明,每个元素长度为2

    使用字典创建
    dataset = tf.data.Dataset.from_tensor_slices({'a':[1,2,3,4],
                                                  'b':[5,6,7,8],
                                                  'c':[10,11,12,13]})
    for ele in dataset:
        print(ele)
    
    字典形成的Dataset比较特殊,如图3-3所示。

    image
    图3-3

    take()方法
    for ele in dataset.take(4): #只遍历前4项
        print(ele)
    

    训练网络的时候,每一轮训练的数据的顺序不一样,有助于网络的训练,否则可能会出现网络记忆了数据的顺序的可能。
    dataset = dataset.shuffle(7) #打乱数据的顺序,里面数字的大小一般等于元素的个数

    dataset = dataset.repeate(count = 3) #将dataset的数据重复三次,如果之前没有进行shuffle,那么会按照顺序重复三次,如果进行了shuffle,那么每一次的重复的数据都是随机排序的。不写参数,默认重复无数次

    dataset = dataset.batch(4) 表示每4个元素作为一个数据绑定,也就是训练的时候,每次处理4个元素

    可以使用map()对每个元素进行变换
    dataset = dataset.map(tf.square) 获得的新数据为原先的平方


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    hiho_1081_最短路径1
    hiho_1079_离散化
    hiho_1078_线段树区间修改
    hiho_1069_最近公共祖先3
    【.netcore学习】.netcore添加到 supervisor 守护进程自启动报错
    【.NetCore学习】ubuntu16.04 搭建.net core mvc api 运行环境
    【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
    【vue基础学习】vue.js开发环境搭建
    【vue学习】vue中怎么引用laydate.js日期插件
    【年终总结】个人的2017年年终总结
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/15581295.html
Copyright © 2011-2022 走看看