- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 MXNet 中编写 C++ 自定义运算符,但无法找到有关何时在运算符调用中设置 kAddTo
的文档。作为一个最小的例子,假设我的新运算符称为 foo()
,我想执行以下计算:
A = mx.sym.Variable('A')
B = mx.sym.Variable('B')
T = mx.sym.foo(A)
T += mx.sym.foo(B)
一般来说,我如何确保上面的第四行累积到 T 中,而不是为 mx.sym.foo(B)
的结果创建一个新的临时存储然后执行 T = T + temp
计算?
(使用 Kernighan-Ritchie 调试器,又名打印语句,我发现 kWriteTo
在第三行和第四行都设置了。枚举 kAddTo
永远不会设置。)
关于我的具体问题的更多细节:在我当前的实现中,foo()
清零 输出内存,然后执行计算并用适当的值填充它。我绝对只想在创建新输出位置时执行此清零,而不是在累积到现有位置时。
更新
离线,同事建议使用
mx.sym.elemwise_add(lhs=T, rhs=mx.sym.foo(B), out=T)
代替上面的第 4 行。但是,我仍然看到 kWriteTo
在两行计算中都被设置了。然后我收到了以下回复:
“Memory planning and inplace operations are automatic. It will be done automatically. Users don’t need to worry about it.”, which probably means that
req[0]
is not an accurate indicator in this case. If you want to verify whether it’s an inplace addTo, you can print out the value ofoutputs[0].dptr_
andlhs.dptr_
to see whether they are equal.
我还没有检查过这个。
最佳答案
Operator 无法控制它将以何种模式执行。问题是,只有图优化器知道使用运算符的上下文,并且可以决定运算符是否需要在 kWriteTo
或 kAddTo
中执行。更准确地说,这发生了 here in the method DetectInplaceAddTo .即使在某些情况下它已在 kAddTo
中执行,但由于优化计算图的逻辑发生变化,此行为将来可能会发生变化。
“Memory planning and inplace operations are automatic. It will be done automatically. Users don’t need to worry about it.”
这意味着运算符无法控制它在哪种模式下执行,但是运算符必须严格遵守已请求的模式(kWriteTo
或kAddTo
)。例如,如果模式是 kWriteTo
并且运算符(operator)试图将差异添加到输出,而不是覆盖其中的内容,这将导致不可预测的结果,因为输出可能填充有垃圾。另一方面,如果模式是 kAddTo
但是运算符不支持它,情况可能会更糟,因为它不会将结果添加到输出中,而是会覆盖输出(通常是这样的情况很难调试)。这有时会导致像 this one 这样的错误。 .
所以,简而言之:
In general, how do I ensure that the fourth line above accumulates into T as opposed to creating a new temporary storage for the result of mx.sym.foo(B) and then performing the T = T + temp calculation?
你不能,这不是运营商决定在哪种模式下执行。即使配置在 MXNet 的 future 版本中使用模式 kAddTo
。同样在未来,可能会创建新的 API 来向图形优化器(或建议)发送提示以使用特定模式。但我不知道有这样的发展。
现在的问题是:“在哪种特定情况下 MXNet 0.10/0.11 将使用 kAddTo
”?
这很棘手,通过查看 following code :
for (uint32_t nid = 0; nid < idx.num_nodes(); ++nid) {
const auto& inode = idx[nid];
if (inode.source->op() != ewise_plus_op) continue; // <= HERE
int sid = storage_id[idx.entry_id(inode.inputs[0])];
看起来 kAddTo
只在 _grad_add
期间使用,这很可悲。这也可能是一个错误,因为也许不是:
static const Op* ewise_plus_op = Op::Get("_grad_add");
实际意图是:
static const Op* ewise_plus_op = Op::Get("elemwise_add");
关于mxnet - 自定义 MXNet 运算符和 kAddTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44959694/
我可以使用诸如 FullyConnected 之类的预构建高级函数来创建模型。 .例如: X = mx.sym.Variable('data') P = mx.sym.FullyConnected(
在 numpy 中,可以使用 np.append() 将元素附加到数组。 尽管 numpy 和 mxnet 数组应该是相似的,但 NDArray 类中没有append() 函数。 更新(18/04/2
在 numpy 中,可以使用 np.append() 将元素附加到数组。 尽管 numpy 和 mxnet 数组应该是相似的,但 NDArray 类中没有append() 函数。 更新(18/04/2
据我们所知,mxnet中有multiplegpu的概念,当在命令中指定-gpu时。如果我们不指定gpu,它将在cpu上运行。它运行多少个cpu?可以指定吗多个 CPU? 最佳答案 您可以通过以下代码使
我正在 MXNet 中编写 C++ 自定义运算符,但无法找到有关何时在运算符调用中设置 kAddTo 的文档。作为一个最小的例子,假设我的新运算符称为 foo(),我想执行以下计算: A = mx.s
如何在 MXNET 中创建自定义损失函数?例如,我不想计算一个标签的交叉熵损失(使用标准 mx.sym.SoftmaxOutput 层计算交叉熵损失并返回一个可以作为损失符号传递给拟合函数的符号),而
我有数百万张图像可供推断。我知道如何编写自己的代码来创建批处理并将批处理转发到使用 MxNet Module API 训练过的网络为了得到预测。然而,创建批处理会导致大量未特别优化的数据操作。 在自己
我正在了解 Mxnet 框架。在关注此 Linear Regression article 时我看到以下代码正在创建一个密集层: net = gluon.nn.Dense(1, in_units=2)
由于没有分步指南来学习如何使用 mxnet 来训练图像分类模型或提高已经存在的模型的准确性,例如,我有 5 个类 iamges,我想训练一个模型可以很好地将这5类东西分类。另外,mxnet 指南找不到
在 MXNet 中,如果我想创建一个权重向量来乘以每个输入,即具有 w*x_i 然后反向传播权重 w 我将如何做这个? 我试过: y_hat = input w1 = mx.sym.Variabl
升级到 MXNet 0.11.0 后,我的旧代码中出现奇怪的错误: 使用 scikit-learn 的波士顿住房数据集: data = mx.sym.Variable("data") y = mx.s
Guon mxnet 教程中的简单示例对于我们这些刚刚开始使用 mxnet 的人来说非常有帮助。到目前为止,还没有一个简单的模型并行示例。我看到 LSTM 的模型并行性示例代码,但我是 mxnet 的
我如何找到 MXNet 符号中保存的实际数值。 假设我有, x = mx.sym.Variable('x') y = mx.sym.Variable('y') z = x + y, 如果 x = [1
我正在使用 MXnet 来训练 CNN(在 R 中),我可以使用以下代码训练模型而不会出现任何错误: model <- mx.model.FeedForward.create(symbol=netwo
TensorFlow 对象检测 API 更喜欢 TFRecord 文件格式。 MXNet 和 Amazon Sagemaker 似乎使用 RecordIO 格式。这两种二进制文件格式有何不同,或者它们
我正在尝试使用其C++ API在Mxnet中实现自定义损失函数。损失函数的问题在python(how to use customized loss function with mxnet?)中已经提出
我无法使用 mxnet 获得合理的性能LinearRegressionOutput层。 下面的独立示例尝试对一个简单的多项式函数 (y = x1 + x2^2 + x3^3) 执行回归,并引入少量随机
在我的问题中,我有一个包含 n 元素的向量。给定窗口大小 k,我想有效地创建一个包含带状对角线的矩阵大小 n x 2k+1。例如: a = [a_1, a_2, a_3, a_4] k = 1 b =
我正在尝试实现mxnet教程in this page ,在计算梯度体面时: def SGD(params, lr): for param in params: param[:] = param
预先感谢您的帮助。 我在让 mxnet 模型收敛到任何东西时遇到一些问题:它似乎接近其初始权重。 一个工作示例(尽管我今天一直在努力让许多这样的模型工作)。我已经尝试了下面的方法,使用了一系列纪元(最
我是一名优秀的程序员,十分优秀!