机器学习与TensorFlow问答精要

49、如果你的 AdaBoost 集成模型对训练数据欠拟合,应该调整哪些超参数以及如何调整?

你可以尝试增加估计器的数量或减少基估计器的正则化超参数。也可以尝试稍微提高学习率。

50、如果你的梯度提升集成模型对训练集过拟合,你应该提高还是降低学习率?

降低学习率

51、降低数据集维度的主要动机是什么?主要缺点是什么?

主要动机

  • 加快后续训练算法的速度(在某些情况下甚至可以去除噪声和冗余特征,使训练算法表现更好)
  • 可视化数据并深入了解最重要的特征
  • 节省空间(压缩)

主要缺点

  • 会丢失一些信息,可能降低后续训练算法的性能
  • 计算量可能很大
  • 会增加机器学习管道的复杂性
  • 转换后的特征通常难以解释

52、什么是维度灾难?

维度灾难

维度灾难指的是在低维空间不存在的许多问题在高维空间中会出现。

在机器学习中,一个常见表现是随机采样的高维向量通常非常稀疏,增加了过拟合的风险,并且在没有大量训练数据的情况下很难识别数据中的模式。

53、一旦数据集的维度被降低,是否可以逆转这个操作?如果可以,如何操作?如果不可以,原因是什么?

有些算法(如PCA)有简单的逆变换程序,可以重建出与原始数据集相对相似的数据集;而其他算法(如T-SNE)则不能进行逆变换。

54、如何评估数据集上降维算法的性能?

如果降维算法提供反向转换,可通过反向转换来评估。或者,若将降维作为另一个机器学习算法(如随机森林分类器)的预处理步骤,可直接衡量第二个算法的性能;若降维没有损失太多信息,该算法的表现应与使用原始数据集时一样好。

55、将两种不同的降维算法串联起来是否有意义?

有意义。常见的做法是先用主成分分析(PCA)快速去除大量无用维度,然后应用另一种速度慢得多的降维算法,如局部线性嵌入(LLE)。这种两步法可能会产生与仅使用LLE相同的性能,但耗时会大大减少。

56、创建计算图而不是直接执行计算的主要好处和缺点分别是什么?

主要好处:

  • TensorFlow 可以自动为你计算梯度(使用反向模式自动微分)
  • TensorFlow 可以处理在不同线程中并行运行操作
  • 便于在不同设备上运行相同的模型
  • 简化内省,例如在 TensorBoard 中查看模型

主要缺点:

  • 学习曲线更陡峭
  • 逐步调试更困难

57、能否在同一个会话中运行两个图?

不能,必须先将两个图合并为一个图。

58、如果你创建一个包含变量 w 的图 g,然后启动两个线程并在每个线程中打开一个会话,两个会话都使用相同的图 g,那么每个会话会有变量 w 的独立副本,还是会共享该变量?

在本地 TensorFlow 中,每个会话会有变量 w 的独立副本;在分布式 TensorFlow 中,如果两个会话连接到同一个集群并使用相同的容器,它们将共享变量 w 的值。

59、变量何时被初始化?何时被销毁?

变量在调用其初始化器时被初始化,在会话结束时被销毁。

在分布式 TensorFlow 中,变量存在于集群的容器中,关闭会话不会销毁变量,需要清除其容器来销毁变量。

60、当你运行图来评估一个依赖于占位符的操作,但没有提供占位符的值时会发生什么?如果操作不依赖于占位符又会怎样?

当运行图来评估一个依赖于占位符的操作,但没有提供占位符的值时,会抛出异常;

如果操作不依赖于占位符,则不会抛出异常。

61、当你运行一个图时,你可以馈送任何操作的输出值,还是只能馈送占位符的值?

当你运行一个图时,你可以馈送任何操作的输出值,而不只是占位符的值,但在实践中这种情况相当少见。

62、为了计算成本函数关于10个变量的梯度,反向模式自动微分需要遍历图多少次?前向模式自动微分呢?符号微分呢?

反向模式自动微分只需遍历图两次;

前向模式自动微分需要为每个变量运行一次,即计算关于10个不同变量的梯度时需要运行10次;

符号微分不会遍历原始图(除了构建新的梯度图时),一个高度优化的符号微分系统可能只需运行一次新的梯度图来计算关于所有变量的梯度,但新图可能比原始图复杂且低效。

63、使用TensorFlow实现基于小批量梯度下降的逻辑回归。在一个自定义的模拟卫星数据集上对其进行训练和评估。尝试添加以下所有功能:在一个可轻松复用的logistic_regression()函数中定义计算图。在训练期间定期使用Saver保存检查点,并在训练结束时保存最终模型。如果训练中断,在启动时恢复最后一个检查点。使用良好的作用域定义计算图,使计算图在TensorBoard中看起来美观。添加摘要以在TensorBoard中可视化学习曲线。尝试调整一些超参数,如学习率或小批量大小,并观察学习曲线的形状。

要实现小批量梯度下降,只需对现有代码稍作调整。

  1. 构建阶段
    X y 的定义改为占位符节点:

python X = tf.placeholder(tf.float32, shape=(None, n + 1), name="X") y = tf.placeholder(tf.float32, shape=(None, 1), name=

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值