十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python人工智能入门:从环境搭建到智能体实战的完整指南

Python人工智能入门:从环境搭建到智能体实战的完整指南 1. 从“Hello World”到“智能体”为什么Python是AI入门的首选如果你刚接触编程或者想从其他语言转向人工智能领域第一个问题往往是我该学什么十多年前我刚开始写代码时也面临过同样的选择。今天如果你打开任何一个技术社区搜索“人工智能入门”扑面而来的几乎都是Python。这背后不是偶然而是一系列技术生态和现实需求共同作用的结果。简单来说Python之于人工智能就像螺丝刀之于工具箱它不是唯一的工具但却是最趁手、最通用、最容易上手的那一把。为什么是Python我们可以从几个最实际的层面来看。首先它的语法极其接近人类的自然语言。你不需要在内存管理和指针上耗费大量精力可以把注意力集中在问题本身——也就是“如何让机器学会思考”这个核心命题上。其次Python拥有一个庞大到令人惊叹的生态系统。无论是处理数据的NumPy、Pandas还是构建神经网络的TensorFlow、PyTorch或是进行机器学习的Scikit-learn这些库都像乐高积木一样已经为你准备好了最基础的模块。你不需要从零开始造轮子而是可以站在巨人的肩膀上快速搭建出有实际价值的应用。最后社区的活跃度决定了你遇到问题时能多快找到解决方案。Python在AI领域的社区支持是全球性的这意味着几乎你踩过的每一个坑前人都已经填平并留下了路标。所以当你想用100个小例子来探索人工智能时Python几乎是唯一可行的起点。这些例子不会让你一夜之间成为专家但它们会像一张张地图带你遍历AI世界的各个关键地标从最基础的线性回归预测房价到用卷积神经网络识别猫狗图片再到用自然语言处理模型和你聊天。每一个跑通的例子都是一次正反馈告诉你“看AI并不神秘你也能做到。”接下来我们就从最核心的环境搭建开始这是所有例子的起跑线。2. 搭建你的AI实验室环境配置的“一次成功”指南很多新手在第一步——环境配置上就败下阵来被各种报错、版本冲突搞得焦头烂额。我见过太多人兴致勃勃地下载了Python安装了PyCharm然后就在“ImportError: No module named ‘numpy’”这样的错误前停滞不前。这就像你想做化学实验却连试管和烧杯都准备不对。因此一个清晰、隔离且可复现的环境是成功的一半。我强烈建议你放弃系统自带的Python也暂时忘掉那种直接pip install一切的方式。我们将采用目前业界最主流的方案Anaconda 虚拟环境。Anaconda是一个集成了Python和大量科学计算库的发行版它自带了一个强大的包管理工具Conda。Conda不仅能管理Python包还能管理包依赖的环境完美解决“在这个项目里运行得好好的换了个项目就报错”的经典难题。首先去Anaconda官网下载适合你操作系统的安装包推荐选择Python 3.9或3.10版本稳定性与兼容性兼顾。安装过程几乎一路“Next”即可但请注意勾选“Add Anaconda to my PATH environment variable”这一项这能让你在命令行中直接使用conda命令。安装完成后打开你的终端Windows上是Anaconda Prompt或CMDMac/Linux上是Terminal。我们创建一个专用于AI学习的虚拟环境。为什么不直接用基础环境因为你的学习路径可能会涉及不同版本的库比如有些老例子需要用TensorFlow 1.x而新项目则需要PyTorch 2.0。把它们混在一起迟早会出问题。在终端中输入以下命令conda create -n ai_learning python3.9这条命令创建了一个名为ai_learning、Python版本为3.9的全新虚拟环境。接下来激活它conda activate ai_learning激活后你会发现命令行提示符前面出现了(ai_learning)这表示你已进入这个沙箱环境之后所有的操作都只影响这里不会污染其他项目。现在安装我们的“AI基础三件套”pip install numpy pandas matplotlib然后根据你想学习的侧重点安装核心的AI框架。对于初学者我建议从Scikit-learn和PyTorch开始pip install scikit-learn pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu注意上述PyTorch安装命令是针对仅使用CPU的情况。如果你有NVIDIA显卡并配置好了CUDA可以去PyTorch官网生成对应的安装命令以获得GPU加速。最后一个好用的IDE能极大提升效率。VSCode是当前的首选轻量且插件生态丰富。安装VSCode后务必安装Python扩展和Jupyter扩展。这样你不仅能写传统的.py脚本还能用.ipynb格式的Jupyter Notebook来学习它允许你以代码块为单位执行和记录非常适合做实验和演示这也是很多AI教程和论文复现采用的格式。完成这些你的AI实验室就准备就绪了。3. 第一个智能体理解“智能”是如何被构建的环境准备好了让我们立刻动手打造你的第一个“人工智能体”。最近“AI Agent”这个概念非常火听起来很高深但其实它的核心思想很简单一个能感知环境、进行决策并执行动作的程序实体。我们不用一开始就追求像AutoGPT那样复杂的规划能力可以从一个经典的、有明确规则的环境开始——比如“人狗大作战”的简化版。这个例子能让你直观理解状态、动作和奖励这些强化学习的基础概念。假设我们有一个5x5的网格世界玩家“P”初始在左上角(0,0)目标“G”一块骨头在右下角(4,4)环境中随机分布着一些障碍物“X”和敌人“D”狗。玩家的目标是避开狗和障碍走到骨头的位置。这就是一个典型的智能体玩家与环境网格交互的问题。我们会用Q-learning算法这是一种基于价值的强化学习方法让智能体通过不断试错学会最优路径。首先我们定义环境。状态就是智能体所在的坐标(x, y)。动作有四个上、下、左、右。奖励规则是到达目标10撞到障碍或狗-10其他移动-0.1鼓励用更少的步数到达。Q-table是一个表格记录了在每一个状态(s)下采取每一个动作(a)所能获得的长期期望奖励。学习的过程就是不断更新这个Q-table。让我们来看核心代码。我们使用NumPy来高效处理Q-table这个矩阵。import numpy as np import random # 定义环境参数 GRID_SIZE 5 ACTIONS [up, down, left, right] # 动作空间 NUM_ACTIONS len(ACTIONS) # 初始化Q-table形状为 (GRID_SIZE, GRID_SIZE, NUM_ACTIONS) # 初始值可以设为零或一个很小的随机数鼓励探索 q_table np.zeros((GRID_SIZE, GRID_SIZE, NUM_ACTIONS)) # 超参数 ALPHA 0.1 # 学习率新知识覆盖旧知识的程度 GAMMA 0.9 # 折扣因子对未来奖励的重视程度 EPSILON 0.1 # 探索率以多大概率随机探索而非利用已知最优 # 定义奖励函数 def get_reward(state, next_state): x, y next_state # 假设我们预定义目标位置和危险位置 if (x, y) (4, 4): return 10 # 到达目标 elif (x, y) in [(1,1), (2,3), (3,2)]: # 假设这些位置是狗或障碍 return -10 else: return -0.1 # 每走一步的微小惩罚 # 状态转移函数 def move(state, action): x, y state if action 0 and x 0: # up x - 1 elif action 1 and x GRID_SIZE - 1: # down x 1 elif action 2 and y 0: # left y - 1 elif action 3 and y GRID_SIZE - 1: # right y 1 # 如果动作会导致出界则留在原地 return (x, y)接下来是核心的Q-learning更新环节。智能体在每个状态下根据ε-greedy策略选择动作以小概率ε随机探索大概率选择当前Q值最高的动作执行动作后到达新状态获得奖励然后更新Q-table。# Q-learning 主循环 for episode in range(1000): # 训练1000轮 state (0, 0) # 每轮起始状态 while state ! (4, 4): # 未到达目标则继续 # ε-greedy 策略选择动作 if random.uniform(0, 1) EPSILON: action random.randint(0, NUM_ACTIONS - 1) # 探索 else: action np.argmax(q_table[state[0], state[1], :]) # 利用 next_state move(state, action) reward get_reward(state, next_state) # Q-learning 更新公式 old_value q_table[state[0], state[1], action] next_max np.max(q_table[next_state[0], next_state[1], :]) new_value old_value ALPHA * (reward GAMMA * next_max - old_value) q_table[state[0], state[1], action] new_value state next_state if reward 10 or reward -10: # 到达目标或碰到危险本轮结束 break训练完成后q_table就包含了学习到的经验。我们可以让智能体纯粹利用知识设置EPSILON0来走一遍它会选择每一步Q值最高的动作大概率能找到一条安全的最优路径。这个例子虽然简单但它包含了智能体、环境、状态、动作、奖励、价值函数这些强化学习的所有核心要素。通过调整网格大小、障碍物布局、奖励值你能立刻看到智能体行为的变化这种即时反馈是理解AI原理的最佳方式。4. 从“模糊”到“清晰”洗衣机模糊推理的Python实现人工智能不只是深度学习在控制领域“模糊逻辑”是一种模仿人类模糊思维比如“水温有点热”、“衣服很多”进行推理的方法它非常适合处理那些无法用精确数学模型描述的系统。一个经典的入门例子就是“洗衣机模糊控制系统”。我们不会真的去连接一台洗衣机而是用Python模拟这个推理过程理解如何将“衣服很脏”、“油脂很多”这样的语言描述转化为具体的“洗涤时间”。模糊推理主要分三步模糊化、规则评估、去模糊化。假设我们有两个输入变量dirtiness污渍程度0-100和grease油脂程度0-100。一个输出变量wash_time洗涤时间0-60分钟。首先我们要为每个变量定义几个“模糊集合”。比如污渍程度可以分为“低”、“中”、“高”三个集合。每个集合用一个隶属度函数来描述比如“高污渍”这个集合可以用一个从50开始上升的梯形函数表示意思是污渍值超过50后它属于“高污渍”的程度就越来越高。我们用简单的三角形和梯形函数来模拟。这里使用一个流行的库scikit-fuzzy如果没有安装可以用pip install scikit-fuzzy安装。import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # 1. 定义输入输出的范围 dirtiness ctrl.Antecedent(np.arange(0, 101, 1), dirtiness) grease ctrl.Antecedent(np.arange(0, 101, 1), grease) wash_time ctrl.Consequent(np.arange(0, 61, 1), wash_time) # 2. 定义模糊集合和隶属度函数自动均匀分布 dirtiness.automf(3, names[low, medium, high]) grease.automf(3, names[low, medium, high]) # 为输出定义模糊集合 wash_time[short] fuzz.trimf(wash_time.universe, [0, 0, 30]) wash_time[medium] fuzz.trimf(wash_time.universe, [10, 30, 50]) wash_time[long] fuzz.trimf(wash_time.universe, [30, 60, 60])接下来是规则库这是人类经验的编码。我们用IF...THEN语句来描述# 3. 定义模糊规则 rule1 ctrl.Rule(dirtiness[low] grease[low], wash_time[short]) rule2 ctrl.Rule(dirtiness[medium] grease[low], wash_time[medium]) rule3 ctrl.Rule(dirtiness[high] | grease[high], wash_time[long]) # 污渍高或油脂高都需要长时间 # ... 可以定义更多规则然后我们创建控制系统并模拟一个具体情景污渍程度为70油脂程度为20。# 4. 创建控制系统并模拟 washing_ctrl ctrl.ControlSystem([rule1, rule2, rule3]) washing ctrl.ControlSystemSimulation(washing_ctrl) # 输入具体值 washing.input[dirtiness] 70 washing.input[grease] 20 # 执行模糊推理 washing.compute() # 5. 查看结果 print(f建议洗涤时间: {washing.output[wash_time]:.2f} 分钟) wash_time.view(simwashing) # 可视化推理过程需要matplotlib当你运行这段代码washing.compute()背后发生了什么呢首先系统将精确输入7020模糊化计算它们分别属于“低、中、高”的隶属度。比如污渍70可能属于“高”的隶属度为0.8属于“中”的隶属度为0.2。然后它评估所有规则。以规则3为例“IF dirtiness is high OR grease is high THEN wash_time is long”。前提部分“污渍高或油脂高”的激活强度取两个条件隶属度的最大值因为OR操作。假设“污渍高”隶属度0.8“油脂高”隶属度0.1那么规则3的激活强度就是0.8。这个强度会被用来裁剪输出变量“long”对应的隶属度函数。最后对所有规则裁剪后的输出函数进行聚合并通过重心法等去模糊化方法得到一个精确的输出值比如45分钟。这个例子完美展示了如何将人类的经验知识洗衣规则形式化并让计算机进行处理。你可以通过修改隶属度函数的形状、增加或修改规则来观察输出时间的变化从而深刻理解模糊逻辑的灵活性和解释性。它没有神经网络那样的“黑箱”特性每一步推理都是清晰可见的这对于需要安全性和可解释性的控制系统至关重要。5. 让代码“看见”世界OpenCV与Zynq SOC的嵌入式AI初探前面的例子都在通用计算机上运行。但AI的终极舞台在边缘在设备上。比如一个基于Xilinx Zynq系列SOC的嵌入式系统它集成了ARM处理器和FPGA可以在低功耗下实时处理图像实现人脸检测、物体跟踪等功能。这里我们不涉及复杂的FPGA编程而是聚焦在Zynq的ARM端如何用Python调用OpenCV完成一个基础的计算机视觉任务这能帮你理解从软件算法到硬件部署的桥梁。假设我们想在Zynq开发板如Pynq-Z2上实现一个实时颜色追踪器。核心思路是通过USB摄像头捕获视频流将每一帧图像从BGR颜色空间转换到HSV颜色空间因为HSV对光线变化更鲁棒然后通过颜色阈值过滤得到目标物体的掩膜最后找出掩膜中的最大轮廓并框出它。首先需要在Zynq的Linux系统上安装必要的库。通过SSH连接到开发板使用apt-get安装Python3、pip然后安装OpenCV。对于嵌入式平台编译OpenCV可能很耗时更简单的方法是使用预编译的轮子或轻量版OpenCV。sudo apt-get update sudo apt-get install python3-opencv如果安装完整版OpenCV可以使用pippip3 install opencv-python-headlessheadless版本不含GUI功能更适合服务器或嵌入式环境。准备好环境后我们编写Python脚本。这个脚本同样可以在你的PC上运行测试。import cv2 import numpy as np # 定义想要追踪的颜色的HSV范围例如追踪蓝色物体 # HSV范围需要根据实际环境调整这是一个经验值 lower_blue np.array([100, 150, 50]) upper_blue np.array([130, 255, 255]) # 初始化摄像头0代表默认摄像头。在Zynq上可能是/dev/video0 cap cv2.VideoCapture(0) while True: # 读取一帧 ret, frame cap.read() if not ret: print(无法获取视频流) break # 将BGR帧转换为HSV hsv cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 根据阈值创建掩膜 mask cv2.inRange(hsv, lower_blue, upper_blue) # 可选进行形态学操作开运算、闭运算去除噪声 kernel np.ones((5,5), np.uint8) mask cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) mask cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 在掩膜中寻找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) if contours: # 找到面积最大的轮廓 largest_contour max(contours, keycv2.contourArea) # 计算该轮廓的外接矩形 x, y, w, h cv2.boundingRect(largest_contour) # 在原图上画出矩形 cv2.rectangle(frame, (x, y), (xw, yh), (0, 255, 0), 2) # 在矩形上方显示文字 cv2.putText(frame, Target, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2) # 显示原图和掩膜 cv2.imshow(Original Frame, frame) cv2.imshow(Mask, mask) # 按q键退出循环 if cv2.waitKey(1) 0xFF ord(q): break # 释放资源 cap.release() cv2.destroyAllWindows()在Zynq上运行这个脚本你会看到视频窗口当你将一个蓝色物体比如一个水瓶放在摄像头前屏幕上就会用一个绿色框实时追踪它。这里的几个关键点值得深入理解第一颜色阈值lower_blue和upper_blue的设定非常依赖环境光。在实际项目中通常需要设计一个校准程序让用户对着目标物体点击自动计算HSV范围。第二形态学操作开运算和闭运算对于去除小噪声点和填充空洞至关重要是提升鲁棒性的小技巧。第三cv2.findContours返回的轮廓点集我们只取了面积最大的一个这适用于单目标追踪。如果是多目标则需要遍历所有轮廓并设置一个面积阈值。那么Zynq的FPGA部分能做什么在上述流程中图像预处理如RGB转HSV、阈值化、形态学操作是计算密集且高度并行的非常适合用FPGA硬件加速。ARM处理器运行Python和OpenCV可以负责更高层的逻辑控制比如发出“目标在画面左侧”的指令。这种软硬协同的设计正是Zynq这类SOC在边缘AI领域的优势所在。通过这个例子你不仅学会了用OpenCV做视觉处理更理解了嵌入式AI应用的基本架构传感器数据采集 - 预处理可在FPGA加速 - 核心算法在ARM运行 - 决策输出。6. 跨越应用的智能体测试一次完整的工作流实践“完成一次跨应用测试”这个要求听起来像是一个QA任务但结合“人工智能Agent”的概念我们可以把它变成一个有趣的自动化智能体实践。想象一个场景你需要监测某个AI技术概念比如“人工智能agent”的网络热度趋势。传统做法是每天手动打开浏览器搜索。而我们可以构建一个简单的Python智能体自动完成“打开无头浏览器 - 搜索关键词 - 获取并分析搜索结果 - 生成报告”这一系列跨应用操作。这不仅是自动化更是赋予程序一种简单的“感知-决策-执行”能力。我们将使用Selenium库来控制浏览器用BeautifulSoup来解析页面。首先安装必要的库pip install selenium beautifulsoup4 webdriver-manager。webdriver-manager能自动管理ChromeDriver的下载和匹配省去手动配置的麻烦。这个智能体的工作流设计如下感知启动一个无头Chrome浏览器不显示UI节省资源。决策与执行导航到搜索引擎如百度输入查询词“人工智能 agent 是什么”执行搜索。感知等待页面加载完成获取搜索结果页的HTML。决策与执行解析HTML提取搜索结果标题、链接和摘要。决策与执行对结果进行简单分析比如统计第一页结果数量查找官方定义链接并将结果保存到文件。from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time import json class SearchAgent: def __init__(self, headlessTrue): chrome_options Options() if headless: chrome_options.add_argument(--headless) # 无头模式 chrome_options.add_argument(--no-sandbox) chrome_options.add_argument(--disable-dev-shm-usage) # 使用webdriver-manager自动管理driver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service service Service(ChromeDriverManager().install()) self.driver webdriver.Chrome(serviceservice, optionschrome_options) self.wait WebDriverWait(self.driver, 10) def perceive_and_act_search(self, query): 感知打开浏览器并执行搜索动作 print(f[Agent] 正在执行搜索: {query}) self.driver.get(https://www.baidu.com) search_box self.wait.until(EC.presence_of_element_located((By.ID, kw))) search_box.clear() search_box.send_keys(query) search_box.send_keys(Keys.RETURN) # 等待结果加载 time.sleep(2) # 简单等待生产环境应用显式等待 print([Agent] 搜索完成页面已加载。) def perceive_and_extract_results(self): 感知页面并提取结构化信息 print([Agent] 正在提取搜索结果...) soup BeautifulSoup(self.driver.page_source, html.parser) results [] # 百度搜索结果通常包含在class为‘result’或‘c-container’的div中 for item in soup.find_all(div, class_result): title_elem item.find(h3) link_elem item.find(a, hrefTrue) abstract_elem item.find(div, class_c-abstract) if title_elem and link_elem: result { title: title_elem.get_text(stripTrue), link: link_elem[href], abstract: abstract_elem.get_text(stripTrue) if abstract_elem else 无摘要 } results.append(result) # 如果上述选择器不工作可以尝试更通用的或针对当前页面结构调整 print(f[Agent] 共提取到 {len(results)} 条结果。) return results def analyze_and_report(self, results, query): 简单分析并生成报告 print([Agent] 正在分析结果并生成报告...) report { query: query, timestamp: time.strftime(%Y-%m-%d %H:%M:%S), total_results_on_page: len(results), results: results, analysis: {} } # 简单分析检查是否有百科、知乎等权威来源 authoritative_sources [baike.baidu.com, zhihu.com] auth_links [] for res in results: for source in authoritative_sources: if source in res[link]: auth_links.append(res) break report[analysis][authoritative_source_count] len(auth_links) report[analysis][authoritative_sources] [r[title] for r in auth_links] # 保存报告为JSON文件 filename fsearch_report_{int(time.time())}.json with open(filename, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) print(f[Agent] 报告已生成: {filename}) return report def run(self, query): 智能体主循环 try: self.perceive_and_act_search(query) results self.perceive_and_extract_results() report self.analyze_and_report(results, query) return report finally: self.driver.quit() # 启动智能体 if __name__ __main__: agent SearchAgent(headlessTrue) report agent.run(人工智能 agent 是什么) print(f报告摘要获取到{report[total_results_on_page]}条结果其中{report[analysis][authoritative_source_count]}条来自权威来源。)这个简单的智能体已经具备了基本的感知、决策、执行和反馈能力。你可以在此基础上进行大量扩展比如增加情感分析判断搜索结果的情感倾向加入定时任务每天自动运行并对比趋势将数据存入数据库甚至引入一个简单的决策模块如果权威结果少于某个阈值则自动用其他关键词重新搜索。在这个过程中你遇到的真实问题会推动你学习更多知识例如如何处理动态加载的页面可能需要Selenium的显式等待如何应对反爬机制需要设置合理的请求头和使用代理以及如何让解析规则更健壮使用更灵活的CSS选择器或正则表达式。这就是一个AI智能体的雏形它从简单的自动化开始逐步吸收更多的“智能”模块最终成为一个能独立完成复杂任务的助手。7. 避坑与精进100个例子之外的实战心法跟着例子敲代码能入门但想真正掌握必须跨越从“能跑通”到“能实用”的鸿沟。在写了无数个AI小例子之后我总结出几个最常见的“坑”和应对心法这些是教程里往往不会细说的。第一个大坑环境依赖与版本地狱。你从GitHub下载了一个三年前的精彩项目README.md里写着“运行pip install -r requirements.txt”。你照做了然后迎接你的是满屏红色的错误日志。这是因为AI库尤其是TensorFlow/PyTorch版本迭代快API变动频繁。三年前用的torchvision.transforms.ToPILImage()的某个参数在新版本里可能已经改名或取消了。心法永远先看项目的创建时间和最后一次更新日期。如果超过一年就要保持警惕。运行前先创建一个新的虚拟环境。不要直接安装requirements.txt而是先尝试安装项目明确指明的核心框架版本如torch1.7.1再根据报错信息逐个安装或调整其他依赖的版本。更好的方法是寻找有活跃维护的类似新项目。第二个大坑数据数据还是数据。很多例子为了简洁使用sklearn.datasets里的完美数据集比如鸢尾花、手写数字。这些数据干净、规整、特征明确。但现实世界的数据是混乱的有缺失值、有异常值、量纲不一、格式千奇百怪。直接把这些数据喂给模型效果一定很差。心法在训练模型前请至少花费60%的时间在数据探索和预处理上。用pandas_profiling现名ydata-profiling快速生成一份数据报告查看分布、缺失和相关性。对于缺失值根据情况选择删除、填充均值、中位数、众数或使用模型预测。对于类别特征别忘了进行编码Label Encoding, One-Hot Encoding。最重要的一步划分训练集、验证集和测试集并且确保它们的数据分布一致。第三个大坑盲目调参与过拟合。初学者最容易沉迷于调整模型超参数期望找到一个“神奇数字”让准确率飙升。但很多时候模型在训练集上表现完美在测试集上一塌糊涂这就是过拟合。心法优先保证模型“泛化”而非“记忆”。1使用交叉验证来评估模型而不是单次划分。2引入正则化L1, L2, Dropout。3如果数据量小使用数据增强对图像进行旋转、裁剪对文本进行回译、同义词替换。4建立基线模型。先用最简单的模型如逻辑回归、决策树跑出一个基准性能再用复杂模型如神经网络去超越它。如果复杂模型没比简单模型好多少那可能问题不在模型而在特征或数据本身。第四个大坑忽视评估指标的选择。对于分类问题不能只看准确率。比如一个检测疾病的模型99%的准确率看起来很高但如果疾病本身发病率只有1%那么一个永远预测“没病”的傻瓜模型也能达到99%的准确率。心法根据业务目标选择指标。对于类别不平衡问题看精确率、召回率和F1-score。对于排序或推荐问题看AUC、MAP。永远要理解你使用的指标在衡量什么并配合混淆矩阵一起分析。最后关于那“100个例子”我的建议是不要追求数量而要追求深度。精选20个例子每个例子都做到1完全理解每一行代码2尝试修改关键参数观察结果如何变化3思考这个例子能解决什么现实问题4尝试用不同的方法或库实现相同功能。例如用PyTorch和TensorFlow分别实现同一个神经网络比较两者的异同。这样学下来你的收获会远大于机械地敲完100段代码。AI编程是一场马拉松这些从坑里爬出来的经验会成为你路上最坚实的补给。
返回列表