0%

2018年8月19日 下午7:31

多线程并发的使用、学习与测试_慕课手记

  1. 就这一方面而言,对于开发者及学过并发的学员,平时开发中需要掌握的主要包括
    • 先说涉及最多的。看到static修饰的变量时,能想到涉及到多线程资源共享。如果是可变的,需要注意变化中的线程安全;如果是不可变的,需要知道如何保证其不可变,而不是简单的放在那,当前代码没有修改他就认为他是不变的。
    • 看到final、单例等定义时,能分析出是否是线程安全的。
    • 在看到集合、Map等结果时候时,知道该选什么类更适合,以及什么时候适合使用并发类,什么时候适合使用普通的类,这里本质上有对线程封闭的理解。
      • 其实就是容器的使用
    • 在遇到SimpleDateFormat等线程不安全的类时,能知道相关的并发风险点
    • 在需要完成一些大任务时,知道如何借助线程池等进行提速,以及借助AQS相关组件进行一些线程的调度
    • 知道常用的线程安全手段,能根据场景去分析是否需要加锁来保证线程安全。
  2. 继续谈多线程的使用。之前介绍的是我们不得不处理的多线程,接下来介绍主动创建的多线程的使用,即我们在代码里主动使用多线程去处理一些业务。
    • 提速,充分利用CPU:这个理解起来应该比较容易,同一个任务,多个线程同时处理,让很多处理并行,达到更快完成的目的。这里介绍的一个场景,之前项目做大发布,要清洗历史数据(比如要根据id取出某一行,并计算某个值填进去),由于数据量很大,单线程清洗可能要1个小时左右,为了能尽快完成,不影响发布的时间,因此我们把单线程改为10个线程并行,测试发现10个线程还是有些慢,后来调整为20个线程同时处理,这样最终在3min左右完成。
    • 降速,协调资源的使用:刚说完提速,这里又说降速,许多人可能会很奇怪。这里举具体例子来说明一下,比如项目里要发短信,目前有第三方的限制是并发量最多10条,而每天高峰期时段同一时刻需要发送的短信量可能远高于10条,这时怎么办呢?就可以在发短信时引入线程池及多线程池处理,通过semaphore等控制同时发短信的线程不超过10,这样就起到了降速的作用。
    • 异步处理,解耦。通常我们在做一个业务实现时,都有主流程和次流程之分,比如我们用户下单时,同时还要完成记录核心日志(核心的日志可能要记录的数据库中)以及通知用户下单完成等非核心业务,这些非核心的业务在处理时,有时可能会很耗时,出任何错还不能让主流程失败,出错了还需要重试慢慢完成,这种的就可以开启新的线程去处理,异步解耦,让主流程快速完成并返回。当然,也不能无限制的开启新线程,放在线程池里控制更好。
    • 许多人不知道如何使用多线程,希望这几点总结能让加深你的理解。关于多线程的使用,在什么场景该使用什么场景不该使用不是背下来的,而是需要结合实际场景分析,是否需要进行提速、降速、异步处理等,如此才能在工作中较好的使用多线程。

2018年8月19日 下午6:58

正确理解物理公式的物理意义

  1. 物理概念定义式的物理意义 != 数学意义
    1. 也就是说你不能仅仅通过数学公式,就判断两个物理量之间的物理关系。eg.正比、反比等
  2. 数学意义的物理公式的解,不一定都有物理意义
  3. 总结:一个公式,结果等,同时要有物理意义和数学意义。要从这两个角度去思考

2018年8月19日 下午6:57

浅谈物理公式中_的意义_百度文库

  1. “=”最基本的意义是表明等式两边的物理量在数值上相等,即纯粹的数学意义
  2. 反映不同物理量之间相互依赖关系的,类似于数学中自变量与因变量之间的函数关系
  3. 反映的是与物理量的定义密切相关
    1. 不是一种因果关系,是一种认为的定义关系。

2018年8月19日 下午4:42

奇异值分解(SVD) - 简书

  1. 矩阵分解就是把一个大矩阵分解成易于处理的形式,这种形式可能是两个或多个矩阵的乘积,就如同我们在代数中的因子分解。这种因子分解在数学里便于我们计算,赋予现实的含义,给一个真实的应用背景,就能方便我们解决生活中遇到的问题。
  2. 奇异值是我生活的经验映射在数学空间的一种体现,来自于数学角度的解释,是巧合也是必然

2018年8月19日 下午3:54

2015 ACM/ICPC合肥网赛&HDU5491 The Next - CSDN博客

这个程序中对for-if同时要处理三种情况:使用了continue+break。

  1. 主要是学习这个for-if的复杂处理
  2. 这道题一个数组有两个要求,我一开始没有利用好a<L<b这个条件,既然有那就肯定有用,不用感觉都不对。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    const int maxn = 55;
    int T,a,b,num[maxn],sum[maxn],cases = 0;
    long long n,t;
    int main(){
    scanf("%d",&T);
    while(T--){
    memset(num,0,sizeof(num));
    memset(sum,0,sizeof(sum));
    scanf("%lld%d%d",&n,&a,&b);
    t=n;
    int all = 0,pos = 0;
    while(t){
    if(t&1) all++,num[pos]=1;
    t>>=1;pos++;
    }
    sum[pos-1]=num[pos-1];
    for(int i=pos-2;i>=0;i--)
    sum[i]=sum[i+1]+num[i];//这里我省了+

    for(int i=0;i<=pos;i++){
    if(!num[i]){
    int tempall = sum[i]+1;
    if(tempall>b) continue;//for-if中第一层处理:>b的情况
    long long ans = 0;
    int post = 0;
    while(tempall<a){//for-if中第二层处理:<b的情况
    ans += pow(2,post);
    post++;
    tempall++;
    }
    ans+=pow(2,i);
    for(int j=i+1;j<pos;j++)//for-if中第三层处理:我们要找最小的数,处理够了break就行了
    ans += num[j]*pow(2,j);
    printf("Case #%d: %lld\n",++cases,ans);
    break;
    }
    }
    }
    return 0;
    }

2018年8月17日 下午3:52

全连接层的作用是什么? - 胡孟的回答 - 知乎

https://www.zhihu.com/question/41037974/answer/150585634

  1. 最后总结就是,卷积神经网络中全连接层的设计,属于人们在传统特征提取+分类思维下的一种”迁移学习”思想,
  2. 但在这种end-to-end的模型中,其用于分类的功能其实是被弱化了,而全连接层参数过多的缺点也激励着人们设计出更好的模型替代之达到更好的效果。同时,也将促进我们更深入地探讨其中的奥秘。

深入理解卷积层,全连接层的作用意义 - CSDN博客

  1. 也是按着特征提取+分类思维去分析问题
  2. 这种理解方式就是感觉,其实不能说是从分类的角度去思考,而是从组合的角度去思考
  3. 我是觉得这种理解方法让人觉得符合人的直觉,让人容易接受。但是需要注意的是:从这只猫进入程序之后,他就变成一堆数字了,站在计算机的角度,他是不知道胳膊腿的,知道无穷的数字。这让我想起来向世明老师对深度学习的总结:他的确是不好理解,但是深度学习他学习的是一种映射关系,他是在积累这些映射关系,他学习的并不是猫长啥样。人是对颜色和位置关系敏感的,但是计算机只对数字敏感。

理解:

  1. ::卷积是对特征的提取,池化是对特征的选择,全连接是对特征的展开::,将立体变成条形码,进行一的组合,并且还可以输入到softmax中

2018年8月16日 下午3:06

安装Anaconda 5.2 + tensorflow 1.9

  1. 下载Anaconda5.2.0(64位或32位)Anaconda Python/R Distribution - Anaconda
  2. 安装Anaconda5.2.0(一路确定即可)
  3. 打开Anaconda prompt,然后执行pip list 查看已安装的包
  4. 如果你只有CPU,请执行:pip install tensorflow
  5. 如果你有GPU,请参考:
    1. Win10 x64 + CUDA 10.0 + cuDNN v7.5 + TensorFlow GPU 1.13 安装指南
    2. Win10 64 位Tensorflow-gpu安装(VS2017+CUDA9.2+cuDNN7.1.4+python3.6.5) - wwtor的博客 - CSDN博客
  6. 安装cuda+cudnn+tensorflow时请特别注意,第一个小版本号(小数点后第一位)一定不能错!!
  7. 验证一下:Python环境下直接import tensorflow,若没有报错,则安装正确。
  8. 下载pycharm社区版

TensorFlow最简教程

  1. 使用图 (graph) 来表示计算任务.
  2. 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
  3. 使用 张量(tensor) 表示数据.
  4. 通过 变量 (Variable) 维护状态.
  5. 使用 feed 和 fetch 可以为任意的操作赋值或者从其中获取数据

用jupyter和pycharm分别验证TensorFlow小程序

import tensorflow as tf

创建2个矩阵,前者1行2列,后者2行1列,然后矩阵相乘:

1
2
3
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2], [2]])
product = tf.matmul(matrix1,matrix2)

上边的操作是定义图,然后用会话Session去计算:

1
2
3
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)

安装opencv 3.4

  1. pip install opencv-python
  2. 如果发现安装特别慢,且报read time out 错,可参考更改pip源至国内镜像,显著提升下载速度 - L瑜 - CSDN博客,建立一个国内的映像。
  3. 如果还是经常掉线,可试一下:pip —default-timeout=100 install opencv-python

验证opencv小程序

1
2
3
4
5
6
7
8
9
10
#导入cv模块
import cv2 as cv
#读取图像,支持 bmp、jpg、png、tiff 等常用格式
img = cv.imread(“C:\Users\czh\Desktop\lena.jpg”)
#创建窗口并显示图像
cv.namedWindow(“Image”)
cv.imshow(“Image”,img)
cv.waitKey(0)
#释放窗口
cv.destroyAllWindows()

2018年8月16日 下午2:26

  1. 我现在越来越觉得机器学习+深度学习+CV等中的各种巧妙的方法,很多都是凭空来的,你并无法从原始的问题,通过一步步的论证,最后推导出这个解法。大部分的解法都是直接给你,让后做个实验,发现这个方法可以解决我们的问题,所以就是一个好的方法。深度学习就饱受这种问题的困扰,没想到科研中很多都是这样。
  2. 如果说的好听点的话,那可以说是借鉴与其他领域的概念,或者是多个概念方法的相互融合的结果。但是按这么说的话,也回答不了:到底是谁借鉴谁的?
  3. 也许科研之路就是一个不断融合借鉴的过程,在这个过程中遇到问题解决问题,然后不断的尝试,有可能就会提出新的概念和方法。
  4. 所以说,一定不要着急,慢慢的稳住脚步一步步的走

2018年8月16日 下午1:43

注: 2020年3月2日 下午6:35 这里的总结主要看: 知识点(概念汇总-2018),总结的比较详细

深度学习相关

网络结构:

全连接层的第一层的作用-第一层全连接层来源
卷积核是深度学习自己学习出来的-卷积核是学出来的
三维立方体卷积核-三维卷积核
四维卷积的运算法则-四维卷积运算
卷积层输入输出的尺寸-卷积层输入输出的尺寸
TensorFlow strides 参数讨论-代码-strides作用
激活函数在神经网络中理解-激活函数缘由

优化求解

梯度下降=学习步长=学习率-ada(SGD问题)
神经网络(深度学习)中如何训练一条边的权重的-单边权重求解-梯度消失对结果的影响
Softmax可以从两个角度去理解-softmax
交叉熵损失函数和均方误差损失函数-交叉熵是一种损失函数
求loss最小值为啥求导数不行?-梯度下降的缘由

理解

来从数学角度分析-神经网络到深度学习的演进
ML和DL能代替的对象-【将度量问题转化为ML_DL】
广义机器学习的整体架构-【阶段总结】
深度学习和机器学习的不同
神经网络难理解的原因以及理解的方法-神经网络理解

训练

训练完之后如何使用? ==> 网络如何训练?
一个数据,对一个数据的训练流程-代码
batch和全数据集训练的不同-代码-batch
第五课神经网络的程序总结+训练数据的批次-代码-批次batch

数学、基础知识

HSL和HSV色彩空间
好的方法从哪里来?
Haar小波的四中表现形式
频率图像的理解
傅里叶分析之掐死教程(完整版)

环境:

windows中深度学习(GPU版)环境安装
开发环境配置文档