我正在考虑实现一个接受两个输入图像和一个标签(后来可能是其他数据)的Caffe CNN,并且想知道是否有人知道prototxt文件中的正确语法是为了做到这一点?它只是一个带有额外顶部的IMAGE_DATA图层吗?或者我应该为每个使用单独的IMAGE_DATA图层?
谢谢,詹姆斯
有谁知道Caffe是否存在一个漂亮的LSTM模块?我在russel91的github帐户中找到了一个,但显然包含示例和解释的网页消失了(以前http://apollo.deepmatter.io/ - >它现在只重定向到github页面,不再有例子或解释).
neural-network deep-learning caffe lstm recurrent-neural-network
我想我们可能能够编译一些执行多类别分类的方法的含咖啡因的描述.
通过多类别分类,我的意思是:输入数据包含多个模型输出类别的表示和/或简单地在多个模型输出类别下可分类.
例如,包含猫和狗的图像将为猫和狗预测类别输出(理想地)~1,对于所有其他类别输出~0.
基于这篇论文,这个陈旧而封闭的PR和这个开放的公关,似乎caffe完全有能力接受标签.它是否正确?
这种网络的构建是否需要使用多个神经元(内积 - > relu - >内积)和softmax层,如本文第13页所述 ; 或者Caffe的ip&softmax目前是否支持多种标签尺寸?
当我将标签传递给网络时,示例将说明正确的方法(如果不是两者)?:
例如猫吃苹果注意:Python语法,但我使用c ++源代码.
第0列 - 类输入; 第1列 - 类不在输入中
[[1,0], # Apple
[0,1], # Baseball
[1,0], # Cat
[0,1]] # Dog
Run Code Online (Sandbox Code Playgroud)
要么
第0列 - 类在输入中
[[1], # Apple
[0], # Baseball
[1], # Cat
[0]] # Dog
Run Code Online (Sandbox Code Playgroud)如果有什么不清楚,请告诉我,我将生成我想问的问题的图片示例.
我正在努力训练一个非常大的模型.因此,我只能将非常小的批量大小放入GPU内存中.使用小批量大小会产生非常嘈杂的梯度估计.
我该怎么做才能避免这个问题?
machine-learning neural-network gradient-descent deep-learning caffe
我从头开始训练GoogLeNet模型.但它没有给我带来有希望的结果.
作为替代方案,我想在我的数据集上对GoogLeNet模型进行微调.有谁知道我应该遵循哪些步骤?
machine-learning computer-vision neural-network deep-learning caffe
在张量流函数tf.nn.conv2d中,填充选项只有'SAME'和'VALID'.
但是在Caffe的conv层中,有pad选项可以定义要(隐式)添加到输入的每一侧的像素数.
如何在Tensorflow中实现这一目标?
非常感谢你.
我在我的机器上安装了Anaconda Python.当我启动Python解释器并在Python shell中键入"import caffe"时,我收到以下错误:
ImportError: No module named google.protobuf.internal
Run Code Online (Sandbox Code Playgroud)
我有以下文件:
wire_format_lite_inl.h
wire_format_lite.h
wire_format.h
unknown_field_set.h
text_format.h
service.h
repeated_field.h
reflection_ops.h
message_lite.h
message.h
generated_message_util.h
extension_set.h
descriptor.proto
descriptor.h
generated_message_reflection.h
generated_enum_reflection.h
dynamic_message.h
descriptor.pb.h
descriptor_database.h
Run Code Online (Sandbox Code Playgroud)
我需要哪些文件才能导入?是否需要"internal.h"文件?
当在训练期间遇到困难时(nans,损失不会收敛等),通过debug_info: true在'solver.prototxt'文件中设置来查看更详细的训练日志有时是有用的.
然后训练日志看起来像:
Run Code Online (Sandbox Code Playgroud)I1109 ...] [Forward] Layer data, top blob data data: 0.343971 I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037 I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114 I1109 ...] [Forward] Layer conv1, param blob 1 data: 0 I1109 ...] [Forward] Layer relu1, top blob conv1 data: 0.0337982 I1109 ...] [Forward] Layer conv2, top blob conv2 data: 0.0249297 I1109 ...] [Forward] Layer conv2, param blob 0 …
machine-learning neural-network gradient-descent deep-learning caffe
我想设计一个卷积神经网络,占用GPU资源不超过Alexnet.我想用FLOP来测量它但我不知道如何计算它.有什么工具可以做到吗?
在caffe中,该convolution图层采用一个底部blob,并将其与学习过滤器(使用权重类型初始化 - "Xavier","MSRA"等)进行卷积.但是,我的问题是我们是否可以简单地卷入两个底部blob并产生一个顶部blob.这样做最优雅的方式是什么?这样做的目的是:其中一个底部blob将是data另一个将是一个动态过滤器(根据data前所未有的变化)(我正在尝试实现动态卷积).
我的尝试:
我想到的一种方法是修改filler.hpp并将底部blob指定为filler矩阵本身(而不是"Xavier","MSRA"等).然后我认为卷积层会从那里拾取.我们可以设置lr = 0为表示不应更改由我们的自定义填充程序初始化的权重.但是,在我查看源代码后,我仍然不知道该怎么做.另一方面,我不想打破caffe的工作流程.如果我想要它们,我仍然希望转换层正常运行.
显然,一个比较繁琐的方法是使用的组合Slice,tile和/或Scale层字面上实施卷积.我认为它会起作用,但结果会很混乱.还有其他想法吗?
编辑1:
我通过修改caffe的卷积层写了一个新图层.特别地src/caffe/layers/conv_layer.cpp,在第27行,它采用由其定义的权重filler并将其与底部blob卷积.因此filler,我修改了图层,使其现在需要两个底部,而不是从中填充该blob .其中一个底部直接分配给填充符.现在我不得不做一些其他改动,例如:
weightblob对于所有样本具有相同的值.对于不同的样本,它将具有不同的值.所以我改变了第32行:this->forward_cpu_gemm(
bottom_data + n * this->bottom_dim_,
weight,
top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)
至:
this->forward_cpu_gemm(
bottom_data + n * bottom[1]->count(1),
bottom[0]->cpu_data() + n * bottom[0]->count(1),
top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)
为了方便起见,我假设没有涉及偏见项,步幅总是1,填充总是0,组总是1等等.但是,当我测试前向传球时,它给了我一些奇怪的答案(带一个简单的卷积内核= np.ones((1,1,3,3)).这个内核的学习率设置为零,这样它就不会改变.但是,我无法得到正确答案.任何建议都将受到赞赏.
请不要使用现有的层来提出解决方案Slice, Eltwise, Crop.我已经实现了 - 它的工作原理 - 但它复杂且内存效率低得令人难以置信.