- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在咖啡中,convolution
层采用一个底部blob,并将其与学习过滤器(使用权重类型初始化 - “Xavier”、“MSRA”等)进行卷积。但是,我的问题是我们是否可以简单地卷积两个底部 Blob 并产生顶部 Blob 。这样做最优雅的方式是什么?这样做的目的是:底部 blob 之一将是 data
另一个将是由先前层产生的动态过滤器(根据 data
变化)(我正在尝试实现 dynamic convolution )。
我的尝试:
我想到的一种方法是修改 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 ,我修改了图层,使其现在需要两个底部。底部之一直接分配给填充物。现在我不得不做一些其他的改变,比如:
weight
blob 对于所有样本具有相同的值。在这里,对于不同的样本,它将具有不同的值。所以我将第 32 行从:this->forward_cpu_gemm(
bottom_data + n * this->bottom_dim_,
weight,
top_data + n * this->top_dim_);
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_);
np.ones((1,1,3,3))
。这个内核的学习率设置为零,因此它不会改变。但是,我无法得到正确的答案。任何建议将不胜感激。
Slice, Eltwise, Crop
.我已经实现了——它有效——但它非常复杂且内存效率低下。
最佳答案
我认为您总体上走在正确的道路上。
对于“奇怪”的卷积结果,我猜这个错误最有可能是:
考虑二维卷积
并假设 bottom[1]
的形状是 (num, channels, height, width)
,
由于 caffe
中的卷积执行为 2 矩阵的乘法,weight
(代表卷积核)和col_buffer
(从要卷积的数据重组)和weight
属于 num_out
行和 channels / this->group_ * kernel_h * kernel_w
列,col_buffer
属于 channels / this->group_ * kernel_h * kernel_w
行和 height_out * width_out
列,如 weight
动态卷积层的blob,bottom[0]
的形状最好是 (num, num_out, channels/group, kernel_h, kernel_w)
为了满足
bottom[0]->count(1) == num_out * channels / this->group_ * kernel_h * kernel_w
num_out
是动态卷积层输出特征图的数量。
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_);
bottom[0]->shape(0) == bottom[1]->shape(0) == num
bottom[0]->count(1) == num_out * channels / this->group_ * kernel_h * kernel_w
np.ones((1,1,3,3))
您使用的可能不满足上述条件并导致错误的卷积结果 .
include/caffe/layers/dyn_conv_layer.hpp,base_conv_layer.hpp
src/caffe/layers/dyn_conv_layer.cpp(cu)
caffe
中的卷积层增长几乎相同,区别主要有:
LayerSetUp()
初始化 this->kernel_dim_
, this->weight_offset_
等适用于卷积并忽略初始化this->blobs_
卷积层通常用于包含权重和偏差; Reshape()
检查 bottom[1]
作为内核容器具有适当的卷积形状。 src/caffe/test/test_dyn_convolution_layer.cpp
.它似乎工作正常,但可能需要更彻底的测试。
cd $CAFFE_ROOT/build && ccmake ..
建立这个 caffe ,
cmake -DBUILD_only_tests="dyn_convolution_layer" ..
和
make runtest
检查它。
关于deep-learning - 如何在caffe中卷积两个blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680318/
你能告诉我,下面两种 scss 样式之间的区别吗?我对此没有清楚的认识。 :host { display: inline-block; /deep/ { span { co
/deep/和::ng-deep 这些在 DOM 模式下也被弃用了,我想知道将来是否会有/deep/和::ng-deep 的替代方案,或者我们应该开始使用其他方式? ::ng-deep .result
长期以来,我一直在寻找这个问题的明确答案。是否有可靠且推荐的替代策略来执行此操作?此问题的不正确答案包括: Just favor ::ng-deep for now 和 if component au
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在阅读 DQN 网络上的 deepmind 自然论文。 我几乎得到了关于它的一切,除了一个。我不知道为什么以前没有人问过这个问题,但无论如何对我来说似乎有点奇怪。 我的问题: DQN 的输入是一个
我在我的新 Jetpack Compose 应用程序中设置了一个底栏,其中包含 2 个目的地。我尝试遵循 Google 的示例。 例如它看起来像这样: @Composable fun MyBottom
所以,我读过 here在 Vue.js 中,您可以在选择器中使用 /deep/ 或 >>> 来创建适用于子组件内部元素的样式规则。但是,尝试在我的样式中使用它,无论是在 SCSS 中还是在普通的旧 C
我正在尝试实现DQN和DDQN(两者都有经验回复)来解决OpenAI AI-Gym Cartpole环境。这两种方法有时都能学习并解决这个问题,但并非总是如此。 我的网络只是一个前馈网络(我尝试过使用
scss中下面两个有什么区别,在片段中给出一些例子。 :host::ng-deep .content-body { ... } 和 .content-body :host::ng-deep { ...
在我们的元素中,我们使用了 Angular Material 进行开发。我们已经覆盖了 使用::ng-deep 的 Angular Material 样式自定义 CSS 属性。 在使用::ng-dee
我尝试熟悉 Q-learning 和深度神经网络,目前尝试实现 Playing Atari with Deep Reinforcement Learning . 为了测试我的实现并尝试使用它,我坚持尝
我开始在 Vue 3 中收到以下警告 ::v-deep用法。 ::v-deep usage as a combinator has been deprecated. Use ::v-deep() in
谁能给我解释一下 df2 = df1 df2 = df1.copy() df3 = df1.copy(deep=False) 我已经尝试了所有选项并执行了以下操作: df1 = pd.DataFram
我对 PyTorch 比较陌生,但我对 Keras 和 TensorFlow 有很好的经验。我关注了这个article在我自己的训练脚本中使用 DDP。然而,出于某种原因,我总是最终得到: proce
我正在尝试为 Conv2D 和 transposeconv2D 层编写 dropconnect 代码。按照 https://pytorchnlp.readthedocs.io/en/latest/_m
我正在做一个 mask 检测项目,我使用 ultralytics/yolov5 训练了我的模型。我将训练好的模型保存为一个 onnx 文件,你可以在这里找到模型文件 model.onnx .现在我希望
我正在研究一种强化算法,我对此很陌生,并试图掌握一些东西。 Player1Env 查看 7x6 Connect4 游戏网格。我按如下方式初始化类: def __init__(self): su
我有几个嵌入矩阵,假设 E1 矩阵用于 Glove,E2 用于 Word2vec。 我想构建一个简单的情感分类器,它采用该嵌入的可训练加权和。 例如,对于单词“dog”,我想在学习 x 和 y 时得到
我正在使用它处理深度学习和医学图像分类。我使用大脑 MRI 数据并将它们转换为 jpg。然后使用 VGG16 进行训练。当我检查损失、准确性、验证损失和验证准确性时,我看到了下图。 accuracy
我设计的网络包括转置卷积层。(pytorch 中的 ConvTranspose2d) 我想获得网络的感受野大小。 感受野的概念是否也适用于转置卷积层? 如果是,那我怎样才能得到它? 最佳答案 您可以使
我是一名优秀的程序员,十分优秀!