这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
今天扒了2道好未来的面试题,还算比较常见且经典的题。
1.讲讲dropout原理
Dropout目标:缓解过拟合、减少收敛时间
Dropout原理可以总结位:网络前向传播的时,某个神经元的激活值以一定的概率值p停止工作,这样可以使网络不太依赖某些局部特征,可以使模型泛化性更强;
P:表示丢弃概率,即使神经元失活的概率;为了保证训练和测试时神经元数量分布一致,有两种模式:upscale_in_train'和'downscale_in_infer'
upscale_in_train: 在训练时增大输出结果。
train: out = input * mask / ( 1.0 - p )
inference: out = input
downscale_in_infer:在预测时减小输出结果
train: out = input * mask
inference: out = input * (1.0 - p)
复制代码
举例说明:比如网络共有10个可训练参数,训练时,丢弃概率设置为0.2,那么有8个参数训练。但是测试时不使用Dropout就会有10个参数,为保证两者相等,可以训练时保留的8个神经元权重乘以1/(1-0.2)=8或者测试时所有神经元权重参数乘0.8(10*0.8=8).
2.算法题:判断是否是平衡二叉树
平衡二叉树定义:二叉树每个节点的左右子树高度差不超过1;
思路:平衡二叉树满足根节点及其子节点都是平衡二叉树,所以需要递归计算每个节点左右子树的高度,然后判断高度差是否不超过1;参考代码如下:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
if not root : return True
result = abs(self.getHeight(root.right) - self.getHeight(root.left)) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)
return result
def getHeight(self, root: TreeNode):
if not root: return 0
return max(self.getHeight(root.left), self.getHeight(root.right)) + 1
复制代码