美文网首页
第43周学习总结——im2txt

第43周学习总结——im2txt

作者: liuchungui | 来源:发表于2017-10-30 00:43 被阅读0次

    上周学习任务没有完成,这周终于完成了。主要的内容有:

    • 重新学习了使用TFRecord、多线程输入数据处理
    • 看了tensorflow官网的Importing Data教程,使用更高级的组合数据集
    • 看了im2txt的源码,知道了Image caption的实现原理
    • 开始了年终项目(比赛项目),做了数据处理部分

    一、重新学习了使用TFRecord、多线程输入数据处理

    几个月前,看了《TensorFlow实战Google深度学习框架》这本书,然后懵懵懂懂做了一个图片识别的小东西。当时,仿照书上是将图片和label使用TFRecord格式进行存储,然后使用多线程与队列的形式组合数据。

    当时不知道为什么这么做,现在明白了。给数据的方式有多种:

    • 1、可以直接读取数据到内存中,然后将数据分成一个个batch,给模型进行训练。这种方式读取适合数据量少的情况,如果对大数据量来的话,内存之中会存储多份这样数据,从而导致占用大量内存。我现在就碰到过,读取一个6G的文件到内存中,因为中途需要对数据进行处理,从而导致数据存储几份,直接就导致机器卡死。
    • 2、使用队列和多线程的形式进行读取,然后使用多线程组合batch。这种方式适合大量数据读取,而且效率特别高。在整个读取过程,我们可以控制输入队列的capacity,例如我们设置capacity为10000,当队列中的数据量少于10000的时候,输入队列就会启动多个线程从数据源读取数据到队列中;而当队列中的数据量等于10000时,输入队列将只进行出队,不进行入队。这样,既保证了模型有数据可用,又控制了数据量。当然,这个只是队列读取数据,我们还可以使用tf.train.batch来进行数据组合,每次都会取设置batch_size个数据。当然,TFRecord是官方建议的数据格式,它操作起来更方便。

    二、看了tensorflow官网的Importing Data教程,使用更高级的组合数据集

    在重新学习了上面的内容之后,不经意间发现了Importing Data,然后发现官网将读取数据和组合数据封装的更简单了。

    它整个流程特别简单:

    • 1、定义数据源,它有三种方式:直接从内存中读取,例如可以使用tf.contrib.data.Dataset.range()或tf.contrib.data.Dataset.from_tensor_slices()等方法;使用tf.contrib.data.TFRecordDataset()从TFRecord文件格式读取;使用tf.contrib.data.TextLineDataset()从文件中一行一行读取。
    • 2、使用Dataset.map()方法对数据进行预处理,这个方法传递一个函数作为参数,然后通过这个函数来进行数据处理
    • 3、构建生成器,可以使用make_one_shot_iterator()创建,当然也有其它API。
    • 4、通过Dataset.batch()组合成Batch数据,还可以通过Dataset.repeat()来进行设置可以重复多少个Epochs

    三、看了img2txt的源码,知道了Image caption的实现原理

    星期天下午的时候,看了im2text模型的代码,发现实现起来比NMT简单多了。

    它实现的原理主要参考是来自下图的模型:


    它首先通过Inception v3模型对图片进行特征读取,然后再加上一个全连接层,从而对图片进行embedding了。

    然后,将图片Embeddings给LSTM,才知道原来这里只使用了一层RNN。

    最后,解码层其实就和seq2seq差不多了。

    四、开始了年终项目(比赛项目),做了数据处理部分

    主要是看了项目的数据是怎么样的,然后将一份数据拆成5份,然后将里面对图片的描述变成id。

    进度还不怎么样,在处理TFRecord数据时出现了问题。

    总结与计划

    总结:主要对队列与多线程读取、组合数据有更深刻的印象,然后可以将公司的代码改下,会有更好的性能。

    计划:将年终项目的代码写完,然后开始跑模型。

    相关文章

      网友评论

          本文标题: 第43周学习总结——im2txt

          本文链接:https://www.haomeiwen.com/subject/ztgupxtx.html