跳到主要内容
用 Python 学 AI:一份分阶段的自学指南 | 极客日志
Python AI 算法
用 Python 学 AI:一份分阶段的自学指南 一份面向零基础或初学者的 Python 与 AI 自学路线,按阶段拆解学习目标、核心技能与代码示例。从 Python 基础、数据科学工具(NumPy/Pandas/可视化),到机器学习、深度学习(PyTorch 构建全连接与 CNN),再到 NLP 与大模型应用(Transformers、RAG),最后通过实战项目串联知识。每个阶段配有可直接运行的代码块,附录提供环境配置、常见问题解答与学习时间线参考,强调项目驱动与动手实践。
用 Python 学 AI:一份分阶段的自学指南
Python 是 AI 领域事实上的标准语言。根据 Stack Overflow 2024 年的调查,它在机器学习和数据科学中的使用率超过 85%。如果你打算进入这个方向,用 Python 起步基本没争议。
Python 做 AI 的几个实在优势
语法负担小 :让你更早关注算法和模型,而不是语言细节。
生态成熟 :NumPy、Pandas、PyTorch、Transformers 这些库已经成了标配。
社区答案多 :遇到问题搜一下,大概率有现成解法。
工具便利 :Jupyter / Colab 让实验和分享都很顺手。
部署也不难 :FastAPI 或 Flask 就能快速把模型包装成 API。
当前 AI 技术分布大致是这样:机器学习约占 35%,深度学习 30%,自然语言处理 15%,计算机视觉 12%,强化学习和其它占比较少。这可以作为你分配精力的一个参考。
完整的学习路径
我建议的路线分成几个阶段,每个阶段大约几周时间。如果你零编程基础,就从阶段 0 开始;有编程经验的话可以直接跳到阶段 1。
阶段 0:Python 基础 (2-4 周)
阶段 1:数据科学基础 (4-6 周)
阶段 2:机器学习 (6-8 周)
阶段 3:深度学习 (8-12 周)
阶段 4:NLP 与 LLM 应用 (6-8 周)
阶段 5:实战项目 (持续进行)
每个阶段都需要写代码,而不是光看书。下面具体拆解。
阶段 0:Python 基础
目标 :能熟练写函数、处理文件、用类组织代码,不至于在后续阶段被语法卡住。
核心知识:数据类型、if/for/while、函数(含 lambda)、面向对象、文件读写、异常处理。不用追求精通,但建议把列表推导式、字典操作和上下文管理器搞熟,这些东西后面会天天用。
几个你应该吃透的例子:
even_squares = [i ** 2 for i in range (10 ) if i % 2 == 0 ]
print (even_squares)
from collections import defaultdict
word_count =
counts = defaultdict( )
word word_count.split():
counts[word] +=
( , , encoding= ) f:
content = f.read()
"hello world hello python"
int
for
in
1
with
open
'data.txt'
'r'
'utf-8'
as
这三段代码虽然简单,但涵盖了 Python 日常编程的常见模式。这个阶段不用写大项目,每天敲几个小练习就够。
阶段 1:数据科学基础 目标 :会用 NumPy 做数组运算,用 Pandas 清洗和聚合数据,用 Matplotlib/Seaborn 画图。这几乎是所有数据相关工作的起点。
NumPy 快速上手 import numpy as np
arr = np.array([[1 , 2 , 3 ], [4 , 5 , 6 ]])
print (arr * 2 )
print (arr @ arr.T)
print (np.dot(arr, arr.T))
a = np.array([[1 , 2 , 3 ], [4 , 5 , 6 ]])
b = np.array([10 , 20 , 30 ])
print (a + b)
Pandas 数据处理 import pandas as pd
df = pd.DataFrame({
'name' : ['张三' , '李四' , '王五' , '赵六' ],
'age' : [25 , 30 , 35 , 28 ],
'city' : ['北京' , '上海' , '深圳' , '杭州' ],
'salary' : [15000 , 20000 , 25000 , 18000 ]
})
high_salary = df[df['salary' ] > 18000 ]
city_stats = df.groupby('city' ).agg({'salary' : ['mean' , 'max' , 'count' ]})
df_sorted = df.sort_values('salary' , ascending=False )
df2 = pd.DataFrame({'name' : ['张三' , '李四' ], 'department' : ['技术' , '产品' ]})
merged = pd.merge(df, df2, on='name' , how='left' )
数据可视化 import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif' ] = ['SimHei' ]
fig, axes = plt.subplots(2 , 2 , figsize=(12 , 10 ))
axes[0 , 0 ].bar(df['name' ], df['salary' ])
axes[0 , 1 ].scatter(df['age' ], df['salary' ])
city_counts = df['city' ].value_counts()
axes[1 , 0 ].pie(city_counts, labels=city_counts.index, autopct='%1.1f%%' )
axes[1 , 1 ].boxplot(df['salary' ])
plt.tight_layout()
plt.show()
这个阶段可以找几个公开数据集(比如 iris、titanic)练手,把上面的操作组合起来跑一遍。
阶段 2:机器学习 目标 :理解常见算法的原理,能用 Scikit-learn 搭建完整的分类或回归流程。不需要手推公式,但要知道什么时候用什么模型。
监督学习 :线性回归、逻辑回归、决策树、随机森林、XGBoost 等
无监督学习 :K-Means、DBSCAN、PCA 等
强化学习 :入门了解即可
线性回归完整示例 from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
np.random.seed(42 )
X = np.random.randn(1000 , 3 )
X[:, 0 ] = X[:, 0 ] * 50 + 100
X[:, 1 ] = np.abs (X[:, 1 ]) * 2 + 1
X[:, 2 ] = np.abs (X[:, 2 ]) * 10 + 1
y = X[:, 0 ] * 1000 + X[:, 1 ] * 50000 - X[:, 2 ] * 2000 + np.random.randn(1000 ) * 50000
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2 , random_state=42 )
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = LinearRegression()
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
print (f"MSE: {mean_squared_error(y_test, y_pred):.2 f} " )
print (f"R²: {r2_score(y_test, y_pred):.4 f} " )
多模型对比 from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000 , n_features=20 , random_state=42 )
models = {
'LogisticRegression' : LogisticRegression(max_iter=1000 ),
'SVM' : SVC(),
'RandomForest' : RandomForestClassifier(n_estimators=100 )
}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5 , scoring='accuracy' )
print (f"{name} : {scores.mean():.4 f} ± {scores.std():.4 f} " )
在这个阶段,重点是把数据清洗→特征工程→模型训练→评估这个循环跑通。可以参加一次 Kaggle 的入门比赛,比单看教程效果好很多。
阶段 3:深度学习 目标 :用 PyTorch 搭模型、训练、调参。建议从全连接网络做起,再接触 CNN 和简单的 Transformer。
一个基础的神经网络 import torch
import torch.nn as nn
import torch.optim as optim
class SimpleNN (nn.Module):
def __init__ (self, input_size, hidden_size, num_classes ):
super ().__init__()
self .layer1 = nn.Linear(input_size, hidden_size)
self .relu = nn.ReLU()
self .layer2 = nn.Linear(hidden_size, hidden_size // 2 )
self .layer3 = nn.Linear(hidden_size // 2 , num_classes)
self .dropout = nn.Dropout(0.2 )
def forward (self, x ):
x = self .relu(self .layer1(x))
x = self .dropout(x)
x = self .relu(self .layer2(x))
x = self .dropout(x)
x = self .layer3(x)
return x
model = SimpleNN(784 , 256 , 10 )
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001 )
inputs = torch.randn(32 , 784 )
labels = torch.randint(0 , 10 , (32 ,))
outputs = model(inputs)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
CNN 图像分类 class CNN (nn.Module):
def __init__ (self, num_classes=10 ):
super ().__init__()
self .conv1 = nn.Conv2d(1 , 32 , 3 , padding=1 )
self .bn1 = nn.BatchNorm2d(32 )
self .conv2 = nn.Conv2d(32 , 32 , 3 , padding=1 )
self .bn2 = nn.BatchNorm2d(32 )
self .pool = nn.MaxPool2d(2 , 2 )
self .fc1 = nn.Linear(32 * 14 * 14 , 256 )
self .fc2 = nn.Linear(256 , num_classes)
self .dropout = nn.Dropout(0.5 )
def forward (self, x ):
x = self .pool(torch.relu(self .bn1(self .conv1(x))))
x = self .pool(torch.relu(self .bn2(self .conv2(x))))
x = x.view(-1 , 32 * 14 * 14 )
x = torch.relu(self .fc1(x))
x = self .dropout(x)
x = self .fc2(x)
return x
自注意力的核心实现 import math
import torch.nn.functional as F
class MultiHeadAttention (nn.Module):
def __init__ (self, d_model, num_heads ):
super ().__init__()
assert d_model % num_heads == 0
self .d_k = d_model // num_heads
self .num_heads = num_heads
self .W_q = nn.Linear(d_model, d_model)
self .W_k = nn.Linear(d_model, d_model)
self .W_v = nn.Linear(d_model, d_model)
self .W_o = nn.Linear(d_model, d_model)
def scaled_dot_product_attention (self, Q, K, V, mask=None ):
scores = torch.matmul(Q, K.transpose(-2 , -1 )) / math.sqrt(self .d_k)
if mask is not None :
scores = scores.masked_fill(mask == 0 , -1e9 )
attn = F.softmax(scores, dim=-1 )
return torch.matmul(attn, V), attn
def forward (self, query, key, value, mask=None ):
batch_size = query.size(0 )
Q = self .W_q(query).view(batch_size, -1 , self .num_heads, self .d_k).transpose(1 , 2 )
K = self .W_k(key).view(batch_size, -1 , self .num_heads, self .d_k).transpose(1 , 2 )
V = self .W_v(value).view(batch_size, -1 , self .num_heads, self .d_k).transpose(1 , 2 )
out, _ = self .scaled_dot_product_attention(Q, K, V, mask)
out = out.transpose(1 , 2 ).contiguous().view(batch_size, -1 , d_model)
return self .W_o(out)
这个阶段比较耗时,但别被劝退。一开始可以先跑通官方示例,再慢慢改结构、加些自己的数据。
阶段 4:NLP 与 LLM 应用 目标 :会调 Transformers 库里的预训练模型,能自己搭一个简单的 RAG 问答系统。
直接使用预训练模型 from transformers import pipeline
classifier = pipeline("sentiment-analysis" , model="distilbert-base-uncased-finetuned-sst-2-english" )
texts = ["I love this product!" , "This is terrible." ]
for text, result in zip (texts, classifier(texts)):
print (f"{text} -> {result['label' ]} ({result['score' ]:.2 f} )" )
RAG 检索增强生成 from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
documents = TextLoader('knowledge_base.txt' ).load()
splits = RecursiveCharacterTextSplitter(chunk_size=500 , chunk_overlap=50 ).split_documents(documents)
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" )
vectorstore = FAISS.from_documents(splits, embeddings)
qa = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0 ),
chain_type="stuff" ,
retriever=vectorstore.as_retriever(search_kwargs={"k" : 3 })
)
result = qa.run("如何办理社保卡?" )
print (result)
现在很多公司都在把 LLM 与实际业务结合,这个方向值得多花时间。可以从简单的文档问答做起,再慢慢引入 Agent 和工具调用。
阶段 5:实战项目 以下是一个典型项目的目录结构,可以帮助你保持工程思维:
智能文档问答系统
├── data/
│ ├── documents/
│ └── vectorstore/
├── src/
│ ├── config.py
│ ├── loader.py
│ ├── embeddings.py
│ ├── retriever.py
│ ├── generator.py
│ └── api.py
├── app.py
├── requirements.txt
└── README.md
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title="智能文档问答系统" )
class QueryRequest (BaseModel ):
question: str
top_k: int = 3
@app.post("/query" )
async def query (request: QueryRequest ):
return {"answer" : "示例回答" , "sources" : ["doc1" , "doc2" ]}
建议每个阶段都做一个对应的项目。可以从简单的房价预测(一两天就能跑通)开始,再到图像分类、情感分析,最后尝试把 RAG 或对话机器人部署上线。
一个端到端的机器学习项目(完整流程) 下面这个例子几乎涵盖了特征工程、模型训练、评估、可视化的所有步骤。你可以把它当作一个模板来改造。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score, roc_curve
plt.rcParams['font.sans-serif' ] = ['SimHei' ]
np.random.seed(42 )
n_samples = 5000
df = pd.DataFrame({
'年龄' : np.random.randint(18 , 70 , n_samples),
'收入' : np.random.randint(3000 , 50000 , n_samples),
'存款' : np.random.randint(0 , 1000000 , n_samples),
'债务' : np.random.randint(0 , 500000 , n_samples),
'信用评分' : np.random.randint(300 , 850 , n_samples),
'已购买产品数' : np.random.randint(0 , 10 , n_samples),
'上次购买天数' : np.random.randint(30 , 3650 , n_samples),
'职业' : np.random.choice(['学生' , '上班族' , '个体户' , '退休' , '自由职业' ], n_samples),
'婚姻状况' : np.random.choice(['单身' , '已婚' , '离异' ], n_samples),
'学历' : np.random.choice(['高中' , '本科' , '硕士' , '博士' ], n_samples),
})
def calc_purchase_prob (row ):
score = 0
if 25 <= row['年龄' ] <= 55 : score += 20
if row['收入' ] > 15000 : score += 20
if row['存款' ] > 100000 : score += 20
if row['信用评分' ] > 650 : score += 15
if row['职业' ] in ['上班族' , '个体户' ]: score += 15
np.random.seed(int (row['年龄' ] + row['收入' ]))
return min (score + np.random.randint(-10 , 10 ), 100 ) / 100
df['购买概率' ] = df.apply(calc_purchase_prob, axis=1 )
df['是否购买' ] = (df['购买概率' ] > 0.5 ).astype(int )
le = LabelEncoder()
df['职业编码' ] = le.fit_transform(df['职业' ])
df['婚姻编码' ] = le.fit_transform(df['婚姻状况' ])
df['学历编码' ] = le.fit_transform(df['学历' ])
df['债务收入比' ] = df['债务' ] / (df['收入' ] * 12 + 1 )
df['存款收入比' ] = df['存款' ] / (df['收入' ] * 12 + 1 )
feature_cols = ['年龄' , '收入' , '存款' , '债务' , '信用评分' , '已购买产品数' ,
'上次购买天数' , '职业编码' , '婚姻编码' , '学历编码' ,
'债务收入比' , '存款收入比' ]
X = df[feature_cols]
y = df['是否购买' ]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2 , random_state=42 , stratify=y)
models = {
'逻辑回归' : LogisticRegression(max_iter=1000 ),
'随机森林' : RandomForestClassifier(n_estimators=100 ),
'梯度提升' : GradientBoostingClassifier()
}
for name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1 ]
print (f"{name} : Acc {model.score(X_test, y_test):.4 f} , AUC {roc_auc_score(y_test, y_proba):.4 f} " )
rf = models['随机森林' ]
importances = pd.DataFrame({'feature' : feature_cols, 'importance' : rf.feature_importances_})
importances = importances.sort_values('importance' , ascending=False )
plt.figure(figsize=(10 , 6 ))
plt.barh(importances['feature' ], importances['importance' ])
plt.tight_layout()
plt.show()
这个例子用的都是模拟数据,但流程和真实任务几乎一样。你可以换成自己手头的数据,感受一下。
资源推荐 课程 / 平台 适合阶段 难度 Andrew Ng 机器学习(Coursera) 入门 中 深度学习专项课程(吴恩达) 阶段 2-3 中高 李宏毅机器学习 中级 中高 Fast.ai 实战深度学习 实战导向 高 极客时间 Python 进阶 阶段 0-1 低
《Python 编程:从入门到实践》、《流畅的 Python》
《利用 Python 进行数据分析》
《机器学习》(西瓜书)、《统计学习方法》
《动手学深度学习》
Transformer 相关论文和博客
开发:Jupyter Lab, VS Code, Colab
数据处理:NumPy, Pandas, Polars
机器学习:Scikit-learn, XGBoost, LightGBM
深度学习:PyTorch, Transformers, LangChain
部署:FastAPI, Docker, Gradio
常见问题 没编程基础能学吗?
可以。Python 对新手友好,先花几周把基础语法和文件操作弄熟,然后直接进入数据分析,边做边补课。
数学不好怎么办?
用到了再补。初期只需要知道导数、矩阵乘法和概率分布的基本含义,不会的搜一下,完全够用。当你需要优化模型时自然会深入。
多久能找到工作?
因人而异。每天抽 2-3 小时,坚持 8-12 个月,并积累 2-3 个能拿得出手的项目,大概率能拿到初级 AI 工程师的面试机会。经验远比证书重要。
GPU 不够用?
免费方案:Google Colab 提供 T4 GPU,Kaggle Notebook 也有免费额度。如果训练大模型,可以先用混合精度和梯度累积减少显存占用。
如何跟上技术更新?
关注 arXiv 上的趋势论文、Hugging Face 的新模型、Twitter/X 上一些活跃研究者的动态。每月做一个小项目把新东西试一遍,比被动阅读效果好。
学习时间线(参考)
2025-01 ~ 2025-02:Python 基础,写小脚本
2025-03 ~ 2025-04:NumPy/Pandas + 数据可视化,完成第一个数据分析项目
2025-05 ~ 2025-06:机器学习理论与 Scikit-learn 实战,尝试 Kaggle
2025-07 ~ 2025-08:PyTorch 基础,搭建 CNN / Transformer
2025-09 ~ 2025-10:NLP 与 LLM 应用,做 RAG 或对话机器人
附录:环境搭建与检查清单
Python 环境一键配置
conda create -n ai_env python=3.10
conda activate ai_env
pip install numpy pandas matplotlib seaborn scikit-learn xgboost lightgbm
pip install torch torchvision torchaudio transformers langchain
pip install jupyter lab
各阶段检查清单
理解数据类型和结构
能写函数和类
会处理文件、异常
熟练用 NumPy 做数组运算
能用 Pandas 做数据清洗、分组聚合
会画折线图、直方图、散点图
了解常见机器学习算法
能用 Scikit-learn 完成分类/回归
会特征工程基础
掌握 PyTorch 基础操作
能搭建全连接、CNN 网络
理解训练循环和梯度下降
会调用 Hugging Face 预训练模型
能实现基本的 RAG 流程
了解 Agent 概念
每个阶段都动手做一个小项目,这样才能真正内化。不用等到所有都学完才开始做,从阶段 1 就可以边学边做。
以上是我整理的一份自学路线,希望能帮你少走些弯路。最重要的还是坚持写代码、多折腾,很多时候踩过的坑才是记得最牢的。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online