- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了这个link创建一个名为 mask 的自定义操作。tensorflow op的主体是
def tf_mask(x, labels, epoch_, name=None): # add "labels" to the input
with ops.name_scope(name, "Mask", [x, labels, epoch_]) as name:
z = py_func(np_mask,
[x, labels, epoch_], # add "labels, epoch_" to the input list
[tf.float32],
name=name,
grad=our_grad)
z = z[0]
z.set_shape(x.get_shape())
return z
实际上几乎遵循引用的链接。但是,我遇到了这个错误:
ValueError: Num gradients 1 generated for op name: "mask/Mask"
op: "PyFunc"
input: "conv2/Relu"
input: "Placeholder_2"
input: "Placeholder_3"
attr {
key: "Tin"
value {
list {
type: DT_FLOAT
type: DT_FLOAT
type: DT_FLOAT
}
}
}
attr {
key: "Tout"
value {
list {
type: DT_FLOAT
}
}
}
attr {
key: "_gradient_op_type"
value {
s: "PyFuncGrad302636"
}
}
attr {
key: "token"
value {
s: "pyfunc_0"
}
}
do not match num inputs 3
如果需要,这就是我定义 our_grad
函数来计算梯度的方式。
def our_grad(cus_op, grad):
"""Compute gradients of our custom operation.
Args:
param cus_op: our custom op tf_mask
param grad: the previous gradients before the operation
Returns:
gradient that can be sent down to next layer in back propagation
it's an n-tuple, where n is the number of arguments of the operation
"""
x = cus_op.inputs[0]
labels = cus_op.inputs[1]
epoch_ = cus_op.inputs[2]
n_gr1 = tf_d_mask(x)
n_gr2 = tf_gradient2(x, labels, epoch_)
return tf.multiply(grad, n_gr1) + n_gr2
和 py_func
函数(与引用的链接相同)
def py_func(func, inp, tout, stateful=True, name=None, grad=None):
"""
I omitted the introduction to parameters that are not of interest
:param func: a numpy function
:param inp: input tensors
:param grad: a tensorflow function to get the gradients (used in bprop, should be able to receive previous
gradients and send gradients down.)
:return: a tensorflow op with a registered bprop method
"""
# Need to generate a unique name to avoid duplicates:
rnd_name = 'PyFuncGrad' + str(np.random.randint(0, 1000000))
tf.RegisterGradient(rnd_name)(grad)
g = tf.get_default_graph()
with g.gradient_override_map({"PyFunc": rnd_name}):
return tf.py_func(func, inp, tout, stateful=stateful, name=name)
真的需要社区的帮助!
谢谢!
最佳答案
好吧,经过一番努力,我自己解决了这个问题。
错误消息是在 tensorflow 函数 gradients_impl.py
中生成的。
def _VerifyGeneratedGradients(grads, op):
"""Verify that gradients are valid in number and type.
Args:
grads: List of generated gradients.
op: Operation for which the gradients where generated.
Raises:
ValueError: if sizes of gradients and inputs don't match.
TypeError: if type of any gradient is not valid for its input.
"""
if len(grads) != len(op.inputs):
raise ValueError("Num gradients %d generated for op %s do not match num "
"inputs %d" % (len(grads), op.node_def, len(op.inputs)))
现在我们可以看到这个错误意味着我们的操作 Mask
,我们给了它三个输入。 TensorFlow 希望我们为生成梯度 our_grad
的函数提供三个输出,每个输出 w.r.t 前向传播函数的每个输入。
请注意,实际上我们只需要第一个输入的梯度,在反向传播中将不再使用其他两个梯度,我们可以再返回两个具有正确形状的 fake_gradients
。
关于python - 值错误 : Num gradients 1 generated for op name: "mask/Mask",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382407/
我知道这是基本的,但我不确定,我哪里出错了,之前从未写过正则表达式.. 我需要从命令中获取一些输出 cmd | grep '[0-9]+:[0-9]+:[0-9]+:[0-9]+' 我需要grep一些
这个问题在这里已经有了答案: How does assignment work with list slices? [duplicate] (5 个答案) What does colon at as
我在一本 C 书中读到,对于数组 num[7],术语 num 等同于 &num[0]。这个概念对我来说很好,但是当我编写如下所示的程序时,我再次感到困惑。 #include #include int
例如,一种不好的方法是通过字符串分解: toReadableNum :: (Num a, Num b, Read b) => a -> b toReadableNum = read . show 如果
在输入文本字段中,我必须获取该值并在我的 .ts 文件中使用它。你能建议我应该使用以下哪种语法吗? 最佳答案 如果您希望在文本字段中看到的内容与变量中看到的内容之间进行同步对齐,请使用 如果您想在文
我正在研究 while 循环。我目前正在研究一个问题,要求从名为 a、b 和 c 的用户那里获取三个数字。我尝试显示 a 和 b 之间的所有数字,它们除以 c。我尝试使用“if”的想法,但没有成功。
因为这些符号,我很难用谷歌搜索。 num & 8, num >> 8 和 num >> 8 & 64 在 javascript 中是什么意思? 最佳答案 它们是 bitwise operators 关
显然,我的类型签名已关闭。从那以后我发现了原因。现在,我有兴趣了解更多关于我的错字上的 GHCI 推断签名。我试图让这段代码工作: elemNum :: (Eq a, Num b) => a -> [
我有一个程序根据定义的规则接受特定的字符串,即数字运算符编号。例如:2+4-5*9/8 上面的字符串是可以接受的。现在,当我输入类似 2+4-a 的内容时,它再次显示可接受,这是完全 Not Acce
我读到了这样一个旋转数组的解决方案 问题: public class Solution { public void rotate(int[] nums, int k) { in
一般来说,对于 int num , num++ (或 ++num ),作为读-修改-写操作,是 不是原子的 .但是我经常看到编译器,比如GCC ,为其生成以下代码( try here ): void
这个问题在这里已经有了答案: What's the difference between my ($variableName) and my $variableName in Perl? (4 个回答
如果列表中的 num 大于 0.5,我想得到 1,否则得到 0。 例如,a是一个列表 Matlab: b = (a > 0.5) Python: b = [1 if x > 0.5 else 0 fo
第4行为什么要在“-”后面加上“=”? num = 5 if num > 2: print(num) num -= 1 print(num) 最佳答案 num - 1:产生num减一的
iex> num = [9] '\t' 分配单个 [9] 列表返回 '\t'。这是什么原因? 最佳答案 您可以使用 i helper in IEx有关数据类型的更多信息: iex> i [9] Te
好吧,我做错了什么 - Moose 忽略了我的强制: package moo; use Moose; use Moose::Util::TypeConstraints; subtype Bar =>
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 4 年前。 我正在练习编写一些代码。在练
我有声明 SELECT COUNT(*) as num_requests, ip_address FROM requests GROUP BY ip_address ORDER BY num_requ
有什么方法可以在 javascript 中编写更短的 (num>0)?num:0 吗? 原因是 num 变量还没有定义,在上面的例子中需要计算两次。 换句话说,a和b是已知的。我想写 (a>b)?(a
这个问题在这里已经有了答案: Why does 2 == [2] in JavaScript? (9 个回答) 关闭 9 年前。 这些陈述的计算结果为真是否有原因? 0 == [0]; 1 == [
我是一名优秀的程序员,十分优秀!