吴恩达机器学习课程(第一周)

welcome

Welcome to Machine learning!(video)

机器学习在各领域的应用很多 比如搜索引擎 图像识别 垃圾邮件处理

这是一门让计算机 无需显式编程(explicitly programmed)就能自主学习的学科

在机器学习领域取得进展的最好方法 是通过一种叫做神经网络的学习算法 模拟人类大脑工作

Machine Learning Honor code(materials)

机器学习的准则

我们强烈推荐进行小组学习来讨论我们的课程(包括课程问题) 我们也鼓励你和你的朋友在小组中一起学习 当然 你需要提交的课后作业必须是你亲自完成的 在程序练习中 我们欢迎你和其他同学一起进行讨论 比如特殊的算法 算法的性能等等 我们要求你的代码编写必须是独立完成的 而且你的代码也不能给别人抄袭

关于在论坛中代码编写的准则

情景1:删除代码

学习者的问题/评论 “这有份我编了好久的代码 但结果总是错的 请帮我改改错吧”

为什么要删掉呢? 别人给你进行的简单修改 你只进行了快速的复制粘贴来获得的成绩不是靠你的努力来实现的

学习者的问题 学生总会有自己的代码习惯 特别是不好的代码习惯 比如对于变量的命名非常随意

为什么要删掉呢? 编写代码时要有良好的拼写习惯 拼写是有标准的

情景2:不需要删除代码

学生的问题: 如何对矩阵子集进行截距消除(博主未看懂 应该是个专业问题)

指导者的回答:这是可以的 特别是当你努力没有使用相似的变量名 或者说使用没有在项目中使用的环境 你可以去展示你手中有的解决这个问题的一小段代码 而不是直接复制粘贴一段代码

个人理解就是不要直接去抄代码 而是独立的发现自己的问题 去询问问题的解决方法 如果找不到问题就重新做一遍

Introducton

Welcome(video)

学习机器学习的知识 进行实践操作 运用所学算法

仅仅了解机器学习的算法和数学是不够的 你要学会如何将所学的理论知识用到你的实际问题上

Machine learning

  — Grew out of work in AI

  — New capability for computer

很多时候我们不知道如何写出一个程序来实现一些功能 比如图片识别 邮件拦截等等 这时我们就需要计算机自己学习去做这些事情

Example:

  — Database mining

    large datasets from growth of automation/web

   E.g. web click data、 medical records、 biology、 engineering

  — Applications can’t program by hand

    E.g. autonomous helicopter, handwriting recognition,most of Natural Language Processing(NLP),Computer Vision

  — Self-customizing programs(自定制化程序)

    E.g. Amazon,Netflix product recommendation

  — understanding human learning(brain, real AI)

What is Machine Learning?(video)

Machine Learning definition

  • Arthur Samuel(1959).Machine learning:Field of study that computers the ability to learn without being exxplicitly programmed.(计算机不需要进行显式编程只需自身进行学习就能获得结果的领域)

  • Tom Mitchell(1998).Well-posed Learning Problem:A computer program is said to learn from experience E with respect to some task T and some performance measure P,if its performance on T ,as measured by P, improves with experience E.(一个好的学习问题定义如下,一个计算机程序被认为可以经过学习经验E来实现任务T并达到性能度量值P,并经过性能度量值P来提高经验E使处理任务T时更高效)

Machine learning algorithms:

— Supervised learning(监督学习)

— Unsupervised learning(无监督学习)

others:Reinforcement learning(强化学习),recommender ststems(推荐系统)

Also talk about: Practical advice for applying learning algorithms

What is Machine learning?(materials)

重新展示了两种机器学习的定义,其中第一种定义并不规范。

通过国际象棋这个项目深入理解了第二个定义

开发者与计算机进行成千上万次的象棋对决 计算机通过对决的过程不断进行学习 最终下棋水平超过了开发者

E = the experience of playing many game of checkers

T = the task of playing checkers

P = the probability that program will win the next game

最后提了一下两个机器学习的算法 监督学习和无监督学习

How to Use Discussion Forums(materials)

主要讲了一下社区讨论使用,不再详细写了。

Supervised learning(video)

监督学习:给出正确的答案
回归问题:预测连续值的输出(比如价格)
分类问题:离散值的输出(比如0或1)
监督学习其基本思想是,监督学习中,对于数据集中的每一个数据,都有相应的正确答案,(训练集)算法就是基于这些来做出预测。

Supervised Learning(materials)

Unspervised Learning(voido)

在无监督学习中,没有属性或者标签的概念,所以无监督学习中只有一个数据集。
聚类算法与无监督学习被应用到很多领域。
  - Organize computering clusters
  - Social network analysis
  - Market segmentation
  - Astronmical data analysis
聚类算法是无监督学习中的一种算法
使用octive编程环境更加方便,在octive编程环境实现算法再移植到其他编程语言中。

Unsupervised Learning(materials)

Who are Mentors

Get to Know Your Classmates

Frequently Asked Questions

Review

Lecture Slides

Introduction

Linear Regression with One Variable

基于一个输入值,线性回归可以预测一个确定的输出值。我们使用线性回归来做房价的预测,介绍代价函数的概念并且介绍一下有关梯度下降的方法。

Model and Cost Function

Model Representation(此后的补充材料将和视频一起笔记,不再区分)

在这里插入图片描述

我们上节课讲到了用监督学习的方式来预测房价,具体来说应该是线性回归的方式(预测一个真实的输出值)。

我们给出了关于房价与房屋大小的数据集
其中关于一些符号的问题:
m = 训练用例的个数
x’s = 输入变量/特征值
y’s = 输出变量/目标值
(x,y) = 一个训练用例
x ( i ) , y ( i ) = i ( t h ) {x^{(i)}},{y^{(i)}=i^{(th)}} x(i),y(i)=i(th) training example

通过数据集获得公式h,将房屋大小代入公式h中即可获得预计价格。
我们如何去描述h
h θ ( x ) = θ 0 + θ 1 x {h_\theta }(x) = {\theta _0} + {\theta _1}x hθ​(x)=θ0​+θ1​x
我们现在接触的是一元线性回归也就是单变量的线性回归

Cost Function

上节课中我们就已经知道了回归函数Hypothesis: h θ ( x ) = θ 0 + θ 1 x {h_\theta }(x) = {\theta _0} + {\theta _1}x hθ​(x)=θ0​+θ1​x
其中 θ i {\theta _i} θi​就是我们的模型参数(Parameters),当我们获得了适当的模型参数,我没就能拟合出一条合适的函数图像。
那如何来求出这个模型参数呢

如何来使我们的函数图像更好的你和已有的数据呢,这时候我们就需要引入代价函数的概念(cost function)
我们获得的函数图像上的点与已有数据距离越小,也就是说预测值减去实际值越小,就说明我们的函数拟合的越好。
既 m i n i m i z e θ 0 θ 1 ( h θ ( x ( i ) ) − y ( i ) ) 2 \mathop {minimize}\limits_{{\theta _0 } { \theta _1}} {({h_\theta }({x^{(i)}}) - {y^{(i)}})^2} θ0​θ1​minimize​(hθ​(x(i))−y(i))2,其中 m i n i m i z e θ 0 θ 1 \mathop {minimize}\limits_{{\theta _0 } { \theta _1}} θ0​θ1​minimize​表示获得 θ 0 θ 1 {\theta _0 } { \theta _1} θ0​θ1​的值使得后面的函数值最小。
因此我们获得了我们所需的求合适 θ 0 θ 1 {\theta _0 } { \theta _1} θ0​θ1​值的函数,既:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J({\theta _0},{\theta _1}) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}} J(θ0​,θ1​)=2m1​i=1∑m​(hθ​(x(i))−y(i))2
这也就是我们所说的代价函数,也就是平方误差函数(squared error function),有时也被称为平方误差代价函数。
而我们的目标就是 m i n i m i z e θ 0 θ 1 J ( θ 0 , θ 1 ) \mathop {minimize}\limits_{{\theta _0}{\theta _1}} J({\theta _0},{\theta _1}) θ0​θ1​minimize​J(θ0​,θ1​)
至于代价函数,这只是其中的一种,比较适合这种线性回归的情况,以后会遇到很多不同的代价函数,而这个代价函数之所以是这个样子,在下面的课时中也会讲到。

Cost function - Intuition I

在这里我们先回顾一下上节课所学的内容,我们先讲到了hypothesis函数,在这个函数中有两个未知的模型参数(Parameters),我们的目标就是找的这个模型参数,这是我们就需要借助代价函数(cost function),目标就是找到合适的模型参数使得代价函数最小。
这节课就以一个简单的例子进行了解,我们简化一下 h θ ( x ) {h_\theta }(x) hθ​(x),我们假设 θ 0 = 0 {\theta _0} = 0 θ0​=0.

这时我们便得到了 h θ ( x ) {h_\theta }(x) hθ​(x)和 f ( θ 1 ) {f(\theta_1)} f(θ1​)两个函数,其中前者是一个关于变量x的函数,通过调整 θ {\theta} θ来获得我们想要的结果(拟合最好),这是假设我们有一个数据集{(1,1),(2,2),(3,3)},我们选定 θ 1 = 1 {\theta_1=1} θ1​=1,那么我们会发现所有测试数据都在函数图像上,这时我们的代价函数 J ( θ 1 ) = 0 {J(\theta_1)=0} J(θ1​)=0,我们在代价函数的图像上找到这个点。


我们依次假设 θ 1 {\theta_1} θ1​等于各种值,这时我们便可以画出关于代价函数的图像,我们可以大致看出这是一个抛物线,而最适合的 θ 1 {\theta_1} θ1​所取的值就在抛物线的最低端,也就是说我们所找的模型参数就在这个位置,后面我们所要讲到的梯度下降法就是因此而产生的。

Cost Function - Intuition II

上节课我们降到了一个模型参数的情况,那这节课我们就要看一下两个模型参数的情况了。

我们记得,只有一个模型参数的时候,我们得到的代价函数图像是一个抛物线,那么我们有两个模型参数的时候,代价函数是什么样的呢?

没错,是一个凹形的三维图像,我们这时只是知道这个就好了,事实上用这个图像来学习是有些麻烦的,后面我们将用到轮廓图进行理解。

轮廓图是什么东西?就是右面那张图显示的内容,我们可以理解他就像是我们初中地理学到的等高线地形图,这样是不是就好理解多了,在同一条弧线上的值都是相等的,也就是相同的代价函数的值,而越往里代价函数的值就越小,我们可以多找几个点来理解一下。



所以说,我们的目标就是找到这个最低点,这就需要借助算法来实现了,我们不可能依靠自己写程序手动输入点的方式,这太麻烦了,所以下一节就要讲到如何用算法使计算机自己去找到合适的模型参数。

Parameter Learning

Gradient Descent

这节课中我们将学习到梯度下降法来实现将代价函数取最小。梯度下降法是一种很常用的算法,它不光被用在线性回归上,还应用到机器学习领域中的众多领域。
我们用一个代价函数 J ( θ 0 , θ 1 ) {J(\theta_0,\theta_1)} J(θ0​,θ1​),我们的目标就是使得代价函数取最小值。
我们大体的一个思想是:我们先给定模型参数一个初值(一般都设置为0),然后我们不断改变这个模型参数使得代价函数取值不断减小,知道得到我们想要的最小值(也有可能是局部最小值)。
事实上,梯度下降可以解决n个模型参数的问题而不是只有两个。

其实我们可以看到,如果我们选定的初始模型参数的值不同,那么我们最后得到的结果可能也不同,这就是为什么我会说我们得到的可能是局部最小值。

下面我们就讲一下梯度下降算法

r e p e a t u n t i l c o n v e r g e n c e { θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) } \begin{array}{l} {\rm{repeat until convergence\{ }}\\ \quad{\rm{ }}{\theta _j}: = {\theta _j} - \alpha \frac{\partial }{{\partial {\theta _j}}}J({\theta _0},{\theta _1}){\rm \qquad { (for }}j = 0{\rm{ and }}j = 1{\rm{)}}\\ {\rm{\} }} \end{array} repeatuntilconvergence{θj​:=θj​−α∂θj​∂​J(θ0​,θ1​)(forj=0andj=1)}​
其中 : = {:=} :=表示赋值,这是一个赋值符号,如果只是 a = b {a=b} a=b表示等于a的值与b相等。
这里的 α \alpha α是一个数字,被称为学习速率。在梯度下降算法中他控制了我们下山时迈出了多大的步子,因此如果 α \alpha α值过大,那么我们就会大步的进行梯度下降,而如果它的值很小,我们会迈着小碎步下山。如何进行设置,我们会在后面讲到。
在这个算法中,你需要同时更新两个模型参数的值,实现方法是你需要先计算等式右边的部分,通过这一部分计算出两个模型参数的值,,然后同时更新两个模型参数的值。下面就详细讲解一下这个过程。

C o r r e c t : S i m u l t a n e o u s u p d a t e t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) θ 0 : = t e m p 0 θ 1 : = t e m p 1 \begin{array}{l} {\rm{Correct :Simultaneous update}}\\ temp0: = {\theta _0} - \alpha \frac{\partial }{{\partial {\theta _0}}}J({\theta _0},{\theta _1})\\ temp1: = {\theta _1} - \alpha \frac{\partial }{{\partial {\theta _1}}}J({\theta _0},{\theta _1})\\ {\theta _0}: = temp0\\ {\theta _1}: = temp1 \end{array} Correct:Simultaneousupdatetemp0:=θ0​−α∂θ0​∂​J(θ0​,θ1​)temp1:=θ1​−α∂θ1​∂​J(θ0​,θ1​)θ0​:=temp0θ1​:=temp1​
在梯度下降算法中,这是正确实现同时更新的方法。

Gradient Descent Intuition

在这节课中,我们会更加直观的了解梯度下降算法是做什么的,以及梯度下降算法的更新过程有什么意义。
首先把算法公式写出来。
r e p e a t u n t i l c o n v e r g e n c e { θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) } \begin{array}{l} {\rm{repeat until convergence\{ }}\\ \quad{\rm{ }}{\theta _j}: = {\theta _j} - \alpha \frac{\partial }{{\partial {\theta _j}}}J({\theta _0},{\theta _1}){\rm \qquad { (for }}j = 0{\rm{ and }}j = 1{\rm{)}}\\ {\rm{\} }} \end{array} repeatuntilconvergence{θj​:=θj​−α∂θj​∂​J(θ0​,θ1​)(forj=0andj=1)}​
这节课我们就要更加直观的理解学习速率和倒数项这两部分有什么用,以及为什么把两个部分放在一起更有意义。

为了理解上更加容易,我们还是使用只含一个模型参数的代价函数进行分析,首先我们知道,求导的意义就是求图像斜率,那么我们便可以在图像画出一条切线,那么我们使用 θ 1 {\theta_1} θ1​减去一个正数(斜率为正数也就是上面的图)就相当于让其在图像上左移。下面的图正好相反,减去一个整数是往右移。这就是求导的作用。下面讲的是学习速率 α {\alpha} α的作用。

我们先看一下如果学习速率太小会出现什么情况(上面的图),对的,如果太小他就只能迈出一小步,这会很慢。
那么如果学习速率太大呢(下面的图),他会迈出一大步,这样可能一次次的越过最低点。


在梯度下降一步后,导数的绝对值会相应的变小一些,所以下一次梯度下降的时候,会比前面下降的慢一些。
所以说,在我们接近局部最小值时,梯度下降的步伐会越来越小,所以我们不需要改变学习速率的值。

Gradient Descent For Linear Regression

在这节课中,我们会将梯度下降与代价函数相结合,并将其运用到拟合直线的项目中。
在梯度下降算法中,我们需要知道的就是偏导数到底是什么。下面就是函数的推导过程。
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j ( 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 ) = ∂ ∂ θ j ( 1 2 m ∑ i = 1 m θ 0 + θ 1 x ( i ) − y ( i ) ) 2 θ 0 : j = 0 : ∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ 1 : j = 1 : ∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \begin{array}{l} \frac{\partial }{{\partial {\theta _j}}}J({\theta _0},{\theta _1}) = \frac{\partial }{{\partial {\theta _j}}}\left( {\frac{1}{{2m}}\sum\limits_{i = 1}^m {{{\left( {{h_\theta }\left( {{x^{(i)}}} \right) - {y^{(i)}}} \right)}^2}} } \right) = \frac{\partial }{{\partial {\theta _j}}}{\left( {\frac{1}{{2m}}\sum\limits_{i = 1}^m {{\theta _0} + {\theta _1}{x^{(i)}} - {y^{(i)}}} } \right)^2}\\ {\theta _0}:j = 0:\frac{\partial }{{\partial {\theta _0}}}J({\theta _0},{\theta _1}) = \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{(i)}}} \right)} \\ {\theta _1}:j = 1:\frac{\partial }{{\partial {\theta _1}}}J({\theta _0},{\theta _1}) = \frac{1}{m}\sum\limits_{i = 1}^m {\left( {\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{(i)}}} \right) \cdot {x^{(i)}}} \right)} \end{array} ∂θj​∂​J(θ0​,θ1​)=∂θj​∂​(2m1​i=1∑m​(hθ​(x(i))−y(i))2)=∂θj​∂​(2m1​i=1∑m​θ0​+θ1​x(i)−y(i))2θ0​:j=0:∂θ0​∂​J(θ0​,θ1​)=m1​i=1∑m​(hθ​(x(i))−y(i))θ1​:j=1:∂θ1​∂​J(θ0​,θ1​)=m1​i=1∑m​((hθ​(x(i))−y(i))⋅x(i))​
下面就是对梯度下降算法的整理(同时更新两个模型参数)

G r a d i e n t d e s c e n t a l g o r i t h m r e p e a t u n t i l c o n v e r g e n c e { θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) } \begin{array}{l} {\rm{Gradient descent algorithm}}\\ {\rm{repeat until convergence\{ }}\\ {\theta _0}: = {\theta _0} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{(i)}}} \right)} \\ {\theta _0}: = {\theta _0} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {\left( {\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{(i)}}} \right) \cdot {x^{(i)}}} \right)} \\ \} \end{array} Gradientdescentalgorithmrepeatuntilconvergence{θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))θ0​:=θ0​−αm1​i=1∑m​((hθ​(x(i))−y(i))⋅x(i))}​
事实上,用于线性回归的代价函数,总是这样一个弓形的样子,这个函数的专业术语是凸函数(convex function)(貌似国内和国外的凸和凹是反的),所以这种函数是没用局部最优解的,你对这种代价函数使用线性回归,只有一个全局最优解。
事实上我们现在使用的梯度下降算法也被称为批量梯度下降(“Batch” Gradient Descent),因为我们在进行梯度下降的每一步时,所有的训练数据都在使用。

Review

Lecture Slides

Linear Regression with One Variable

吴恩达机器学习课程(第一周)相关推荐

  1. 吴恩达机器学习笔记第一周

    第一周 吴恩达机器学习笔记第一周 一. 引言(Introduction) 1.1 欢迎 1.2 机器学习是什么? 1.3 监督学习 1.4 无监督学习 二.单变量线性回归(Linear Regress ...

  2. 3. 吴恩达机器学习课程-作业3-多分类和神经网络

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 3. ...

  3. python第六周实验_机器学习 | 吴恩达机器学习第六周编程作业(Python版)

    实验指导书    下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...

  4. github标星11600+:最全的吴恩达机器学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

    吴恩达老师的机器学习课程,可以说是机器学习入门的第一课和最热门课程,我在github开源了吴恩达机器学习个人笔记,用python复现了课程作业,成为热门项目,star数达到11671+,曾经有相关报道 ...

  5. 7. 吴恩达机器学习课程-作业7-Kmeans and PCA

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 7. ...

  6. 4. 吴恩达机器学习课程-作业4-神经网络学习

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 4. ...

  7. 2.吴恩达机器学习课程-作业2-逻辑回归

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 2. ...

  8. 1. 吴恩达机器学习课程-作业1-线性回归

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 1. ...

  9. 机器学习 | 吴恩达机器学习第六周编程作业(Python版)

    实验指导书    下载密码:ovyt 本篇博客主要讲解,吴恩达机器学习第六周的编程作业,作业内容主要是实现一个正则化的线性回归算法,涉及本周讲的模型选择问题,绘制学习曲线判断高偏差/高方差问题.原始实 ...

最新文章

  1. python mongodb orm_Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD
  2. c++读取声音文件之后回音_一段程序运行之后,输出的内容就是这段程序本身。...
  3. 被上海爱立信录取,GL
  4. 历届试题 买不到的数目
  5. 设置Network id:      5777 in MetaMask
  6. 无招胜有招之Java进阶JVM(八)类加载机制
  7. tsd3dmapper软件使用方法_TOYO模组选型软件使用方法
  8. nagios配置文件说明
  9. 递归——外星密码(洛谷 P1928)
  10. UVA11532 Simple Adjacency Maximization【位运算】
  11. termux安装python2_termux怎么安装python
  12. MySQL数据库基础教程(一)-简介
  13. bfs的算法的详解(代码版)
  14. PDF文件如何旋转页面保存
  15. 微信公众号H5之微信分享常见错误和问题(the permission value is offline verifying)
  16. 星号密码查看器原理完全揭秘
  17. C#解析ip.ws.126.net的IP查询地区接口数据(使用正则表达式匹配获取所需数据)
  18. B2B支付平台市场现状研究分析-
  19. Surfer网格文件的VC读写代码​
  20. 网络性能测试中CHARIOT脚本参数配置对测试数据的影响

热门文章

  1. 【Charles】成功解决使用iOS手机抓包时,iOS手机连接网络失败Charles配置方法
  2. 一秒识破诈骗信息 360手机卫士诈骗鉴定重磅上线
  3. 全速发展的TurboMail问鼎邮件系统行业翘楚
  4. 中柏pad7安装linux,接个键盘就是电脑 中柏EZpad 7改变移动办公体验
  5. linux下现代战争游戏,在Deepin 20.2中可用Wine 6安装使命召唤4:现代战争(COD4)
  6. 学计算机名言,计算机名人名言
  7. iOS iconfont 图标字体
  8. 小福利,Python操作excel的常用方法(1)
  9. 一文告诉你,国密SM2算法有多优秀
  10. 软考是什么?软考的考试安排是什么时候?