在网上看到有人用 seq2seq 训练一个对对联的机器人,很好奇能不能用Google的BERT预训练模型微调,训练出一个不仅可以对传统对子,也可以对新词新句的泛化能力更好的对对联高手。今天大年初一,这样的例子刚好应景。在Google公开的BERT源代码中,附带两个微调的例子,一个是阅读理解,run_squad.py, 另一个是双句或单句分类, run_classifier.py ,并没有命名实体识别或者是 seq2seq 的例子。这次实验我会深度修改 Google BERT 在预训练数据上的微调模型,使得输出是与输入等长的序列。即上联中的每个字都会对应下联中相同位置的一个字,此任务比seq2seq简单,不需要将上联映射到潜在空间的一个向量后使用解码器产生非等长序列。既然 BERT 对输入的每一个 token 都产生了一个潜在空间的 768 维的向量,我们只需要再加一层,将每个token的768维向量变换成字典空间的 N (N=21128)维向量即可。
参考书 《TensorFlow:实战Google深度学习框架》(第2版) 一个使用数据集进行训练和测试的完整例子。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: 694317828@qq.com @software: pycharm @file: dataset_test5.py @time: 2019/2/12 13:45 @desc: 使用数据集实现数据输入
目前,越来越多的互联网公司内部都有自己的一套框架去训练模型,而模型训练时需要的数据则都保存在分布式文件系统(HDFS)上。Hive作为构建在HDFS上的一个数据仓库,它本质上可以看作是一个翻译器,可以将HiveSQL语句翻译成MapReduce程序或Spark程序,因此模型需要的数据例如csv/libsvm文件都会保存成Hive表并存放在HDFS上,那么问题就来了,如何大规模地把HDFS中的数据直接喂到Tensorflow中呢?
这里要注意的是,TFrecord文件的格式定义中,一定要包含“image/encoded”和“image/format”两个关键字 ,第一个关键字的值为图像的二进制值,第二个为图像的格式。
这次只记录我在实验中遇到的情况和略懂的几点,多余的我没有怎么看【笑哭】,一个是因为懒,一个是因为官网介绍页太少了8,有点心塞~~ 开门见山,关于Tensorflow读取数据,官网给出了三种方法,分别是: 1.供给数据(Feeding): 在TensorFlow程序训练或者测试的每一个epoch,在tf.Session().run()函数中,以字典的形式通过feed_dict参数进行赋值。 2.从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据。 3.预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。
使用Alexnet网络进行训练,多任务学习:验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册、灌水、发垃圾广告等等 。 Tensorflow
ensorflow 如何读取数据 tensorflow有三种把数据放入计算图中的方式: 通过feed_dict 通过文件名读取数据:一个输入流水线 在计算图的开始部分从文件中读取数据 把数据预加载到一
本节学习来源斯坦福大学cs20课程,有关本节源代码已同步只至github,欢迎大家star与转发,收藏!
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片、大量图片,和TFRecorder读取方式。并且还补充了功能相近的tf函数。
从tesorflow1.11之后,(大概是这个版本号),谷歌推出了tf.data模块来读取数据,甚至在tensorflow2.0中,取消了数据队列管道,所以我建议大家学习tf.data模块。未来我也会做详细的tf.data模块使用说明。
##TFRecord## TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和标签放在一起的二进制文件,能更好的利用内存,在tensorflow中快速的复制,移动,读取,存储 等等。 TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter 写入到TFRecords文件。 从TFRecords文件中读取数据, 可以使用tf.TFRecordReader的tf.parse_single_example解析器。这个操作可以将Example协议内存块(protocol buffer)解析为Tensor。 ##Image to TFRecord##
概述关于tensorflow读取数据,官网给出了三种方法: 1、供给数据:在tensorflow程序运行的每一步,让python代码来供给数据 2、从文件读取数据:建立输入管线从文件中读取数据 3、预加载数据:如果数据量不太大,可以在程序中定义常量或者变量来保存所有的数据。 这里主要介绍一种比较通用、高效的数据读取方法,就是tensorflow官方推荐的标准格式:tfrecord。 tfrecord数据文件 tfrecord数据文件是一种将图像数据和标签统一存储的二进制文件,能更好的利用内存,在tenso
假设emo文件夹下,有1,2,3,4等文件夹,每个文件夹代表一个类别 1 import tensorflow as tf 2 from PIL import Image 3 from glob import glob 4 import os 5 import progressbar 6 import time 7 8 9 class TFRecord(): 10 def __init__(self, path=None, tfrecord_file=None):
TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer的格式存储的。以下代码给出了tf.train.Example的定义。
tensorflow提供了一种统一的格式来存储数据,这个格式就是TFRecord,TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer的格式.proto来存储的。以下代码给出了tf.train.Example的定义。
这里主要提供了 Tensorflow 创建 tfrecords 文件的辅助函数,以用于图像分类、检测和关键点定位.
虽然一个TFRecord文件中可以存储多个训练样例,但是当训练数据量较大时,可将数据分成多个TFRecord文件来提高处理效率。tensorflow提供了tf.train.match_filenames_once函数来获取符合一个正则表达式的所有文件,得到的文件列表可以通过tf.train.string_input_producer函数进行有效的管理。
除队列以外,tensorflow还提供了一套更高的数据处理框架。在新的框架中,每一个数据来源被抽象成一个“数据集”,开发者可以以数据集为基本对象,方便地进行batching、随机打乱(shuffle)等操作。
参考书 《TensorFlow:实战Google深度学习框架》(第2版) 一个简单的程序来生成样例数据。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: 694317828@qq.com @software: pycharm @file: sample_data_produce1.py @time: 2019/2/3 21:46 @desc: 一个简单的程序来生成
摘要总结:本文主要介绍了使用TensorFlow从TFRecord文件中读取数据,并将其组合成batch进行训练的过程。首先介绍了TensorFlow和TFRecord的基本概念,然后详细讲解了从TFRecord文件中读取数据的过程,包括使用TensorFlow的队列和线程进行数据读取和组合成batch的过程。最后通过一个例子演示了如何使用TensorFlow读取和组合成batch进行训练的过程。
Google-research开源的BERT代码中,微调BERT进行文本分类的demo代码是基于TPUEstimator的单卡实现,即使机器上有多块GPU,也无法并行训练,不满足大规模训练的要求。本文分析开源demo代码无法多卡训练的原因,并给出修改代码,支持多卡训练的方案。
如果你是 Tensorflow 的初学者,那么你或多或少在网络上别人的博客上见到过 TFRecord 的影子,但很多作者都没有很仔细地对它进行说明,这也许会让你感受到了苦恼。本文按照我自己的思路对此进行一番讲解,也许能够提供给你一些帮助。
2. 对接性:TensorFlow中也加入了高级API (Estimator、Experiment,Dataset)帮助建立网络,和Keras等库不一样的是:这些API并不注重网络结构的搭建,而是将不同类型的操作分开,帮助周边操作。可以在保证网络结构控制权的基础上,节省工作量。若使用Dataset API导入数据,后续还可选择与Estimator对接。
陈鑫磊、李佳、李飞飞、Abhinav Gupta等人提出了一种新的迭代视觉推理框架
众所周知,要训练出一个模型,首先我们得有数据。我们第一个例子中,直接使用dataset的api去加载mnist的数据。(minst的数据要么我们是提前下载好,放在对应的目录上,要么就根据他给的url直接从网上下载)。
参考书 《TensorFlow:实战Google深度学习框架》(第2版) 例子:从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y = x^2 的值。 #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: 694317828@qq.com @software: pycharm @file: dataset_test1.py @time: 2019/2/10 1
TFRecords其实是一种二进制文件,虽然它不如其他格式好理解,但是它能更好的利用内存,更方便复制和移动,并且不需要单独的标签文件
摘要:BERT是近几年NLP领域中具有里程碑意义的存在。因为效果好和应用范围广所以被广泛应用于科学研究和工程项目中。广告系列中前几篇文章有从理论的方面讲过BERT的原理,也有从实战的方面讲过使用BERT构建分类模型。本篇从源码的角度从整体到局部分析BERT模型中分类器部分的源码。
本文介绍如何使用TensorFlow来读取图片数据,主要介绍写入TFRecord文件再读取和直接使用队列来读取两种方式。假设我们图片目录结构如下:
上传了模型权重和模型结构,因GItHub不支持25MB以上的文件,因此上传在此处,如果急用可以在此下载,也是作为对我工作的一些支持
在训练模型时,我们首先要处理的就是训练数据的加载与预处理的问题,这里称这个过程为输入流水线(input pipelines,或输入管道,[参考:https://www.tensorflow.org/performance/datasets_performance])。在TensorFlow中,典型的输入流水线包含三个流程(ETL流程):
本文介绍如何利用 TensorFlow 将多个 TFRecord 文件读取到内存中并显示为图片。首先介绍了 TFRecord 文件的结构和读取方法,然后通过一个具体的例子演示了如何使用 TensorFlow 读取和显示车牌号图片。最后,通过多线程的方式批量读取多个 TFRecord 文件,并将它们显示为图片。
需要注意的是,如下教程的tf.data的模块需要将tensorflow升级到1.4的版本,才可以支持,低于1.4的版本的导入数据教程,见之前的翻译教程,戳这里(https://www.jianshu.com/p/64bd6a49a94a) Dataset的API让你能从简单,可重用的模块中构建复杂的输入管道。例如一个图片模型的输入管道,可能要从分布式的文件系统中获得数据,对每张图片做随机扰动,以及将随机选取的图片合并到一个批次中用作训练。文本模型的输入管道可能涉及到从原始文本数据中提取符号,然后将其转换到查
Google官方推荐在对于中大数据集来说,先将数据集转化为TFRecord数据,这样可加快你在数据读取,预处理中的速度。除了“快”,还有另外一个优点就是,在多模态学习(比如视频+音频+文案作为特征)中可以将各种形式的特征预处理后统一放在TFRecord中,避免了读取数据时候的麻烦。
要使用官方的tensorflow版本的bert微调进行自己的命名实体识别,需要处理数据成bert相应的格式,主要是在run_classifier.py中,比如说:
对于数据量较小而言,可能一般选择直接将数据加载进内存,然后再分batch输入网络进行训练。但是,如果数据量较大,这样的方法就不适用了,因为太耗内存,所以这时最好使用 tensorflow 提供的队列 queue,也就是第二种方法从文件读取数据。对于一些特定的读取,比如csv文件格式,官网有相关的描述。而 TFRecords 是tensorflow 的内定标准形式,更加高效的读取方法。 Tensorflow 读取数据的三种方式:
实验环境:windows 7,anaconda 3(Python 3.5),tensorflow(gpu/cpu)
本文介绍了如何使用 TensorFlow Datasets 和 Estimators 在 Python 中处理图像数据。首先介绍了如何使用 TensorFlow Datasets 构建数据集,然后介绍了如何使用 Estimators 在 TensorFlow 中实现自定义模型。通过这些技术,可以快速构建出用于图像分类、物体检测等任务的模型。
pytorch封装性更好,成功率高由于pytorch中使用了归一化数据(tensorflow中没有添加相应的代码),所以成功率更高
在利用深度学习算法搭建完成网络之后,我们要对网络进行训练,要训练网络就要有训练数据,通常我们会直接对硬盘上存放数据进行操作,来fetch到网络中。这样直接从硬盘上读取 数据太慢了,为了加快数据读取,今天我们介绍一种比较好的数据格式 tfrecord,那么什么是tfrecord呢?
工作和学习中设计一个神经网络中经常需要设计一个数据载入器。首先第一件事我们要根据我们的任务要求确定一个数据提供的方法。如我们是一个分类任务,我们就需要读取数据和数据本身对应的标签。
大家好! 在本教程中,我们将使用 TensorFlow 的命令模式构建一个简单的前馈神经网络。 希望你会发现它很有用! 如果你对如何改进代码有任何建议,请告诉我。
本篇文章在上篇TensorFlow-手写数字识别(一)的基础上进行改进,主要实现以下3点:
子线程读取数据 向队列放数据(如每次100个),主线程学习,不用全部数据读取后,开始学习
Google官方给出了两个tensorflow的高级封装——keras和Estimator,本文主要介绍tf.Estimator的内容。tf.Estimator的特点是:既能在model_fn中灵活的搭建网络结构,也不至于像原生tensorflow那样复杂繁琐。相比于原生tensorflow更便捷、相比与keras更灵活,属于二者的中间态。
!!!num_epochs=None,不指定迭代次数,这样文件队列中元素个数也不限定(None*数据集大小)。
领取专属 10元无门槛券
手把手带您无忧上云