假设我有两个后续图层,其中包含激活a1
和a2
。有没有办法拦截自动微分从第2层传播到第1层的梯度,即∂E/∂a2
?我想更改此渐变,然后将其传递给第1层。
答案 0 :(得分:5)
来自tf.train.Optimizer documentation,
在应用渐变之前处理渐变。
调用minimize()负责计算渐变并将它们应用于变量。如果要在应用渐变之前处理渐变,则可以分三步使用优化器:
使用compute_gradients()计算渐变。 根据需要处理渐变。 使用apply_gradients()应用已处理的渐变。 例如:
# Create an optimizer. opt = GradientDescentOptimizer(learning_rate=0.1) # Compute the gradients for a list of variables. grads_and_vars = opt.compute_gradients(loss, <list of variables>) # grads_and_vars is a list of tuples (gradient, variable). Do whatever you # need to the 'gradient' part, for example cap them, etc. capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] # Ask the optimizer to apply the capped gradients. opt.apply_gradients(capped_grads_and_vars)
答案 1 :(得分:2)
您可能正在寻找public class BroadcastReceiverOneSignal extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getBundleExtra("data");
try {
JSONObject customJSON = new JSONObject(extras.getString("custom"));
if(customJSON.has("a")){
String id = customJSON.getJSONObject("a").getString(Constants.ID_CORRIDA);
Intent i = new Intent(context, Activty.class);
i.putExtra(Constants.ID, id);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
。 tensorflow docs中有一个很好的例子:
tf.Graph.gradient_override_map
现实世界正在使用它here来通过量化权重在do-re-fa网络实现中传递实值梯度。