Blocks官方代码地址:https://github.com/mila-udem/blocks

Blocks是加拿大Montreal大学Bengio实验室牵头开发的基于Python的神经网络模型框架,可方便地在大规模数据上进行复杂神经 网络模型的训练。它包含有很多外置工具包如,logging, monitoring, visualization, and serialization,而Fuel则提供了数据格式的标准化。

Fuel官方代码地址:https://github.com/mila-udem/fuel

由于Blocks仍在进一步开发中,以下说明中遇到的错误可能已被修复,因而只可作为参考[注:当前时间2016/03/01]。

1. 安装Blocks和Fuel:
安装git,git的安装和使用可参考[Bitbucket-团队开发私有库使用指南, http://jacoxu.com/?p=1611]
接下来安装blocks,由于需要通过github下载,进入git bash,输入:
pip install git+git://github.com/mila-udem/blocks.git \
-r https://raw.githubusercontent.com/mila-udem/blocks/master/requirements.txt
注:a). 实际运行中,可修改一下requirements.txt文件中所定义的库,如numpy等在安装ANACOND的时候都已经安装,那么可以删除掉requirements.txt文件中对应依赖行。
b). 若执行过程中有错误可能会导致blocks没有正常安装,则需要重新执行一下
pip install git+git://github.com/mila-udem/blocks.git
若安装成功则在c:\anaconda2\lib\site-packages 目录下可以看到和blocks及fuel相关的4个文件夹,并且在在python模式下执行如下两行命令,不报错即可:
from blocks.bricks import Tanh
from fuel.datasets import MNIST
说明Blocks和Fuel已经可以正常调用。

2. 利用Fuel下载数据集
Fuel工具提供了数据格式的转换,示例代码中提供了几种常用的公开数据集进行下载,包括:
iris, caltech101_silhouettes, svhn, cifar10, binarized_mnist, adult, cifar100, mnist 八种,需要自己利用工具进行下载
首先需要配置数据存储路径,配置示例如:
# ~/.fuelrc
data_path: “d:/jacoxu/casia/data”

$ export FUEL_DATA_PATH=” d:/jacoxu/casia/data”

进入该路径进行下载和格式转换,具体操作见官方文档说明:

https://fuel.readthedocs.org/en/latest/built_in_datasets.html

数据路径及格式配置正常后可以通过fuel进行加载,如:
>>> from fuel.datasets import MNIST
>>> mnist = MNIST((“train”,))

3. 示例演示-Machine Translation
路径:https://github.com/mila-udem/blocks-examples/tree/master/machine_translation
功能:带Attention的Machine Translation示例代码
主函数:__main__.py
数据集:WMT15 Czech to English corpus

3.1 准备数据集:
执行示例程序之前,需要先下载数据集,可很方便地运行prepare_data.py文件即可,主要包括119M的训练数据,20.4M的开发集数据及
Moses的预处理脚本和Bleu计算脚本,并将下载后的数据处理好。其中本示例实际只使用了WMT15数据中的Czech to
English的数据对,那么训练语料为41.4M,开发集语料为668KB。
然而数据下载好进行预处理时遇到如下错误:
INFO:prepare_data:…writing tokenized file [./data\news-commentary-v10.cs-en.cs.tok]
Traceback (most recent call last):
File “prepare_data.py”, line 257, in
main()
File “prepare_data.py”, line 241, in main
tokenize_text_files(tr_files + val_files, tokenizer_file)
File “prepare_data.py”, line 121, in tokenize_text_files
var, stdin=inp, stdout=out, shell=False)
File “C:\Anaconda2\lib\subprocess.py”, line 535, in check_call
retcode = call(*popenargs, **kwargs)
File “C:\Anaconda2\lib\subprocess.py”, line 522, in call
return Popen(*popenargs, **kwargs).wait()
File “C:\Anaconda2\lib\subprocess.py”, line 710, in __init__
errread, errwrite)
File “C:\Anaconda2\lib\subprocess.py”, line 958, in _execute_child
startupinfo)
WindowsError: [Error 2]

最后发现问题的原因在于虽然MINGW64环境中有Perl,但是由于Windows环境下缺少Perl,因而在Pycharm下进行运行时报错。
因而,Linux用户应该不会遇到此问题,另Windows用户安装一下Perl也就可以在IDE下调试了。可安装ActiveState
Perl社区免费版http://www.activestate.com/activeperl/downloads,[重启电脑]。不过由于数据处理中还调用了Linux的shuf命令,因而还是建议Windows用户直接在MINGW64环境中执行preprare_data.py处理数据。

注:Bleu的perl脚本使用方法见:http://www.statmt.org/moses/?n=Moses.SupportTools
Perl multi-bleu.perl ref.txt, ref1.txt, ref2.txt < out.txt
且,Bleu计算时需要最后一行空行,可以采用下面的数据验证一下,例如:
Ref.txt共4行分别为 1\n2\n3\n4\5\n6,out.txt为1\n2\n\3\n3\n2\n1通过bleu计算得到共5行,bleu为60%
而添加了空行之后即分别为1\n2\n3\n4\5\6\n,out.txt为1\n2\n\3\n3\n2\n1\n,得到共6行,bleu为50%
3.2 调试Machine_Translation
1). 函数入口:__main__.py
功能:进行配置,调用Fuel接口加载数据
任务:a). 需要详细理解stream类,知道数据格式细节;
2). 主函数:__init__.py
功能:搭建模型并调用Blocks进行训练
3). Main Loop:main_loop.py
功能:进行模型训练
注意:a). self.algorithm.initialize() 消耗时间好长

Bug 1. Should be cPickle.load(open(src_vocab, ‘rb’) to avoid EOFError
In blocks-examples/machine_translation/stream.py. I got a EOFError, and found the cause is that:
All cPickle.load(open(src_vocab) and cPickle.load(open(trg_vocab))
should be updated to cPickle.load(open(src_vocab, ‘rb’) and
cPickle.load(open(trg_vocab, ‘rb’)) to avoid EOFError.
Bug 2. 修改./blocks/search.py中BeamSearch.compile()._compile_next_state_computer()
其中的
self.next_state_computer = function(
self.contexts + self.input_states + next_outputs, next_states)
改为:
self.contexts + self.input_states + next_outputs, next_states, on_unused_input=’warn’)
Google论坛上有对此问题的讨论和解释:
https://groups.google.com/d/msg/blocks-users/94qKmXzvz0Q/2RwUZYp0t-sJ

其他可能会遇到的问题:
1) 数据在每个Epcoh训练之前有没有进行随机化?
2) 测试阶段如何通过模型参数进行预测?
有两种方式,分别是:
a). sampling: /machine_translation/sampling.py L55 model.get_theano_function()
b). Bleu: /blocks/search.py BeamSearch.search()

博文出处:http://jacoxu.com/?p=1828

基于Theano的DNN框架Blocks使用简要总结的更多相关文章

  1. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  2. 基于Theano的深度学习框架keras及配合SVM训练模型

    https://blog.csdn.net/a819825294/article/details/51334397 1.介绍 Keras是基于Theano的一个深度学习框架,它的设计参考了Torch, ...

  3. 封装:简要介绍自定义开发基于WPF的MVC框架

    原文:封装:简要介绍自定义开发基于WPF的MVC框架 一.目的:在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF中似乎没有现成的MVC框架,由此自定义开发一套MVC ...

  4. 解析基于keras深度学习框架下yolov3的算法

    一.前言 由于前一段时间以及实现了基于keras深度学习框架下yolov3的算法,本来想趁着余热将自己的心得体会进行总结,但由于前几天有点事就没有完成计划,现在趁午休时间整理一下. 二.Keras框架 ...

  5. 基于LoadRunner构建接口测试框架

    基于LoadRunner构建接口测试框架 http://www.docin.com/p-775544153.html

  6. 8个强大的基于Bootstrap的CSS框架

    做过前端开发的小伙伴们应该对Bootstrap不会陌生,它是由Twitter推出的开源CSS框架,其中包含了很多Web前端开发的工具包和应用组件.当然,和jQuery一样,Bootstrap同时也是一 ...

  7. 基于cocos2d-x的游戏框架设计——李成

    视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...

  8. 基于MEF的插件框架之总体设计

    基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...

  9. 【百度地图开发之二】基于Fragment的地图框架的使用

    写在前面的话: [百度地图开发之二]基于Fragment的地图框架的使用(博客地址:http://blog.csdn.net/developer_jiangqq),转载请注明. Author:hmji ...

随机推荐

  1. snmp安装配置

    只说一下在ubuntu下如何进行基本的配置. ubuntu Server 12.04 apt-get install snmp snmpd 安装完成之后还要安装snmp-mibs-downloader ...

  2. 如何写一个漂亮的Liferay Theme 6.2

    只要你看到的.想做出来的页面,都可以通过liferay theme来实现,至于具体实现凡方式,那就见仁见智了. 下面,我将介绍如何快速地建一个简单漂亮的liferay theme. 工具:lifera ...

  3. 我教女朋友学编程Html系列(6)—Html常用表单控件

    做过网页的人都知道,html表单控件十分重要.基本上我们注册会员.登录用户,都需要填写用户名.密码,那些框框都是表单控件. 本来今天就想写一些常用的html表单控件,于是开始搜资料,找到了一个网页,作 ...

  4. 转载—“Cache-control”常见的取值有private、no-cache、max-age、must-revalidate等

    转载自http://www.cnblogs.com/igin/archive/2008/05/04/1181056.html 网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常 ...

  5. HDU 5800 To My Girlfriend 背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5800 To My Girlfriend Time Limit: 2000/2000 MS (Java ...

  6. EF:Invalid column name 'Discriminator'.

    错误信息: InnerException: System.Data.SqlClient.SqlExceptionHResult=-2146232060Message=Invalid column na ...

  7. 设计模式之代理模式(Proxy)

    只能指针是代理模式的一种: 智能指针实现需要注意的问题: 1.构造函数指明显示构造. 2.拷贝构造函数,先断开前一个指针,然后用之前指针的值初始化现在的指针. 3.赋值函数需要先断开之前的指针,然后释 ...

  8. Java获取项目中的路径 分类: Java Game 2014-08-14 10:17 122人阅读 评论(0) 收藏

    在项目中经常需要获取某个文件的路径: 在这里提供一些获取路径的方法.. 1.此种方式获取的路径,是当前类所在的路径: UserDAOTest.class.getResource("UserD ...

  9. asp.net中实现群发邮件功能

    前段时间在帮老师开发的网站中需要用到一个群发邮件的功能,而自己之前学习cms系统的时候用的we7的群发邮件功能也有一些问题,于是乎便自己去网上查了一下资料,自己总结了一下,并且封装成了一个类,亲测有用 ...

  10. CSS自定义文件上传按钮

    今天一同事问我文件上传按钮的问题,情况是这样的,他页面上有3个按钮,分为左中右三个,左边的位按钮甲,右边的位按钮乙,而中间的就是个文件选择按钮,情况大概是这个样子的: 两边的按钮都有了样式,但中间的选 ...