- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 this paper 中重新创建字符级 CNN并且在我需要创建 k-max 池化层的最后一步有点卡住,因为我使用的是 MXNet 但它没有这个。
An important difference is also the introduction of multiple temporal k-max pooling layers. This allows to detect the k most important features in a sentence, independent of their specific position, preserving their relative order.
然而,MXNet 确实有能力 add a new-op我一直在尝试这样做(尽管在给定过滤器和批量大小的情况下,对数据的形状有点困惑)。
传入数据的形状:
128 (min-batch) x 512 (number of filters) x 1 (height) x 125 (width)
出来的数据形状(k-max pooling,k = 7):
128 (min-batch) x 512 (number of filters) x 1 (height) x 7 (width)
到目前为止我的想法......:
class KMaxPooling(mx.operator.CustomOp):
def forward(self, is_train, req, in_data, out_data, aux):
# Desired (k=3):
# in_data = np.array([1, 2, 4, 10, 5, 3])
# out_data = [4, 10, 5]
x = in_data[0].asnumpy()
idx = x.argsort()[-k:]
idx.sort(axis=0)
y = x[idx]
但是,我不确定几件事:
我从其他人那里为 keras 找到了这个示例(但没有代表链接):
import numpy as np
import theano.tensor as T
from keras.layers.core import MaskedLayer
class KMaxPooling(MaskedLayer):
def __init__(self, pooling_size):
super(MaskedLayer, self).__init__()
self.pooling_size = pooling_size
self.input = T.tensor3()
def get_output_mask(self, train=False):
return None
def get_output(self, train=False):
data = self.get_input(train)
mask = self.get_input_mask(train)
if mask is None:
mask = T.sum(T.ones_like(data), axis=-1)
mask = mask.dimshuffle(0, 1, "x")
masked_data = T.switch(T.eq(mask, 0), -np.inf, data)
result = masked_data[T.arange(masked_data.shape[0]).dimshuffle(0, "x", "x"),
T.sort(T.argsort(masked_data, axis=1)[:, -self.pooling_size:, :], axis=1),
T.arange(masked_data.shape[2]).dimshuffle("x", "x", 0)]
最佳答案
事实上,到目前为止,Mxnet 中还没有 KMaxPooling 支持,实现起来可能很棘手。但是,如果您决定实现它,我可以想出一些可以帮助您的提示:
如果您使用 Gluon,那么您可以将 KMaxPooling 实现为 HybridBlock,然后使用 HybridSequential运行它。只要您使用提供的函数作为参数“F”-backend(避免使用 numpy),您就可以在 GPU 上运行您的代码。所以,你不需要做 C++。
仅使用“F”后端的 HybridBlock 和函数也将解决反向传播的问题。您基本上不需要编写它,因为 Autograd 会为您完成。
使用 HybridBlock,您可以更轻松地调试代码。您只是不调用 net.hybridize() 方法,您会得到“nd”-backend,它比“sym”-backend 慢,但允许您使用调试器。
关于维度,如果您注意到 Gluon 中有不同版本的 MaxPool block :MaxPool1D、MaxPool2D、MaxPool3D。您只能为您的案例实现 1 个 KMaxPool1D。然后,您将堆叠 KMaxPool1D 的输出,就像应用了多个过滤器一样,本质上是将值添加到“z”维度的末尾。
希望对您有所帮助。
关于Python KMax 池化 (MXNet),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216640/
我可以使用诸如 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 模型收敛到任何东西时遇到一些问题:它似乎接近其初始权重。 一个工作示例(尽管我今天一直在努力让许多这样的模型工作)。我已经尝试了下面的方法,使用了一系列纪元(最
我是一名优秀的程序员,十分优秀!