0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow中读数据三种方法

C语言专家集中营 来源:lp 2019-04-01 14:40 次阅读

TensorFlow中读数据一般有三种方法:

使用placeholder读内存中的数据

使用queue读硬盘中的数据

使用Dataset读内存个硬盘中的数据

基本概率

由于第三种方法在语法上更简洁,因此本文主要介绍第三种方法。官方给出的Dataset API类图:

image.png

其中终于重要的两个基础类:Dateset和Iterator。Dateset是具有相同类型的“元素”的有序表,元素可以是向量、字符串、图片等。

从内存中创建Dataset

以数字元素为例:

例1

从Dataset中实例化一个Iterator,然后对Iterator进行迭代。

iterator = dataset.make_one_shot_iterator()

从dataset中实例化一个iterator,是“one shot iterator”,即只能从头到尾读取一次。

one_element = iterator.get_next()

从iterator中取出一个元素, one_element是一个tensor,因此需要调用sess.run(one_element)取出值。

如果元素被读取完了,再sess.run(one_element)会抛出tf.errors.OutOfRangeError异常。解决方法:使用 dataset.repeat()

更复杂的输入形式,例如,在图像识别的应用中,一个元素可以使{“image”:image_tensor, “label”:lable_tensor}

dataset = tf.data.Dataset.from_tensor_slices( { "a": np.array([1.0, 2.0, 3.0, 4.0, 5.0]), "b": np.random.uniform(size=(5, 2)) } )

最终dataset中的一个元素为{"a": 1.0, "b": [0.9, 0.1]}的形式。或者

dataset = tf.data.Dataset.from_tensor_slices( (np.array([1.0, 2.0, 3.0, 4.0, 5.0]), np.random.uniform(size=(5, 2))) )

对Dataset中的元素做变换:Transformation

一个Dataset通过Transformation变成一个新的Dataset。常用的操作有:

map

batch

shuffle

repeat

下面分别来介绍以上几个操作。(1)mapmap接收一个函数,dataset中的每个元素都可以作为这个函数的输入,并将函数的返回值作为新的dataset,例如:

dataset = tf.data.Dataset.from_tensor_slices(np.array([1.0, 2.0, 3.0, 4.0, 5.0])) dataset = dataset.map(lambda x: x + 1) # 2.0, 3.0, 4.0, 5.0, 6.0

(2)batch将多个元素组合成batch,例如:

dataset = dataset.batch(32)

(3)shuffle打乱dataset中的元素,参数buffersize表示打乱时buffer的大小。

dataset = dataset.shuffle(buffer_size=10000)

(4)repeat将整个序列重复多次,只用用来处理epoch。如果直接调用repeat()的话,生成的序列就会无限重复下去,没有结束,因此也不会抛出。tf.errors.OutOfRangeError异常:

dataset = dataset.repeat(5)

例子:读磁盘图片与对应的label

读入磁盘中的图片和图片相应的label,并将其打乱,组成batch_size=32的训练样本。在训练时重复10个epoch。

# 函数的功能时将filename对应的图片文件读进来,并缩放到统一的大小def _parse_function(filename, label): image_string = tf.read_file(filename) image_decoded = tf.image.decode_image(image_string) image_resized = tf.image.resize_images(image_decoded, [28, 28]) return image_resized, label# 图片文件的列表filenames = tf.constant(["/var/data/image1.jpg", "/var/data/image2.jpg", ...])# label[i]就是图片filenames[i]的labellabels = tf.constant([0, 37, ...])# 此时dataset中的一个元素是(filename, label)dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))# 此时dataset中的一个元素是(image_resized, label)dataset = dataset.map(_parse_function)# 此时dataset中的一个元素是(image_resized_batch, label_batch)dataset = dataset.shuffle(buffersize=1000).batch(32).repeat(10)# 此时dataset中的一个元素是(image_resized_batch, label_batch)# image_resized_batch的形状为(32, 28, 28, 3), label_batch的形状为(32, )

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62569
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60527
  • DataSet
    +关注

    关注

    0

    文章

    5

    浏览量

    2198

原文标题:TensorFlow读数据

文章出处:【微信号:C_Expert,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview查看本机ip的三种方法

    做TCP通讯的时候,有时候需要知道自己的IP虽然知道自己电脑ip可以不用这么麻烦,但是有时候就想用自己所学来获得自己所需,职业病 咳咳这里给出得到本地IP的三种方法。源程序,在附件里。
    发表于 11-27 17:17

    启动Redis的三种方法

    Redis笔记(1)——安装、卸载、三种方法启动Redis,Redis命令使用(干货十足),Redis两种方法设置密码,时间复杂度(更完善哦~)
    发表于 06-08 16:09

    LwIP协议栈开发嵌入式网络的三种方法有何关系

    LwIP协议栈开发嵌入式网络的三种方法分析 轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统。本文结合μC/OS-II这一实时操作系统
    发表于 08-05 07:55

    噪声系数测量的三种方法

    噪声系数测量的三种方法 本文介绍了测量噪声系数的三种方法:增益法、Y
    发表于 05-07 13:38 2153次阅读

    解决电池问题有三种方法

    解决电池问题有三种方法      对于手机电池问题如何解决,业内人士指出有以下三种方法:   一、发明新型电池。目前有日本生产商已经展示了概念性的燃
    发表于 11-10 14:26 952次阅读

    台式机CMOS放电三种方法

    现有的主板大多设计了CMOS放电跳线方便用户进行放电操作,不过CMOS放电的方法也不止这一,阅读下文了解台式机CMOS放电三种方法
    发表于 01-09 11:01 5.3w次阅读
    台式机CMOS放电<b class='flag-5'>三种方法</b>

    电感变压器漆包线快速去漆的三种方法盘点

    电感变压器如何快速的去漆呢?一般在实际的工作,一般采用手工去皮,电动剥皮,剥离剂剥皮这三种方法来进行去漆,那么这三种种方法更高效呢?
    发表于 12-21 14:12 1.6w次阅读

    python统计词频的三种方法

    python统计词频的三种方法方法
    发表于 05-25 14:33 2次下载

    获得更高输出电流的三种方法

    的79dB PSRR(1MHz)。一些客户要求将电流提高到200mA以上,同时仍保持低噪声和高PSRR。本文探讨了获得更高输出电流的三种方法,并提供了实用的输入,以帮助您确定哪种方法最适合您的电路条件。这三种方式是:
    的头像 发表于 01-08 15:32 6109次阅读
    获得更高输出电流的<b class='flag-5'>三种方法</b>

    噪声系数测量的三种方法

    本文介绍了测量噪声系数的三种方法:增益法、Y系数法和噪声系数测试仪法。这三种方法的比较以表格的形式给出。
    的头像 发表于 05-18 11:02 1286次阅读
    噪声系数测量的<b class='flag-5'>三种方法</b>

    【世说设计】噪声系数测量的三种方法

    本文介绍了测量噪声系数的三种方法:增益法、Y系数法和噪声系数测试仪法。这三种方法的比较以表格的形式给出。在无线通信系统,噪声系数(NF)或者相对应的噪声因数(F)定义了噪声性能和对接
    的头像 发表于 05-19 10:38 1064次阅读
    【世说设计】噪声系数测量的<b class='flag-5'>三种方法</b>

    pwm产生的三种方法

    pwm产生的三种方法 PWM(Pulse Width Modulation)是一常用的控制技术,可以通过调节开关管的通断时间,通过改变输出波形的占空比来实现对电路的控制。在现代工业控制,PWM
    的头像 发表于 09-02 10:25 7557次阅读

    三种方法实现串口接收不定长度的数据

    下面三种方式都亲测可用,实际使用时应采用第三种方法,更有效率。
    的头像 发表于 09-14 16:16 1.1w次阅读
    <b class='flag-5'>三种方法</b>实现串口接收不定长度的<b class='flag-5'>数据</b>

    修复锂电池的三种方法

    电子发烧友网站提供《修复锂电池的三种方法.doc》资料免费下载
    发表于 11-15 10:40 5次下载
    修复锂电池的<b class='flag-5'>三种方法</b>

    传统激光功率衰减的三种方法

    传统激光功率衰减通常使用以下三种方法,分别为中性密度衰减片衰减法、偏振衰减法、镀膜光学镜片衰减法。
    的头像 发表于 01-20 10:42 1735次阅读
    传统激光功率衰减的<b class='flag-5'>三种方法</b>