Skip to content

Commit

Permalink
add doc/learning-python-in-5-days.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wu-wenxiang committed Aug 4, 2024
1 parent f5aa8d2 commit 4cc8121
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 31 deletions.
Binary file added doc/images/chaopingmian.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/nn-demo-dog.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/nn-demo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/perception-fat-model.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/perception.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/images/xianxing-feixianxing.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions doc/learning-python-in-5-days.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Python 5 日进阶

## 课程目录

| 日程 | 时间 | 课程 | 内容 |
| ----- | -- | ---------------- | --------------------------------------------------- |
| 第 1 天 | 上午 | [1. 基础原理](#1-基础) | [1.1 Python 开发环境最佳实践](#11-简介) |
| | | | [1.2 变量和对象](#12-开发环境搭建) |
| | | | [1.3 数字和字符串](#13-变量和对象) |
| | | | [1.4 序列和散列](#14-基本对象类型) |
| | 下午 | | [1.5 函数和高阶函数](#21-函数和高阶函数) |
| | | | [1.6 文件和生成器](#21-函数和高阶函数) |
| | | | [1.7 模块和打包](#21-函数和高阶函数) |
| | | | [1.8 类和实例](#21-函数和高阶函数) |
| 第 2 天 | 上午 | [2. 开发进阶](#2-进阶) | [2.1 自动化测试](#22-类和实例) |
| | | | [2.2 并行计算](#36-使用-ai-工具快速生成代码) |
| | | | [2.3 开发规范](#23-正则表达式) |
| | | | [2.4 异步框架](#24-异常处理) |
| | 下午 | [3. 数据处理]() | [3.1 数据爬取](#53-设计模式实践) |
| | | | [3.2 科学计算](#611-命令行参数) |
| | | | [3.3 机器学习](#63-文件和目录) |
| | | | [3.4 数据分析](#65-数据库和-orm) |
| 第 3 天 | 上午 | | [3.5 案例:客户价值模型](python-exec-public.py#L1483) |
| | | [4. 人工智能]() | [4.1 感知机理论](#42-restful-api) |
| | | | [4.2 神经网络基础](#42-restful-api) |
| | | | [4.3 卷积神经网络基础(选讲)](#42-restful-api) |
| | | | [4.4 Transform 大模型基础(选讲)](#42-restful-api) |
| | 下午 | | [4.5 Pytorch](#42-restful-api) |
| | | | [4.6 面向 GPU 编程](#42-restful-api) |
| | | | [4.7 大模型 Agent](#42-restful-api) |
| | | | [4.8 大模型推理应用](#42-restful-api) |
| 第四天 | 上午 | [5. Web 开发](#-web-开发) | [5.1 Web 开发原理](#31-版本控制) |
| | | | [5.1 MVC 模式和 Flask 框架](#41-mvc-框架) |
| | | | [5.2 ORM 模型](#42-restful-api) |
| | | | [5.3 Django 架构介绍和项目构建](autotest.md) |
| | 下午 | | [5.4 Django 路由和视图函数](#43-服务部署) |
| | | | [5.5 Django 模型](automation.md#23-ansible-基础) |
| | | | [5.6 Django 管理界面](#54-数据分析) |
| 第 5 天 | 上午 | | [5.6 Django 模板和表单](#54-数据分析) |
| | | | [5.7 Django 静态文件和自动化部署](http://blog.wuwenxiang.net/Machine-Learning) |
| | | | [5.8 Django Restful API](#324-pdb-调试) |
| | | | [5.9 后端任务管理](#612-部署不同的-python-版本) |
| | 下午 | | [5.10 Ajax 和前后端分离](#35-模块和打包) |
| | | | [5.11 前端框架入门](#613-其它系统相关类库) |
| | | | [5.12 FastAPI 和 OpenAPI(Swagger)](#62-父子进程调用) |
184 changes: 153 additions & 31 deletions doc/we-know-python.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,47 @@

| 日程 | 时间 | 课程 | 内容 |
| ----- | -- | ---------------- | --------------------------------------------------- |
| 第 1 天 | 上午 | [基础](#1-基础) | [1.1 简介](#11-简介) |
| | | | [1.2 开发环境搭建](#12-开发环境搭建) |
| | | | [1.3 变量和对象](#13-变量和对象) |
| | 下午 | | [1.4 基本对象类型](#14-基本对象类型) |
| | | | [2.1 函数和高阶函数](#21-函数和高阶函数) |
| 第 2 天 | 上午 | [进阶](#2-进阶) | [2.2 类和实例](#22-类和实例) |
| | | | [3.6 使用 AI 工具快速生成代码](#36-使用-ai-工具快速生成代码) |
| | 下午 | | [2.3 正则表达式](#23-正则表达式) |
| | | | [2.4 异常处理](#24-异常处理) |
| | | | [5.3 设计模式实践](#53-设计模式实践) |
| 第 3 天 | 上午 | 应用 | [6.1.1 命令行参数](#611-命令行参数) |
| | | | [6.3 文件和目录](#63-文件和目录) |
| | | | [6.5 数据库对接和 ORM 模型](#65-数据库和-orm) |
| | | | [数据采集](python-exec-public.py#L1483) |
| | 下午 | [Web](#4-web-开发) | [3.1 Git 和 GitOps 运维脚本](#31-版本控制) |
| | | | [4.1 MVC 框架](#41-mvc-框架) |
| | | | [4.2 Restful API](#42-restful-api) |
| | | | [自动化测试](autotest.md) |
| | | | [4.3 服务部署](#43-服务部署) |
| | | | [自动化运维](automation.md#23-ansible-基础) |
| 第 4 天 | 上午 | | [5.4 数据分析](#54-数据分析) |
| | | | [机器学习](http://blog.wuwenxiang.net/Machine-Learning) |
| | 下午 | | [3.2.4 没有 IDE 时的调试技巧](#324-pdb-调试) |
| | | | [3.2.4 应用部署的依赖隔离](#612-部署不同的-python-版本) |
| | | | [3.5 模块和发布](#35-模块和打包) |
| | | | [6.1.3 常用标准库和三方库](#613-其它系统相关类库) |
| | | | [6.2 父子进程调用](#62-父子进程调用) |
| | | | [6.4 并行计算](#64-并行计算) |
| 第 1 天 | 上午 | [基础原理](#1-基础) | [1.2 开发环境搭建](#12-开发环境搭建) |
| | | | [1.3 变量和对象](#13-变量和对象) |
| | | | [1.4 基本对象类型](#14-基本对象类型) |
| | | | [1.4.6 序列和散列](#146-序列和散列) |
| | 下午 | | [2.1 函数和高阶函数](#21-函数和高阶函数) |
| | | | [6.3 文件和目录](#63-文件和目录) |
| | | | [5.3.2 迭代器和生成器](#532-迭代器和生成器) |
| | | | [3.5 模块和打包](#35-模块和打包) |
| | | | [2.2 类和实例](#22-类和实例) |
| 第 2 天 | 上午 | [开发进阶](#3-开发相关) | [3.2 自动化测试](#32-自动化测试) |
| | | | [6.2 父子进程调用](#62-父子进程调用) |
| | | | [6.4 并行计算](#64-并行计算) |
| | | | [3.4 开发规范](#34-开发规范) |
| | | | [异步框架]() |
| | 下午 | [数据处理](#54-数据分析) | [数据爬取](python-exec-public.py#L1483) |
| | | | [5.4.1 科学计算](#541-numpy) |
| | | | [5.4.5 机器学习](#545-sklearn) |
| | | | [5.4.6 数据分析](#546-机器学习和数据分析) |
| 第 3 天 | 上午 | | [5.4.7 数据分析案例:客户价值模型](#547-数据分析-demo) |
| | | [人工智能](#7-人工智能) | [7.1 感知机理论](#71-感知机理论) |
| | | | [7.2 神经网络基础](#72-神经网络基础) |
| | | | [7.3 卷积神经网络基础(选讲)](#73-卷积神经网络基础选讲) |
| | | | [7.4 Transform 大模型基础(选讲)](#74-transform-大模型基础选讲) |
| | 下午 | | [7.5 Pytorch](#75-pytorch) |
| | | | [7.6 面向 GPU 编程](#76-面向-gpu-编程i) |
| | | | [7.7 大模型 Agent](#77-大模型-agent) |
| | | | [7.8 大模型推理应用](#78-大模型推理应用) |
| 第四天 | 上午 | [Web 开发](#4-web-开发) | [4.1 Web 开发原理](#41-mvc-框架) |
| | | | [Flask 框架]() |
| | | | [6.5 数据库和 ORM](#65-数据库和-orm) |
| | | | [4.1 Django 架构介绍和项目构建](#41-mvc-框架) |
| | 下午 | | Django 路由和视图函数 |
| | | | Django 模型 |
| | | | Django 管理界面 |
| 第 5 天 | 上午 | | Django 模板和表单 |
| | | | Django 静态文件和自动化部署 |
| | | | [4.2 Django Restful API](#42-restful-api) |
| | | | [后端任务管理]() |
| | 下午 | | [Ajax 和前后端分离]() |
| | | | [前端框架入门]() |
| | | | [FastAPI 和 OpenAPI(Swagger)]() |

## 1. 基础

Expand Down Expand Up @@ -165,6 +178,13 @@
> ![](images/vscode-run.png)
扩展

1. VSCode 远程开发调试技巧。一个远程开发环境(Linux),多个笔记本连上去开发。
2. 有 IDE 时如何单步调试?
3. [没有 IDE 时如何进行调试?](#324-pdb-调试)
4. [使用 AI 辅助编码](#36-使用-ai-工具快速生成代码)

#### 1.2.4 Python 体系结构

Python 虚拟机
Expand Down Expand Up @@ -2942,10 +2962,14 @@ Windows: `pip install -i https://pypi.tuna.tsinghua.edu.cn/simple msvc-runtime`

参考:[练习题](/doc/python-exec-public.py#L2608)

数据分析 Demo:
#### 5.4.6 机器学习和数据分析

<http://blog.wuwenxiang.net/Machine-Learning>

- [价值分析模型](/src/data-analysis/air-customer)
- [情绪分析模型](/src/data-analysis/sentiment-analysis)
#### 5.4.7 数据分析 Demo

1. [价值分析模型](/src/data-analysis/air-customer)
2. [情绪分析模型](/src/data-analysis/sentiment-analysis)

## 6. 系统相关

Expand Down Expand Up @@ -3227,3 +3251,101 @@ aProcess.start() # run
### 6.5 数据库和 ORM

[参考](python-exec-public.py#L1670-2011)

## 7. 人工智能

### 7.1 感知机理论

#### 7.1.1 线性模型和非线性模型

**线性模型**:线性模型假设数据之间的关系是线性的,也就是说,数据的输出随着输入的增加或减少按比例变化。在数学表示上,如果两个变量 x 和 y 满足 `y=ax+b` 的关系(其中 a 和 b 是常数),那么这种关系就是线性的。线性模型的一个重要特性是,它满足叠加原理,即多个输入同时作用于系统的响应等于各个输入单独作用于系统的响应之和。这种模型的特性使其在许多领域中都非常有用,如回归分析、时间序列分析和经济预测等。

**非线性模型**:与线性模型相反,非线性模型描述的关系不是线性的。这意味着数据的输出不按固定的比例变化,可能随着输入的增加或减少而发生非线性的变化。在数学表示上,如果关系不能表示为 `y=ax+b` 的形式,那么它就是非线性的。非线性模型的一个重要特性是,它不满足叠加原理。尽管非线性模型的应用不如线性模型广泛,但在某些特定情况下,如生物医学研究、金融预测和环境科学等,非线性模型是非常重要的。

![](images/xianxing-feixianxing.jpeg)

在实际应用中,选择使用线性模型还是非线性模型取决于数据的特性和问题的性质。如果数据之间的关系大致呈线性关系,那么使用线性模型可能更为合适。如果数据之间的关系是非线性的,那么使用非线性模型可能更为合适。在某些情况下,即使数据之间的关系是线性的,也可以选择使用非线性模型来捕捉更多的动态或提高模型的预测精度。

总的来说,线性模型和非线性模型都是重要的工具,用于理解和预测不同类型的数据关系。选择合适的模型需要考虑数据的性质、模型的适用性和预测的准确性等多方面的因素。

#### 7.1.2 单层感知机

感知机是**线性模型**,只能处理二分类的问题,而且只能进行**线性划分**。比如现在有一个数据集只有身高和体重这二个属性,那么感知机的目的是找出一条分界线,来区分胖瘦。

![](images/perception-fat-model.png)

单层感知机可被抽象为下图所示模型:

![](images/perception.png)

一个神经元接收到来自 n 个其它神经元的输入信号;对这些输入信号,通过带权值的连接进行计算(各个连接线的权值与对应输入值相乘,然后进行累加),然后判断计算出来的累加值是否超过阈值(Threshold);若等于或超过阈值,则输出 y 为 1,表示该神经元激活,否则输出 y 为 -1 表示该神经元抑制。

激活函数一定时非线性的,如果是线性的,那么多层感知机就没有意义。

这里可以引入**超平面**的概念来从解析几何的角度理解感知机。超平面指的是比所处空间少一个维度的子空间。

1. 0 维的点可以把 1 维的线分成两部分
2. 1 维的线可以把 2 维的面分成两部分
3. 2 维的面可以把 3 维的体分成两部分
4. 以此类推,n-1 维的子空间可以把 n 维空间分成两部分

超平面就是这个 n-1 维子空间。类似二维**平面**切割三维**立体**空间,这里的****表示高维空间,**超平面**对应**超立体**

**这里的超平面就是“释经权”,在机器学习里先通过核函数进行升维,再分类(向量机)里也用过。**

超平面公式:`w.x + b = 0`

![](images/chaopingmian.png)

感知机公式的简化过程:

![](images/perception-gongshi.png)

#### 7.1.3 学习过程和损失函数

感知机具有的这种分离超平面的特性,可以用来对数据进行分类。过程如下:

1. 首先给定一组训练数据
2. 然后通过训练数据确定模型的参数ω、b
3. 最后用学到的模型预测新数据的类别

学习的目标就是找一个能将训练数据中正负实例都分开的超平面。可以通过最小化误分类点到平面的总距离来实现。误分类点到超平面的总距离就是**损失函数**

为了最小化损失函数,可以选用**梯度下降法**。因为梯度指向函数增加最快的方向,通过往反方向调整参数的值,就可以逐渐到达函数的最小值。这样,通过多次迭代就可以使损失函数逐渐减小,直至为0,得到最终的参数。

#### 7.1.4 感知机 Demo

参考 <https://leileiluoluo.com/posts/perceptron-python-implementation.html>

### 7.2 神经网络

神经网络是**非线性模型**,由输入层、隐藏层、输出层组成。**隐藏层由感知机组成**。输出层的节点个数可以自由的增加,输出层用于判断输入属于那个分类,每个输出层都共享同样的输入层和隐藏层。

![](images/nn-demo.png)

这里的每个节点都和下一层节点全部相连,又称为全连接网络。数据传输的方向是单向的并且一直向前传播,也叫做前馈神经网络。

卷积神经网络**不是**全连接网络,循环神经网络**不是**前馈神经网络。

神经网络如何判断一幅图片是猫是狗?

![](images/nn-demo-dog.png)

1. 想要判断输入的图片是狗还是猫,可以先看第一个特征-耳朵。假设狗的耳朵都比猫的要大,那么经过隐藏层处理之后,此时的传到输出层的权重(假设权重和为1),是狗的权重为0.9,是猫的权重为0.1,输出的结果很明显就是狗。
2. 现实情况并不只根据单一的特征很难判断出到底是哪一类,需要根据多个特征,然后得到权重之和进行判断。想要判断输入的到底是属于哪一类,可以通过增加感知机的个数,准确的判断出结果。
3. 感知机里面的线性函数可以理解成对某个类型里的标准模型的描述,比如说,我们不是要识别出狗吗,那么对这个狗的标准模型怎么描述呢?就是那个线性函数了(多少个特征向量,各自权重如何?)
4. 激活函数是判断标准,判断你给的数据到底符不符合这个标准。

神经网络经历许多次的描述+判断,使得判断的结果无限逼近于真相。

### 7.3 卷积神经网络基础(选讲)

### 7.4 Transform 大模型基础(选讲)

### 7.5 Pytorch

### 7.6 面向 GPU 编程

### 7.7 大模型 Agent

### 7.8 大模型推理应用

0 comments on commit 4cc8121

Please sign in to comment.