Caffe2:ubuntuKylin17.04使用Caffe2.LSTM
一早发现caffe2的较成熟的release版发布了(the first production-ready release),那么深度学习平台在之后一段时间也是会出现其与tensorflow相互竞争的局面。
从打开这个caffe2的官网就会发现,有了Facebook的支持,连界面也好看多了。不过再仔细看看,觉得又和tensorflow有一丝像,从内到外。
类似于TensorFlow的构建,Caffe2默认包含了LSTM单元,即可以基于Caffe构建RNN和LSTM网络,用于处理变长模式识别问题。
参考文章链接:caffe2 安装与介绍
文章:DNN结构演进History—LSTM_NNhttp://blog.csdn.net/wishchin/article/details/4242 5087
Caffe Vs. Caffe2
Caffe2 中基本计算单元之一是 Operators。每个 Operator 包含给定适当数量和类型的输入和参数来计算输出所需的逻辑。Caffe 和 Caffe2 功能的总体差异如下图所示:
One of basic units of computation in Caffe2 are the Operators. Each operator contains the logic necessary to compute the output given the appropriate number and types of inputs and parameters. The overall difference between operators’ functionality in Caffe and Caffe2 is illustrated in the following graphic, respectively:
看到这段话,是不是更觉得像是tensorflow了?之前layer的概念被弱化,数据与操作完全分开,不就是tensorflow里面需要定义的tf.matmul
和tf.Variable
这类吗?
其次提出的workspace
概念很像是tf中的Session:
# Create the input data data = np.random.rand(16, 100).astype(np.float32) # Create labels for the data as integers [0, 9]. label = (np.random.rand(16) * 10).astype(np.int32) workspace.FeedBlob("data", data) workspace.FeedBlob("label", label) # Create model using a model helper m = cnn.CNNModelHelper(name="my first net") fc_1 = m.FC("data", "fc1", dim_in=100, dim_out=10) pred = m.Sigmoid(fc_1, "pred") [softmax, loss] = m.SoftmaxWithLoss([pred, "label"], ["softmax", "loss"])
网络的编写也向tf靠拢了(学了点tf还是有点用的)。
最后还要说一点就是对Python的支持大大增强了,当然这也是深度学习的趋势。
..........................................
安装测试:
安装测试成功.......................可以运行。
问题:
不能使用GPU
在Eclipse中运行测试用例
写个代码段:
#-*- coding:utf-8 -*- from caffe2.python import workspace, model_helper,cnn import numpy as np def testFirst(): data_dim = 1000 label_dim = 10 print("Build Net") # Create the input data data = np.random.rand(label_dim, data_dim).astype(np.float32) # Create labels for the data as integers [0, 9]. label = (np.random.rand(label_dim) * 10).astype(np.int32) workspace.FeedBlob("data", data) workspace.FeedBlob("label", label) # Create model using a model helper m = cnn.CNNModelHelper(name="my first net") fc_1 = m.FC("data", "fc1", dim_in=data_dim, dim_out=10) pred = m.Sigmoid(fc_1, "pred") [softmax, loss] = m.SoftmaxWithLoss([pred, "label"], ["softmax", "loss"]) m.AddGradientOperators([loss]) workspace.RunNetOnce(m.param_init_net) workspace.CreateNet(m.net) # Run 100 x 10 iterations print("Start to Train........................................................") for j in range(0, 10): data = np.random.rand(label_dim, data_dim).astype(np.float32) label = (np.random.rand(label_dim) * 10).astype(np.int32) workspace.FeedBlob("data", data) workspace.FeedBlob("label", label) workspace.RunNet(m.name, 10) # run for 10 times print("%d:%f"%(j, workspace.FetchBlob("loss"))) print("End Training!!!!!!!!!")
运行结果:
import sys; print('%s %s' % (sys.executable or sys.platform, sys.version)) Python 2.7.13 (default, Jan 19 2017, 14:48:08) Type "copyright", "credits" or "license" for more information. IPython 5.4.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. /usr/bin/python2.7 2.7.13 (default, Jan 19 2017, 14:48:08) [GCC 6.3.0 20170118] PyDev console: using IPython 5.4.1 >>import Caffe2First as cf WARNING:root:This caffe2 python run does not have GPU support. Will run in CPU only mode. WARNING:root:Debug message: No module named caffe2_pybind11_state_gpu >>cf.testFirst() Build Net Start to Train........................................................ 0:2.322352 1:2.244581 2:2.401595 3:2.267505 4:2.369389 5:2.369020 6:2.342272 7:2.354734 8:2.265224 9:2.275712 End Training!!!!!!!!! >>
使用Caffe2的Model
Caffe2给出了三个Model:https://caffe2.ai/docs/tutorials。分别是RNN,使用内部LSTM实现;数据存储创建文件;resnet50训练器,是一个50层的残差网络,可以使用GPU进行并行训练。
There are example scripts that can be found in /caffe2/python/examples that are also great resources for starting off on a project using Caffe2.
- char_rnn.py: generate a recurrent convolution neural network that will sample text that you input and randomly generate text of a similar style. The RNN and LSTM page has further info on this script’s usage.
- lmdb_create_example.py: create an lmdb database of random image data and labels that can be used a skeleton to write your own data import
- resnet50_trainer.py: parallelized multi-GPU distributed trainer for Resnet 50. Can be used to train on imagenet data, for example. TheSynchronous SGD page has further info on this script’s usage.