对于所有时间步长 t,我们想要计算的梯度是与Δinput_t 对应的Δoutput。下面是用 Keras 和 TensorFlow 计算这个梯度的代码示例:
- def gradient_output_wrt_input(model, data):
- # [:, 2048, 0] means all users in batch, midpoint timestep, 0th task (diabetes)
- output_tensor = model.model.get_layer('raw_output').output[:, 2048, 0]
- # output_tensor.shape == (num_users)
-
- # Average output over all users. Result is a scalar.
- output_tensor_sum = tf.reduce_mean(output_tensor)
-
- inputs = model.model.inputs # (num_users x num_timesteps x num_input_channels)
- gradient_tensors = tf.gradients(output_tensor_sum, inputs)
- # gradient_tensors.shape == (num_users x num_timesteps x num_input_channels)
-
- # Average over users
- gradient_tensors = tf.reduce_mean(gradient_tensors, axis=0)
- # gradient_tensors.shape == (num_timesteps x num_input_channels)
- # eg gradient_tensor[10, 0] is deriv of last output wrt 10th input heart rate
-
- # Convert to Keras function
- k_gradients = K.function(inputsinputs=inputs, outputs=gradient_tensors)
-
- # Apply function to dataset
- return k_gradients([data.X])
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|