工程师每日刷题 -3

文章目录

  • 1、深度学习
  • 2、算法与数据结构
  • 3、编程基础

1、深度学习

问题:深度学习梯度消失与梯度爆炸现象,如何处理?

产生原因:
1、在深层网络中
2、采用了不合适的损失函数

对激活函数进行求导,如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。

解决方案:

1、预训练加微调
2、梯度剪切、权重正则(针对梯度爆炸)
3、使用不同的激活函数
4、使用batchnorm
5、使用残差结构
6、使用LSTM网络

参考链接

2、算法与数据结构

题目链接

工程师每日刷题 -3_第1张图片
暴力排序

每个数平方之后,排个序

c++

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        for (int i = 0; i < A.size(); i++) {
            A[i] *= A[i];
        }
        sort(A.begin(), A.end()); // 快速排序
        return A;
    }
};

python

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i] *= nums[i]
        nums.sort()
        return nums

3、编程基础

问题:c++11 如何有效防止内存泄漏
答: 智能指针。确保指针在离开作用域时,自动销毁动态分配的对象

智能指针 --> 讲一下 weak_ptr

weak_ptr 相对于 shared_ptr 来说,避免了两个对象相互使用一个 shared_ptr成员变量指向对方,造成循环引用,使引用计数失效,从而导致内存泄漏。

weak_ptr 的出现就是为了解决shared_ptr的循环引用的问题的。
解决办法就是将两个类中的一个成员变量改为weak_ptr对象。

特点:
1.weak_ptr 通常情况下需要跟 shared_ptr 一起使用
2.构造和析构时引用计数不增加也不会减少
3.专门用来解决两个类中 shared_ptr 相互引用而导致的内存泄露问题

参考链接

你可能感兴趣的:(工程师每日刷题,python,c++,算法)