我对卷积神经网络(CNN)感兴趣,作为适用于使用可重新配置硬件加速的计算广泛应用的一个例子(也就是说FPGA)
为了做到这一点,我需要分析一个简单的CNN代码,我可以用它来了解它们是如何实现的,如何在每一层的发生,如何各层的输出被馈送到下一个的输入端的计算.我熟悉理论部分(http://cs231n.github.io/convolutional-networks/)
但是,我对训练CNN不感兴趣,我想要一个完整的,自包含的CNN代码,这是经过预先训练的,并且所有的权重和偏差值都是已知的.
我知道有很多CNN库,即Caffe,但问题是没有自包含的简单示例代码.即使对于最简单的Caffe示例"cpp_classification",也会调用许多库,CNN的体系结构表示为.prototxt文件,其他类型的输入如.caffemodel和.binaryproto.也调用openCV2库.有抽象层和层,不同的库一起工作以产生分类结果.
我知道需要那些抽象来生成一个"可用的"CNN实现,但对于需要学习裸机代码的硬件人来说,这太过于"无关紧要的工作".
我的问题是:任何人都可以引导我进入一个简单且独立的CNN实现,我可以从这开始吗?
我正试图在Yosemite上安装caffe,而我的C并不是最强的.这是我的错误:
Alis-MacBook-Pro:caffe ali$ make all
NVCC src/caffe/layers/absval_layer.cu
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(27): error: expected a ";"
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(29): error: inline specifier allowed on function declarations only
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(29): error: incomplete type is not allowed
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(29): error: identifier "atomic_int_least32_t" is undefined
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(29): error: identifier "pw" is undefined
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(30): error: expected a ";"
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(90): error: invalid specifier outside a class declaration
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(92): error: "this" may only be used inside a nonstatic member function
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(95): error: invalid specifier outside a class declaration
/usr/local/include/boost/smart_ptr/detail/sp_counted_base_clang.hpp(95): error: function "boost::detail::get_deleter" may not be …Run Code Online (Sandbox Code Playgroud) 我想使用带有矢量标签的caffe,而不是整数.我已经检查了一些答案,看来HDF5似乎更好.但后来我遇到了错误:
accuracy_layer.cpp:34]检查失败:
outer_num_ * inner_num_ == bottom[1]->count()(50 vs. 200)标签数量必须与预测数量匹配; 例如,如果标签轴== 1并且预测形状是(N,C,H,W),则标签计数(标签的数量)必须是N*H*W,{0,1,...,C-1}中的整数值.
HDF5创建为:
f = h5py.File('train.h5', 'w')
f.create_dataset('data', (1200, 128), dtype='f8')
f.create_dataset('label', (1200, 4), dtype='f4')
Run Code Online (Sandbox Code Playgroud)
我的网络由以下人员生成:
def net(hdf5, batch_size):
n = caffe.NetSpec()
n.data, n.label = L.HDF5Data(batch_size=batch_size, source=hdf5, ntop=2)
n.ip1 = L.InnerProduct(n.data, num_output=50, weight_filler=dict(type='xavier'))
n.relu1 = L.ReLU(n.ip1, in_place=True)
n.ip2 = L.InnerProduct(n.relu1, num_output=50, weight_filler=dict(type='xavier'))
n.relu2 = L.ReLU(n.ip2, in_place=True)
n.ip3 = L.InnerProduct(n.relu1, num_output=4, weight_filler=dict(type='xavier'))
n.accuracy = L.Accuracy(n.ip3, n.label)
n.loss = L.SoftmaxWithLoss(n.ip3, n.label)
return n.to_proto()
with open(PROJECT_HOME + 'auto_train.prototxt', 'w') as f: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Caffe上训练一个网络.我的图像大小为512x640.批量大小为1.我正在尝试实施FCN-8.
我目前在具有4GB GPU内存的Amazon EC2实例(g2.2xlarge)上运行此操作.但是当我运行求解器时,它会立即抛出错误
Run Code Online (Sandbox Code Playgroud)Check failed: error == cudaSuccess (2 vs. 0) out of memory *** Check failure stack trace: *** Aborted (core dumped)
有人可以帮助我从这里开始吗?
不同的团队使用不同的库来训练和运行神经网络(caffe,torch,theano ......).这使共享变得困难:每个库都有自己的格式来存储网络,每次要测试其他团队的工作时都必须安装新的库.
我正在寻找解决方案,使这不那么乏味: - 是否有一个首选(共享?)格式来存储神经网络? - 是否有服务或库可以帮助处理不同类型的网络/或将一种类型转换为另一种类型?
谢谢!
我在caffe中创建了一个"Python"图层"myLayer",并在网中使用它train_val.prototxt我像这样插入图层:
layer {
name: "my_py_layer"
type: "Python"
bottom: "in"
top: "out"
python_param {
module: "my_module_name"
layer: "myLayer"
}
include { phase: TRAIN } # THIS IS THE TRICKY PART!
}
Run Code Online (Sandbox Code Playgroud)
现在,我的图层只参与网络的TRAINing阶段,
我怎么知道在我的图层的setup功能?
class myLayer(caffe.Layer):
def setup(self, bottom, top):
# I want to know here what is the phase?!!
...
Run Code Online (Sandbox Code Playgroud)
PS,
我在"Caffe Users"谷歌小组上发布了这个问题.如果有什么东西在那里,我会更新.
我最近在caffe的Pooling层中找到了"global_pooling"标志,但是在这里的文档(Layer Catalog) 或者这里(Pooling doxygen doc)中无法找到它.
与普通的Pool-Layer行为相比,是否有一个简单的前向解释?
machine-learning image-processing deep-learning caffe conv-neural-network
最近我一直在对一些CNN进行基准测试,包括时间,乘加操作数(MAC),参数数量和模型大小.我已经看到了一些类似的SO问题(这里和这里),在后者中,他们建议使用Netscope CNN Analyzer.这个工具允许我通过输入我的Caffe网络定义来计算我需要的大部分东西.
然而,我在论文和互联网上看到的一些架构的乘加操作的数量与Netscope输出的不匹配,而其他架构匹配.我总是将FLOP或MAC与netscope中的MACC列进行比较,但是在某些时候我忘记了一个~10倍的因素(查看下表以获取更多细节).
Architecture ---- MAC (paper/internet) ---- macc column in netscope
VGG 16 ~15.5G ~157G
GoogLeNet ~1.55G ~16G
Run Code Online (Sandbox Code Playgroud)
在Netscope中引用GoogLeNet macc编号和VGG16 macc编号.
是否有人使用该工具可以指出我在阅读Netscope输出时我正在做的错误?
在Caffe原型文本中,每个图层都包含"顶部"或"底部"参数,以指定图层之间的连接.然而,有时候,例如,"顶部"是图层本身(为什么我们必须将它链接到自身?)或者有几个"顶部"图层."顶部"和"底部"参数的确切含义以及使用它们的规则是什么?