设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

你用什么方法调试深度神经网络?这里有四种简单的方式哦(2)

发布时间:2019-04-01 08:14 所属栏目:19 来源:机器之心编译
导读:对于所有时间步长 t,我们想要计算的梯度是与input_t 对应的output。下面是用 Keras 和 TensorFlow 计算这个梯度的代码示例: defgradient_output_wrt_input(model,data): #[:,2048,0]meansallusersinbatch,midpoin

对于所有时间步长 t,我们想要计算的梯度是与Δinput_t 对应的Δoutput。下面是用 Keras 和 TensorFlow 计算这个梯度的代码示例:

  1. def gradient_output_wrt_input(model, data): 
  2.   # [:, 2048, 0] means all users in batch, midpoint timestep, 0th task (diabetes) 
  3.   output_tensor = model.model.get_layer('raw_output').output[:, 2048, 0] 
  4.   # output_tensor.shape == (num_users) 
  5.  
  6.   # Average output over all users. Result is a scalar. 
  7.   output_tensor_sum = tf.reduce_mean(output_tensor) 
  8.  
  9.   inputs = model.model.inputs # (num_users x num_timesteps x num_input_channels) 
  10.   gradient_tensors = tf.gradients(output_tensor_sum, inputs) 
  11.   # gradient_tensors.shape == (num_users x num_timesteps x num_input_channels) 
  12.  
  13.   # Average over users 
  14.   gradient_tensors = tf.reduce_mean(gradient_tensors, axis=0) 
  15.   # gradient_tensors.shape == (num_timesteps x num_input_channels) 
  16.   # eg gradient_tensor[10, 0] is deriv of last output wrt 10th input heart rate 
  17.  
  18.   # Convert to Keras function 
  19.   k_gradients = K.function(inputsinputs=inputs, outputs=gradient_tensors) 
  20.  
  21.   # Apply function to dataset 
  22.   return k_gradients([data.X]) 

在上面的代码中,我们在平均池化之前,在中点时间步长 2048 处计算了输出。我们之所以使用中点而不是最后的时间步长的原因是,我们的 LSTM 单元是双向的,这意味着对一半的单元来说,4095 实际上是第一个时间步长。我们将得到的梯度进行了可视化:

Δoutput_2048 / Δinput_t

请注意我们的 y 轴是 log 尺度的。在时间步长 2048 处,与输入对应的输出梯度是 0.001。但是在时间步长 2500 处,对应的梯度小了一百万倍!通过梯度分析,我们发现这个架构无法捕捉长期依赖。

四、分析模型预测

你可能已经通过观察像 AUROC 和平均绝对误差这样的指标分析了模型预测。你还可以用更多的分析来理解模型的行为。

例如,我们好奇 DNN 是否真的用心率输入来生成预测,或者说它的学习是不是严重依赖于所提供的元数据——我们用性别、年龄这样的用户元数据来初始化 LSTM 的状态。为了理解这个,我们将模型与在元数据上训练的 logistic 回归模型做了对比。

DNN 模型接收了一周的用户数据,所以在下面的散点图中,每个点代表的是一个用户周。

这幅图验证了我们的猜想,因为预测结果并不是高度相关的。

除了进行汇总分析,查看最好和最坏的样本也是很有启发性的。对一个二分类任务而言,你需要查看最令人震惊的假阳性和假阴性(也就是预测距离标签最远的情况)。尝试鉴别损失模式,然后过滤掉在你的真阳性和真阴性中出现的这种模式。

一旦你对损失模式有了假设,就通过分层分析进行测试。例如,,如果最高损失全部来自第一代 Apple Watch,我们可以用第一代 Apple Watch 计算我们的调优集中用户集的准确率指标,并将这些指标与在剩余调优集上计算的指标进行比较。

原文链接:https://blog.cardiogr.am/4-ways-to-debug-your-deep-neural-network-e5edb14a12d7

【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

【编辑推荐】

  1. 人脸识别技术总结:从传统方法到深度学习
  2. 机器学习中如何处理不平衡数据?
  3. 机器学习的七大谣传,这都是根深蒂固的执念吧
  4. “假设”家族大起底!如何正确区分科学假设、统计假设和机器学习假设?
  5. 机器学习必学10大算法
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读