Merge branch 'camera-2018:master' into master

This commit is contained in:
E1PsyCongroo
2023-07-20 15:20:52 +08:00
committed by GitHub
202 changed files with 7529 additions and 2631 deletions

3
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,3 @@
本次更新的内容主要为...
欢迎前来学习

43
.github/workflows/cos.yaml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: update to cos
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: install doc dependencies
run: sudo npm i
- name: build
run: |
npm run docs:build
- name: install coscmd and tccli
run: |
sudo pip3 install coscmd
sudo pip3 install tccli
- name: confirgure coscmd and tccli
env:
SECRET_ID: ${{ secrets.TCLOUD_API_ID }}
SECRET_KEY: ${{ secrets.TCLOUD_API_KEY }}
BUCKET: hdu-cs-wiki-1307923872
REGION: ap-shanghai
run: |
coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION -m 10 -p 5
tccli configure set secretId $SECRET_ID
tccli configure set secretKey $SECRET_KEY
tccli configure set region $REGION
- name: upload and refresh cdn
run: |
coscmd upload -rfs --delete ./.vitepress/dist/ /
tccli cdn PurgePathCache --cli-unfold-argument --Paths https://wiki.xyxsw.site/ --FlushType flush

40
.github/workflows/link-pr.yaml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: links when pr
on:
pull_request:
branches: [ master ]
paths:
- '**.md'
- '.lycheeignore'
jobs:
linkChecker:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: install doc dependencies
run: sudo npm i
- name: build
run: |
npm run docs:build
- name: Link Checker
uses: lycheeverse/lychee-action@v1.8.0
with:
fail: true
# For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters
# -E, --exclude-all-private Exclude all private IPs from checking.
# -i, --insecure Proceed for server connections considered insecure (invalid TLS)
# -n, --no-progress Do not show progress bar.
# -t, --timeout <timeout> Website timeout in seconds from connect to response finished [default:20]
# --max-concurrency <max-concurrency> Maximum number of concurrent network requests [default: 128]
# -a --accept <accept> Comma-separated list of accepted status codes for valid links
# .vitepress/dist the site directory to check
# *.md all markdown files in the root directory
args: -E -i -n -t 45 --max-concurrency 64 -a 401,403 -- '.vitepress/dist' '*.md'
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

45
.github/workflows/link-schedule.yaml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: links
on:
# repository_dispatch:
workflow_dispatch:
schedule:
- cron: "30 8 * * *"
jobs:
linkChecker:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: install doc dependencies
run: sudo npm i
- name: build
run: |
npm run docs:build
- name: Link Checker
uses: lycheeverse/lychee-action@v1.8.0
with:
# For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters
# -E, --exclude-all-private Exclude all private IPs from checking.
# -i, --insecure Proceed for server connections considered insecure (invalid TLS)
# -n, --no-progress Do not show progress bar.
# -t, --timeout <timeout> Website timeout in seconds from connect to response finished [default:20]
# --max-concurrency <max-concurrency> Maximum number of concurrent network requests [default: 128]
# -a --accept <accept> Comma-separated list of accepted status codes for valid links
# .vitepress/dist the site directory to check
# *.md all markdown files in the root directory
args: -E -i -n -t 45 --max-concurrency 64 -a 401,403 -- '.vitepress/dist' '*.md'
output: out.md
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Create Issue From File
uses: peter-evans/create-issue-from-file@v3
with:
title: Broken Link Detected
content-filepath: out.md
assignees: nightwhite

50
.github/workflows/subscribe.yaml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: Subscribe to updates
on:
pull_request:
types:
- closed
branches:
- 'master'
paths:
- '**.md'
jobs:
subscribe:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # OR "2" -> To retrieve the preceding commit.
- name: Changed Files Exporter
id: changed-files
uses: umani/changed-files@v4.0.0
with:
repo-token: ${{ github.token }}
pattern: '^.*\.(md|markdown)$'
- name: Get PR labels
id: pr-labels
uses: joerick/pr-labels-action@v1.0.8
- name: Post Data
id: post-data
uses: octokit/request-action@v2.x
with:
route: POST https://np4l5e.laf.run/pr
repo: ${{github.event.repository.full_name}}
title: ${{ github.event.pull_request.title }}
work_branch: ${{ steps.branch.outputs.work_branch }}
base_branch: ${{ steps.branch.outputs.base_branch }}
id: ${{ github.event.pull_request.number }}
labels: ${{ steps.pr-labels.outputs.labels }}
files_updated: ${{ steps.changed-files.outputs.files_updated }}
files_created: ${{ steps.changed-files.outputs.files_created }}
files_deleted: ${{ steps.changed-files.outputs.files_deleted }}
source_url: ${{ github.event.pull_request.html_url }}
content: |
|
${{ github.event.pull_request.body }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

3
.gitignore vendored
View File

@@ -1,4 +1,5 @@
node_modules
dist
cache
.temp
.temp
.vitepress/dist

2
.lycheeignore Normal file
View File

@@ -0,0 +1,2 @@
hdu-cs-wiki/edit
file://

View File

@@ -1,6 +1,9 @@
import { defineConfig } from 'vitepress'
// import { defineConfig } from 'vitepress'
import { withMermaid } from "vitepress-plugin-mermaid";
import mathjax3 from 'markdown-it-mathjax3';
import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js';
import { nav } from './nav.js';
import PanguPlugin from 'markdown-it-pangu'
const customElements = [
'mjx-container',
@@ -93,565 +96,32 @@ const customElements = [
];
// https://vitepress.dev/reference/site-config
export default defineConfig({
export default withMermaid({
lang: 'zh-CN',
title: "HDU-CS-WIKI",
description: "HDU计算机科学讲义",
lastUpdated: true,
head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301" }]],
head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301", "data-domains": "wiki.xyxsw.site,hdu-cs.wiki" }]],
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: '首页', link: '/' },
],
nav: nav(),
sidebar: [
{
text: '简介',
collapsed: true,
items: [
{ text: '简介', link: '/简介' },
{ text: '使用指南', link: '/使用指南' },
]
},
{
text: '1.杭电生存指南(最重要模块)',
collapsed: true,
items: [
{ text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' },
{ text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' },
{ text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' },
{ text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' },
{ text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' },
{ text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' },
{ text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' },
{ text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' },
{ text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' },
{ text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' },
{ text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' },
]
},
{
text: '2.高效学习',
collapsed: true,
items: [
{ text: '2.高效学习', link: '/2.高效学习/2.高效学习' },
{
text: '2.1高效的前提:摆脱高中思维',
collapsed: true,
items: [
{ text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' },
{ text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' },
{ text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' },
{ text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' },
{ text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' },
{ text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' },
]
},
{ text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' },
{
text: '2.3高效的信息检索',
collapsed: true,
items: [
{ text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' },
{ text: '2.3.1阅读文档B百度爬', link: '/2.高效学习/2.3.1阅读文档B百度爬' },
{ text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' },
{ text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' },
{ text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' },
]
},
{ text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' },
{ text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' },
]
},
{
text: '3.编程思维体系构建',
collapsed: true,
items: [
{ text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' },
{ text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' },
{ text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' },
{
text: '3.2算法杂谈',
collapsed: true,
items: [
{ text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' },
{ text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' },
{ text: '3.2.2手把手教你学算法——如何使用OJOnline Judge', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJOnline Judge' },
]
},
{ text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' },
{
text: '3.4C语言',
collapsed: true,
items: [
{ text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' },
{ text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' },
{ text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' },
{ text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' },
{ text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' },
{
text: '3.4.5阶段一:编程属性',
collapsed: true,
items: [
{ text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' },
{ text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' },
]
},
{
text: '3.4.6阶段二文字冒险cool',
collapsed: true,
items: [
{ text: '3.4.6阶段二文字冒险cool', link: '/3.编程思维体系构建/3.4.6阶段二文字冒险cool' },
{ text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' },
{ text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' },
{ text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' },
{ text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' },
{ text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' },
{ text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' },
{ text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' },
{ text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' },
{ text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' },
{ text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' },
{ text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' },
{ text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' },
{ text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' },
{ text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' },
{ text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' },
{ text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' },
]
},
{
text: '3.4.7C基础知识杂谈',
collapsed: true,
items: [
{ text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' },
{ text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' },
{ text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' },
{ text: '3.4.7.2C的历史问题undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题undefined behavior' },
{ text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' },
{ text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' },
]
},
]
},
{ text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' },
{
text: '3.6Python(灵巧的胶水)',
collapsed: true,
items: [
{ text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' },
{ text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' },
{ text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' },
{ text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' },
{
text: '3.6.4Python for fun',
collapsed: true,
items: [
{ text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' },
{ text: '3.6.4.0阶段零Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零Python解释器' },
{ text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' },
{ text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' },
{ text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' },
{ text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' },
{ text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' },
{ text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' },
]
}
]
},
{ text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' },
{
text: '3.Y 附加模块Linux',
collapsed: true,
items: [
{ text: '3.Y 附加模块Linux', link: '/3.编程思维体系构建/3.Y 附加模块Linux' },
{ text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' },
{ text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' },
{ text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' },
{ text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' },
{ text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' },
]
}
]
},
{
text: '4.人工智能',
collapsed: true,
items: [
{ text: '4.人工智能', link: '/4.人工智能/4.人工智能' },
{ text: '4.1前言', link: '/4.人工智能/4.1前言' },
{ text: '4.2机器学习AI快速入门quick start', link: '/4.人工智能/4.2机器学习AI快速入门quick start' },
{
text: '4.3人工智能导论及机器学习入门',
collapsed: true,
items: [
{ text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' },
{
text: '4.3.1搜索',
collapsed: true,
items: [
{ text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' },
{ text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' },
{ text: '4.3.1.2项目Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目Tic-Tac-Toe井字棋' },
]
},
{
text: '4.3.2知识推理',
collapsed: true,
items: [
{ text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' },
{ text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' },
{ text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' },
]
},
{
text: '4.3.3不确定性问题',
collapsed: true,
items: [
{ text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' },
{ text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' },
{ text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' },
]
},
]
},
{ text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' },
{
text: '4.6深度学习',
collapsed: true,
items: [
{ text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' },
{ text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' },
{ text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' },
{ text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' },
{ text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' },
{
text: '4.6.5计算机视觉CV',
collapsed: true,
items: [
{ text: '4.6.5计算机视觉CV', link: '/4.人工智能/4.6.5计算机视觉CV' },
{ text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' },
{
text: '4.6.5.2CV中的数据预处理torchvision',
collapsed: true,
items: [
{ text: '4.6.5.2CV中的数据预处理torchvision', link: '/4.人工智能/4.6.5.2CV中的数据预处理torchvision' },
{ text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' },
{ text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' },
]
},
{
text: '4.6.5.3CV中的经典网络',
collapsed: true,
items: [
{ text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' },
{ text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' },
{ text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' },
{ text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' },
{ text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' },
{ text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' },
{ text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' },
{ text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' },
]
},
{
text: '4.6.5.4神经辐射场(NeRF)',
collapsed: true,
items: [
{ text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' },
{ text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' },
{ text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' },
{ text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' },
]
},
{
text: '4.6.5.5行人重识别(ReID)',
collapsed: true,
items: [
{ text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' },
]
},
]
},
{
text: '4.6.6自然语言处理NLP',
collapsed: true,
items: [
{ text: '4.6.6自然语言处理NLP', link: '/4.人工智能/4.6.6自然语言处理NLP' },
{ text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' },
{
text: '4.6.6.2推荐系统',
collapsed: true,
items: [
{ text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' },
{ text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' },
{
text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造',
collapsed: true,
items: [
{ text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' },
{ text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' },
{ text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' },
{ text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' },
{ text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' },
{ text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' },
{ text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' },
{ text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' },
]
},
{ text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' },
]
},
{ text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' },
]
},
{
text: '4.6.7Transformer',
collapsed: true,
items: [
{ text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' },
{ text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' },
{ text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' },
{ text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' },
]
},
{
text: '4.6.8对比学习',
collapsed: true,
items: [
{ text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' },
{ text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' },
{ text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' },
{ text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' },
{ text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' },
{ text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' },
{ text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' },
{ text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' },
{ text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' },
{ text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' },
{ text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' },
]
},
{
text: '4.6.9深度强化学习',
collapsed: true,
items: [
{ text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' },
{ text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' },
{ text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' },
{ text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' },
]
}
]
},
{ text: '4.7图网络略述intro&GCN', link: '/4.人工智能/4.7图网络略述intro&GCN' },
{ text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' },
{ text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' },
{ text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' },
{ text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' },
{ text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' },
{
text: 'FunRec',
collapsed: true,
items: [
{ text: 'FunRec概述', link: '/4.人工智能/FunRec概述' },
{
text: '推荐系统概述',
collapsed: true,
items: [
{ text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' },
{ text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' },
{ text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' },
]
},
{
text: '推荐系统算法基础',
collapsed: true,
items: [
{
text: '经典召回模型',
collapsed: true,
items: [
{
text: '基于协同过滤的召回', collapsed: true, items: [
{ text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' },
{ text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' },
{ text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' },
{ text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' },
]
},
{ text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' },
{
text: 'item2vec召回系列', collapsed: true, items: [
{ text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' },
{ text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' },
{ text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' },
]
},
{ text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' },
{
text: '双塔召回', collapsed: true, items: [
{ text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' },
{ text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' },
]
},
{
text: '图召回', collapsed: true, items: [
{ text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' },
{ text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' },
]
},
{
text: '序列召回', collapsed: true, items: [
{ text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' },
{ text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' },
]
},
{
text: '树模型召回', collapsed: true, items: [
{ text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' },
]
}
]
},
{
text: '经典排序模型',
collapsed: true,
items: [
{ text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' },
{
text: '特征交叉', collapsed: true, items: [
{ text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' },
{ text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' },
{ text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' },
{ text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' },
{ text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' },
]
},
{
text: 'WideNDeep系列', collapsed: true, items: [
{ text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' },
{ text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' },
{ text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' },
{ text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' },
{ text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' },
]
},
{
text: '序列模型', collapsed: true, items: [
{ text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' },
{ text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' },
{ text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' },
]
},
{
text: '多任务学习', collapsed: true, items: [
{ text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' },
{ text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' },
{ text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' },
{ text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' },
]
}
]
}
]
}
]
}
]
},
{
text: '5.富有生命的嵌入式',
collapsed: true,
items: [
{ text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' },
{ text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' },
{ text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' },
{ text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' },
]
},
{
text: '6.计算机安全',
collapsed: true,
items: [
{ text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' },
{
text: '6.1网络安全',
collapsed: true,
items: [
{ text: '6.1网络安全', link: '/6.计算机安全/6.1网络安全' },
{ text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' },
]
},
{
text: '6.2二进制安全',
collapsed: true,
items: [
{ text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' },
{ text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' },
{ text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' },
]
},
{ text: '6.4CTF信息安全竞赛', link: '/6.计算机安全/6.4CTF信息安全竞赛' },
]
},
{
text: '7.Web开发入门',
collapsed: true,
items: [
{ text: '7.Web开发入门', link: '/7.Web开发入门/7.Web开发入门' },
{
text: '7.1前端部分',
collapsed: true,
items: [
{ text: '7.1前端部分', link: '/7.Web开发入门/7.1前端部分' },
{ text: '7.1.1基础部分', link: '/7.Web开发入门/7.1.1基础部分' },
{ text: '7.1.2进阶部分', link: '/7.Web开发入门/7.1.2进阶部分' },
{ text: '7.1.3附录1前端介绍详细版', link: '/7.Web开发入门/7.1.3附录1前端介绍详细版' },
{ text: '7.1.4附录2大前端开发', link: '/7.Web开发入门/7.1.4附录2大前端开发' },
{ text: '7.1.5附录3跨端开发', link: '/7.Web开发入门/7.1.5附录3跨端开发' },
]
},
{
text: '7.2后端部分',
collapsed: true,
items: [
{ text: '7.2后端部分', link: '/7.Web开发入门/7.2后端部分' },
{ text: '7.2.1基础部分', link: '/7.Web开发入门/7.2.1基础部分' },
{ text: '7.2.2进阶部分', link: '/7.Web开发入门/7.2.2进阶部分' },
]
}
]
},
{
text: '8.基础学科',
collapsed: true,
items: [
{ text: '8.基础学科', link: '/8.基础学科/8.基础学科' },
{ text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' },
{ text: '8.2定积分', link: '/8.基础学科/8.2定积分' },
]
},
{
text: 'Contributors',
link: '/contributors'
},
{
text: '贡献指南',
link: '/CONTRIBUTING'
},
{
text: 'notebook测试',
link: '/notebook'
}
],
sidebar: {
'/': main_sidebar(),
'/2.高效学习/': chapter2(),
'/3.编程思维体系构建/': chapter3(),
'/4.人工智能/': chapter4(),
'/5.富有生命的嵌入式/': chapter5(),
'/6.计算机安全/': chapter6(),
'/7.网络应用开发/': chapter7(),
'/8.基础学科/': chapter8(),
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/camera-2018/hdu-cs-wiki' }
],
footer: {
message: 'Made with ❤️ by HDU 计算机科协 && ALL 协作者',
copyright: 'Copyright © 2023-present Evan You && HDU 计算机科协 && ALL 协作者'
message: 'Made with ❤️ by ALL 协作者',
copyright: 'Copyright © 2023-present Evan You && ALL 协作者'
},
lastUpdatedText: '上次更改',
docFooter: {
@@ -665,10 +135,12 @@ export default defineConfig({
pattern: 'https://github.com/camera-2018/hdu-cs-wiki/edit/master/:path',
text: '在 GitHub 上修改此页'
},
externalLinkIcon: true,
},
markdown: {
config: (md) => {
md.use(mathjax3);
md.use(PanguPlugin);
},
},
vue: {

25
.vitepress/nav.js Normal file
View File

@@ -0,0 +1,25 @@
export function nav() {
return [
{ text: '首页', link: '/' },
{
text: '章节', items:
[
{ text: '1.杭电生存指南(最重要模块)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' },
{ text: '2.高效学习', link: '/2.高效学习/2.高效学习' },
{ text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' },
{ text: '4.人工智能', link: '/4.人工智能/4.人工智能' },
{ text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' },
{ text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' },
{ text: '7.网络应用开发', link: '/7.网络应用开发/7.网络应用开发入门' },
{ text: '8.基础学科', link: '/8.基础学科/8.基础学科' },
]
},
{ text: 'Wiki史', link: '/wiki史' },
{
text: '友链', items:
[
{ text: '杭电导航', link: 'https://wiki.hduhelp.com' },
]
},
]
}

640
.vitepress/sidebar.js Normal file
View File

@@ -0,0 +1,640 @@
export function main_sidebar() {
return [
{
text: '简介',
collapsed: true,
items: [
{ text: '简介', link: '/简介' },
{ text: '使用指南', link: '/使用指南' },
]
},
{
text: '1.杭电生存指南(最重要模块)',
collapsed: true,
items: [
{ text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' },
{ text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' },
{ text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' },
{ text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' },
{ text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' },
{ text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' },
{ text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' },
{ text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' },
{ text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' },
{ text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' },
{ text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' },
{ text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' },
{ text: '1.13选课原则与抢课技巧', link: '/1.杭电生存指南/1.13选课原则与抢课技巧' },
]
},
{
text: "2.高效学习",
collapsed: true,
items: [{ text: "2.高效学习", link: "/2.高效学习/2.高效学习" }]
},
{
text: "3.编程思维体系构建",
collapsed: true,
items: [
{ text: "3.编程思维体系构建", link: "/3.编程思维体系构建/3.编程思维体系构建" }
]
},
{
text: "4.人工智能",
collapsed: true,
items: [{ text: "4.人工智能", link: "/4.人工智能/4.人工智能" }]
},
{
text: "5.富有生命的嵌入式",
collapsed: true,
items: [
{ text: "5.富有生命的嵌入式", link: "/5.富有生命的嵌入式/5.富有生命的嵌入式" }
]
},
{
text: "6.计算机安全",
collapsed: true,
items: [{ text: "6.计算机安全", link: "/6.计算机安全/6.计算机安全" }]
},
{
text: "7.网络应用开发入门",
collapsed: true,
items: [
{ text: "7.网络应用开发入门", link: "/7.网络应用开发/7.网络应用开发入门" }
]
},
{
text: "8.基础学科",
collapsed: true,
items: [{ text: "8.基础学科", link: "/8.基础学科/8.基础学科" }]
},
{
text: 'Contributors',
link: '/contributors'
},
{
text: '贡献指南',
link: '/CONTRIBUTING'
},
{
text: 'notebook测试',
link: '/notebook'
}
]
}
export function chapter2() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '2.高效学习',
collapsed: false,
items: [
{ text: '2.高效学习', link: '/2.高效学习/2.高效学习' },
{
text: '2.1高效的前提:摆脱高中思维',
collapsed: true,
items: [
{ text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' },
{ text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' },
{ text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' },
{ text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' },
{ text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' },
{ text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' },
]
},
{ text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' },
{
text: '2.3高效的信息检索',
collapsed: true,
items: [
{ text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' },
{ text: '2.3.1阅读文档B百度爬', link: '/2.高效学习/2.3.1阅读文档B百度爬' },
{ text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' },
{ text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' },
{ text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' },
]
},
{ text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' },
{ text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' },
{ text: '2.6学会使用AI辅助学习', link: '/2.高效学习/2.6学会使用AI辅助学习' },
]
},
]
}
export function chapter3() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '3.编程思维体系构建',
collapsed: false,
items: [
{ text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' },
{ text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' },
{ text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' },
{
text: '3.2算法杂谈',
collapsed: true,
items: [
{ text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' },
{ text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' },
{ text: '3.2.2手把手教你学算法——如何使用OJOnline Judge', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJOnline Judge' },
{ text: '3.2.3ACM 竞赛从入门到入坟', link: '/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟' },
]
},
{ text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' },
{
text: '3.4C语言',
collapsed: true,
items: [
{ text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' },
{ text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' },
{ text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' },
{ text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' },
{ text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' },
{
text: '3.4.5阶段一:编程属性',
collapsed: true,
items: [
{ text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' },
{ text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' },
]
},
{
text: '3.4.6阶段二文字冒险cool',
collapsed: true,
items: [
{ text: '3.4.6阶段二文字冒险cool', link: '/3.编程思维体系构建/3.4.6阶段二文字冒险cool' },
{ text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' },
{ text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' },
{ text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' },
{ text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' },
{ text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' },
{ text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' },
{ text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' },
{ text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' },
{ text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' },
{ text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' },
{ text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' },
{ text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' },
{ text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' },
{ text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' },
{ text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' },
{ text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' },
]
},
{
text: '3.4.7C基础知识杂谈',
collapsed: true,
items: [
{ text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' },
{ text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' },
{ text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' },
{ text: '3.4.7.2C的历史问题undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题undefined behavior' },
{ text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' },
{ text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' },
]
},
]
},
{ text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' },
{
text: '3.6Python(灵巧的胶水)',
collapsed: true,
items: [
{ text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' },
{ text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' },
{ text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' },
{ text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' },
{
text: '3.6.4Python for fun',
collapsed: true,
items: [
{ text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' },
{ text: '3.6.4.0阶段零Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零Python解释器' },
{ text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' },
{ text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' },
{ text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' },
{ text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' },
{ text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' },
{ text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' },
]
}
]
},
{ text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' },
{
text: '3.Y 附加模块Linux',
collapsed: true,
items: [
{ text: '3.Y 附加模块Linux', link: '/3.编程思维体系构建/3.Y 附加模块Linux' },
{ text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' },
{ text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' },
{ text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' },
{ text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' },
{ text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' },
]
}
]
},
]
}
export function chapter4() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '4.人工智能',
collapsed: false,
items: [
{ text: '4.人工智能', link: '/4.人工智能/4.人工智能' },
{ text: '4.1前言', link: '/4.人工智能/4.1前言' },
{ text: '4.2机器学习AI快速入门quick start', link: '/4.人工智能/4.2机器学习AI快速入门quick start' },
{
text: '4.3人工智能导论及机器学习入门',
collapsed: true,
items: [
{ text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' },
{
text: '4.3.1搜索',
collapsed: true,
items: [
{ text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' },
{ text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' },
{ text: '4.3.1.2项目Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目Tic-Tac-Toe井字棋' },
]
},
{
text: '4.3.2知识推理',
collapsed: true,
items: [
{ text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' },
{ text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' },
{ text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' },
]
},
{
text: '4.3.3不确定性问题',
collapsed: true,
items: [
{ text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' },
{ text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' },
{ text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' },
]
},
]
},
{ text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' },
{
text: '4.6深度学习',
collapsed: true,
items: [
{ text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' },
{ text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' },
{ text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' },
{ text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' },
{ text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' },
{
text: '4.6.5计算机视觉CV',
collapsed: true,
items: [
{ text: '4.6.5计算机视觉CV', link: '/4.人工智能/4.6.5计算机视觉CV' },
{ text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' },
{
text: '4.6.5.2CV中的数据预处理torchvision',
collapsed: true,
items: [
{ text: '4.6.5.2CV中的数据预处理torchvision', link: '/4.人工智能/4.6.5.2CV中的数据预处理torchvision' },
{ text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' },
{ text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' },
]
},
{
text: '4.6.5.3CV中的经典网络',
collapsed: true,
items: [
{ text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' },
{ text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' },
{ text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' },
{ text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' },
{ text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' },
{ text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' },
{ text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' },
{ text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' },
]
},
{
text: '4.6.5.4神经辐射场(NeRF)',
collapsed: true,
items: [
{ text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' },
{ text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' },
{ text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' },
{ text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' },
]
},
{
text: '4.6.5.5行人重识别(ReID)',
collapsed: true,
items: [
{ text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' },
]
},
]
},
{
text: '4.6.6自然语言处理NLP',
collapsed: true,
items: [
{ text: '4.6.6自然语言处理NLP', link: '/4.人工智能/4.6.6自然语言处理NLP' },
{ text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' },
{
text: '4.6.6.2推荐系统',
collapsed: true,
items: [
{ text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' },
{ text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' },
{
text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造',
collapsed: true,
items: [
{ text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' },
{ text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' },
{ text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' },
{ text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' },
{ text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' },
{ text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' },
{ text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' },
{ text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' },
]
},
{ text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' },
]
},
{ text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' },
]
},
{
text: '4.6.7Transformer',
collapsed: true,
items: [
{ text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' },
{ text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' },
{ text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' },
{ text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' },
]
},
{
text: '4.6.8对比学习',
collapsed: true,
items: [
{ text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' },
{ text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' },
{ text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' },
{ text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' },
{ text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' },
{ text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' },
{ text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' },
{ text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' },
{ text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' },
{ text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' },
{ text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' },
]
},
{
text: '4.6.9深度强化学习',
collapsed: true,
items: [
{ text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' },
{ text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' },
{ text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' },
{ text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' },
]
}
]
},
{ text: '4.7图网络略述intro&GCN', link: '/4.人工智能/4.7图网络略述intro&GCN' },
{ text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' },
{ text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' },
{ text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' },
{ text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' },
{ text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' },
{ text: 'SRT社团介绍', link: '/4.人工智能/SRT' },
{
text: 'FunRec',
collapsed: true,
items: [
{ text: 'FunRec概述', link: '/4.人工智能/FunRec概述' },
{
text: '推荐系统概述',
collapsed: true,
items: [
{ text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' },
{ text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' },
{ text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' },
]
},
{
text: '推荐系统算法基础',
collapsed: true,
items: [
{
text: '经典召回模型',
collapsed: true,
items: [
{
text: '基于协同过滤的召回', collapsed: true, items: [
{ text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' },
{ text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' },
{ text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' },
{ text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' },
]
},
{ text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' },
{
text: 'item2vec召回系列', collapsed: true, items: [
{ text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' },
{ text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' },
{ text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' },
]
},
{ text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' },
{
text: '双塔召回', collapsed: true, items: [
{ text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' },
{ text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' },
]
},
{
text: '图召回', collapsed: true, items: [
{ text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' },
{ text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' },
]
},
{
text: '序列召回', collapsed: true, items: [
{ text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' },
{ text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' },
]
},
{
text: '树模型召回', collapsed: true, items: [
{ text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' },
]
}
]
},
{
text: '经典排序模型',
collapsed: true,
items: [
{ text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' },
{
text: '特征交叉', collapsed: true, items: [
{ text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' },
{ text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' },
{ text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' },
{ text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' },
{ text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' },
]
},
{
text: 'WideNDeep系列', collapsed: true, items: [
{ text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' },
{ text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' },
{ text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' },
{ text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' },
{ text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' },
]
},
{
text: '序列模型', collapsed: true, items: [
{ text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' },
{ text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' },
{ text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' },
]
},
{
text: '多任务学习', collapsed: true, items: [
{ text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' },
{ text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' },
{ text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' },
{ text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' },
]
}
]
}
]
}
]
}
]
},
]
}
export function chapter5() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '5.富有生命的嵌入式',
collapsed: false,
items: [
{ text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' },
{ text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' },
{ text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' },
{ text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' },
]
},
]
}
export function chapter6() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '6.计算机安全',
collapsed: false,
items: [
{ text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' },
{
text: '6.1Web安全',
collapsed: true,
items: [
{ text: '6.1Web安全', link: '/6.计算机安全/6.1Web安全' },
{ text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' },
]
},
{
text: '6.2二进制安全',
collapsed: true,
items: [
{ text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' },
{ text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' },
{ text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' },
{ text: '6.2.3漏洞挖掘、漏洞利用', link: '/6.计算机安全/6.2.3漏洞挖掘、漏洞利用' },
]
},
{ text: '6.3密码学', link: '/6.计算机安全/6.3密码学' },
{ text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' },
]
},
]
}
export function chapter7() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '7.网络应用开发',
collapsed: false,
items: [
{ text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' },
{
text: '7.1WEB开发入门',
collapsed: true,
items: [
{ text: '7.1WEB开发入门', link: '/7.网络应用开发/7.1WEB开发入门' },
{
text: '7.1.1前端部分',
collapsed: true,
items: [
{ text: '7.1.1前端部分', link: '/7.网络应用开发/7.1.1前端部分' },
{ text: '7.1.1.1基础部分', link: '/7.网络应用开发/7.1.1.1基础部分' },
{ text: '7.1.1.2进阶部分', link: '/7.网络应用开发/7.1.1.2进阶部分' },
{ text: '7.1.1.3附录1前端介绍详细版', link: '/7.网络应用开发/7.1.1.3附录1前端介绍详细版' },
{ text: '7.1.1.4附录2大前端开发', link: '/7.网络应用开发/7.1.1.4附录2大前端开发' },
{ text: '7.1.1.5附录3跨端开发', link: '/7.网络应用开发/7.1.1.5附录3跨端开发' },
]
},
{
text: '7.1.2后端部分',
collapsed: true,
items: [
{ text: '7.1.2后端部分', link: '/7.网络应用开发/7.1.2后端部分' },
{ text: '7.1.2.1基础部分', link: '/7.网络应用开发/7.1.2.1基础部分' },
{ text: '7.1.2.2进阶部分', link: '/7.网络应用开发/7.1.2.2进阶部分' },
]
},
]
},
]
},
]
}
export function chapter8() {
return [
{ text: '返回上一层', link: '/简介' },
{
text: '8.基础学科',
collapsed: false,
items: [
{ text: '8.基础学科', link: '/8.基础学科/8.基础学科' },
{ text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' },
]
}
]
}

View File

@@ -2,6 +2,9 @@
import { h, watch } from 'vue'
// import Theme from 'vitepress/theme'
import DefaultTheme from 'vitepress/theme-without-fonts'
import Download from '../../components/Download.vue'
import Bilibili from '../../components/Bilibili.vue'
import Parallax from '../../components/Parallax.vue'
import './style.css'
import './rainbow.css'
@@ -16,6 +19,9 @@ export default {
},
enhanceApp(ctx) {
DefaultTheme.enhanceApp(ctx)
ctx.app.component('Download', Download)
ctx.app.component('Bilibili', Bilibili)
ctx.app.component('Parallax', Parallax)
if (typeof window === 'undefined')
return

View File

@@ -25,6 +25,14 @@
--vp-font-family-base: 'Noto Sans SC', 'Noto Color Emoji', sans-serif;
--vp-font-family-mono: 'Noto Sans Mono', sans-serif, monospace, consolas;
}
/**
* 这个版本可能有 bugbuild 后字体变不了还为 consolas 可能是我自己配的有问题 可能是这个版本拉了 总之就加个临时的
* -------------------------------------------------------------------------- */
code {
font-family: 'Noto Sans Mono', sans-serif, monospace, consolas !important;
font-weight: 400 !important;
font-size: 14px !important;
}
/**
* Component: Button
@@ -179,4 +187,10 @@ mjx-container {
.jp-RenderedHTMLCommon :not(pre) > code {
background-color: var(--vp-c-mute) !important;
}
.VPImage {
user-drag: none !important;
-webkit-user-drag: none !important;
-moz-user-drag: none !important;
}

View File

@@ -0,0 +1,41 @@
# 程序员如何活久一点
### 1. 术语
* ACM: All-Cause Mortality / 全因死亡率
### 2. 目标
* 稳健地活得更久
### 3. 关键结果
* 降低66.67%全因死亡率
* 增加\~20年预期寿命
* ~~维持多巴胺于中轴~~
### 4. 分析
* 主要参考对ACM的学术文献相对较多可以作为主要参考
* 增加寿命与ACM关系非线性显然增加寿命与ACM关系是非线性函数这里假设 `DeltaLifeSpan=(1/(1+DeltaACM)-1)*10`DeltaACM为ACM变化值公式欢迎优化
* 变量无法简单叠加:显然各个变量之间并不符合独立同分布假设,变量之间的实际影响也并不明确
* 存在矛盾观点:所有的证据都有文献/研究对应但注意到有些文献之间有显著矛盾的观点如对于碳水摄入比例的矛盾有些文献存在较大争议如认为22点前睡觉会提升43%全因死亡率)
* 研究仅表达相关:所有文献表明的更多是相关而非因果,在阅读时要考虑文献是否充分证明了因果 —— 如某文献表明了日均>=7000步的人有显著低的全因死亡率。但步数少的人可能包含更多长期病患如果没有合理的排除这块数据那此文献调查失真
### 5. 行动
* 输入
* 固体:吃白肉(-11%\~-3% ACM、蔬果为主-26%\~-17% ACM多吃辣-23% ACM多吃坚果-27%\~-4% ACM*少吃蛋黄(否则+7% ACM/0.5颗/天)(存在争议)*,中量碳水、多吃植物蛋白(-10% ACM少吃超加工食物-62%\~-18%
* 液体:喝咖啡(-22%\~-12% ACM喝牛奶-17%\~-10% ACM喝茶-15%\~-8% ACM少喝或不喝甜味饮料否则每天一杯+7% ACM+多巴胺戒酒或每周100g纯酒精量(g)=饮酒量(ml)×酒精浓度(%)×酒精密度0.8g/ml否则+\~50% ACM无上限
* 气体:不吸烟(否则+~50% ACM-12\~-11年寿命
* 光照:晒太阳(-~40% ACM
* 药物:二甲双胍(糖尿病人相比正常人可以+3年、复合维生素-8%癌症风险)、亚精胺(-60%\~-30% ACM、葡萄糖胺-39% ACM
* 输出
* 运动每周3次45分钟挥拍运动-47% ACM
* 日常:刷牙(-25% ACM
* 睡眠每天睡7小时全因死亡率最低且22-24点间最好*早睡+43% ACM晚睡+15% ACM存在争议*
* 上下文
* 体重:减肥(-54% ACM
::: tip 🧑‍🍳
全文 [程序员延寿指南 | A programmer's guide to live longer](https://github.com/geekan/HowToLiveLonger)
:::

View File

@@ -0,0 +1,54 @@
# 选课原则与抢课技巧
> author: ek1ng
>
> 本文编写自2021.07.31,也许有些内容已经过时,请选择性参考。
## 选课原则
### 要选哪些课
在杭电,学生必须修读完培养计划上所有的课程才能够毕业,因此选课遵循的唯一纲要便是培养计划,一切以培养计划上的要求为准,体育课、通识必修课、通识选修课、专业选修课、专业必修课等等,请注意任何选课尽可能请以培养计划的课程代码为准,若课程代码不同则需要通过课程替代等方式。
### 为什么要选课
选课其实是选老师,而选择的选课老师的背后则是课程考核方式、给分高低、成绩占比、课堂签到情况等等。选择正确的老师能够使课堂更加符合你的预期,不论是教学质量还是教学方式亦或期末分数上。
在讨论之前,必须声明一些学校课程的基本要求,例如学校要求老师采取易班点名的方式,所以除了某些老师以外大多数老师都会采取不定次数的课堂点名以及点教室人头的方式作为考核考勤情况的方式。
### 学校开什么课
学校开展体育课大一大二4学期分别修读不同类别的体育课程4次、通识选修课 ~~通常各专业需要修读人文类、国际类、科技类学分4、4、2个~~
:::warning
2023年更新现在是国际类、人文类、艺术类、科技类学分4、2、2、2个不管怎么变应该加起来都是10分
:::
### 选什么课好
在杭电换客群或者与认识的室友、同学、朋友等等交流开展某课程的某老师教学情况打听情报以选择合适的老师。此处的情报通常指老师的教学方式如何采取怎样的签到方式等等。如果曾经上过某老师开展的a课程那么通常对于他开展的b课程签到情况和给分情况都仍然能够适用但是教学情况则未必。
### 常见问题Q&A
Q1:我该如何安排我这一学期的课程?
A1:尽可能按照培养计划给出的每学期修读建议修读,适当先在大一、大二修读通识选修、体育课以及适量的专业必修专业选修,在大三修读更多的专业课程。当然如果完全打乱培养计划在杭电也是完全允许的,你完全可以在大一、大二修读大三的课程,在大三修读大一的课程,这么做的意义也许是你希望通过修读课程顺序的改变来调整你个人的时间安排,不论如何这是符合学校规章制度的操作,只要你想你就可以这么做。
Q2:选课所谓第一轮选课第二轮选课到底是如何进行的?
A2:第一轮选课可以选择的课为体育课、通识选修课英语拓展课、大学军事、公选课都包括在内、推荐课表上的课程。第二轮选课可以跨年级跨学院跨专业选课只要能搜到的课都是可以上的不过请注意思修近代史毛概马原形策等课程并不能提前修读。第二轮选课通常进行到开学后3周在开学前3周可以通过签课的方式即在授课老师、学院的批准通过下选上自己没有抢到的课理论上任何课需要注意公选课、体育课一般无法签课老师是否同意签课通常看老师的个人情况学院通常会在老师批准的情况下通过批准只要经过批准都可以签课成功后出现在课表上。请注意学分上限为32.5不包括暑假短学期课程转专业后学分上限自动扩为40若非转专业学生可以在绩点3.0以上的情况下开学前3周内提出扩学分请求。
:::warning
2023年更新学分上限好像变高了但我忘了是多少🤡
:::
Q3大一上如何选课
A3大一上选课的安排在最后时间段体育被默认选了太极拳并选不到“好”的公选课专业课等等不太建议选很多课选一门新生研讨课或者推荐不选课。
## 抢课技巧
### 选课背景
2021年上学期的选课中杭电更换了正方全新的选课平台http://newjw.hdu.edu.cn 目前选课平台的特性为在选课时间内开放至公网ip可以访问可以并发请求~~并不会网页卡崩~~,抢课全靠手速。
:::tip
1. 鉴于杭电复杂的网络环境,在**内网**抢课甚至不如**公网**😅,所以建议在寝室里连上网线(公网)抢课。
2. **网页会卡崩**刚开始选课0~5分钟系统会未响应甚至将你踢出登录还会让你浏览器爆掉显示 *欧呦,崩溃啦* 之类的字样,一切听天由命。
:::
## 具体技巧
#### 系统开放前
通常系统开放前可以查询开课情况,那么可以根据开课情况自己提前规划安排想上的课程。
#### 系统开放时
##### 第一轮选课、第二轮选课开放系统时
提前在粘贴板中剪切/复制第一手要抢的课程,并且在选课平台开放时间前几秒,不停点击刷新,直至选课平台显示的内容不为非选课时间而是可以搜索,粘贴课程名并且点击抢课即可第一手抢到最想抢的课程,再依次抢接下来准备上的课。若课表上已经被系统默认选的课占了想要选的课的位置,那么就需要先退课再选课。
##### 假期以及开学前三周
这时候会有同学因为不想选某门课程或者通过将课卡在其他人号上想在假期“转移”到自己号上,选课系统中的课程余量就会时不时出现波动,此时可以上去系统看看说不定能捡漏哦。签课以及扩学分在开学前三周进行,请关注学校通知并且通过签课选上自己没能选上的课程。

View File

@@ -92,6 +92,6 @@
由于笔者是创意组的,对其他组别不是很了解,就来介绍一下我们组别的情况。我们组别全称是智能车百度创意组,是由百度与鲸鱼机器人赞助的一个比较新的组别(目前是第三年,不过也开始卷起来了),该组别与传统组别的一个比较大的不同是对于硬件方面的要求并不高(但也是需要了解的,像 arduino stm32 这些稍微都得玩的起来),侧重会偏向软件算法方向。百度创意组总体分为两个阶段,线上赛和线下赛,线上赛的任务有点像是 kaggle 打榜,不过是百度官方命题,并且在飞浆平台上进行测试的,本质考验的就是你对神经网络的理解和调参(炼丹),如下图所示
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png)

View File

@@ -1,6 +1,6 @@
# 小心项目陷阱
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPmQ725zYTxiyo2LqQkphib.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPmQ725zYTxiyo2LqQkphib.png)
## 辨别项目质量
@@ -52,7 +52,7 @@
但是大家参与之前你一定要想你的能力是否等于这个项目的量级,一般情况下,要么你技术特别强,要么可能会存在一定的问题。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png)
所以说,还是那句话,小心甄别。

View File

@@ -11,6 +11,8 @@
::: warning 🤣
[与人合作中的 “生死疲劳” 哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1494y1o7jp)
<Bilibili bvid='BV1494y1o7jp'/>
**一定要看看这个**
:::

View File

@@ -6,13 +6,13 @@
## 序言:一组数据看出国
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png)
点开图片可以看到左边是西交利物浦的出国数据,中间是杭电的数据,右边是成都电子科技大学的数据,可以看出西交利物浦每年去名校的数量大概是杭电一年的 20-40 倍,成电是杭电的一年的 10 倍左右,杭电出国数据实际上只有寥寥几个名校,剩下的则是一些英国院校。
这其中原因除了杭电高性价比的就业环境,双非院校选择出国深造的人数较低,我认为比较还有一点则是信息差。优秀的大学都有他们自己的飞跃手册,其中会介绍每个国家的优劣,以及申请的一些注意事项,详见下图。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png)
优越的校友资源和前人留下的数据和方案,加下信息差的叠加,就像符合幂律分布的无标度网络一样,只会让我们的差距越来越大,在感叹其他学校飞跃手册的优越性的同时也发现了一些不可参考性,因为在其中也存在着很多问题,在这些学校中,可能名校读博就是老师写个推荐信就有了面试的机会,可能去港大 / G5 就是大学四年均分 80 分的难度。有很多资料在不同的角度,我们很难参考,所以我不经会想问?那我们呢,我们考多少多少分能够去什么学校,我们想要直博应该怎么准备,所以我打算完成这份出国留学的手册,能够为学弟学妹们铺路,同样希望后面也能够有学弟学妹做完善和补充。

View File

@@ -1,6 +1,6 @@
# 2.1.1 悲壮的学习方式
# 现状
## 现状
古人刻苦学习的故事,直到现在还在我们的身边不断上演。学生趴在山一样高的习题集边上苦苦奋斗,绝对是我校作为国内一流大学的亮丽的风景线。
@@ -8,7 +8,7 @@
我无意全盘否定同学们吃苦耐劳的精神,但这份精神充其量只能称为悲壮。我们耗费了大量的时间和精力掌握的那些考点、技巧,在真正的知识殿堂里根本登不上大雅之堂。哪怕我们特征值求得再熟练,积分积得再复杂,中国的载人飞船也不会因此而顺利上天。
# 解决
## 解决
学习的时候,不要有负担心理。很多同学在学习知识的时候带着一种学不完或者学不会我就上吊算了的心态,其实这是比较危险的一种精神状态。

View File

@@ -1,16 +1,22 @@
# 2.1.2 浮躁的心理状态
# 现状
## 现状
> 我明明很努力了,但是就是学不懂,群里的同学好像啥都会 WOC<br/>我周围的同学怎么参加竞赛的科研经历丰富的都有就我是废物呜呜呜<br/>我的同学啥都有了但是我什么都没<br/>为什么我室友都脱单了我还是单身狗
> 我明明很努力了,但是就是学不懂,群里的同学好像啥都会 WOC
>
> 我周围的同学怎么参加竞赛的科研经历丰富的都有就我是废物呜呜呜
>
> 我的同学啥都有了但是我什么都没
>
> 为什么我室友都脱单了我还是单身狗
浮躁,往往来源于和他人的比较是具有社会属性的我们的人之常情。
然而,我们往往不能从中获得任何鼓励反而深受打击。
# 解决方案
## 解决方案
如果我在这里说戒骄戒躁一定会被打的(逃)
如果我在这里说戒骄戒躁一定会被打的逃)
学不懂一门课程,大可不必着急,慢慢来,也可以问问学长学姐或者思考一下这门课到底为什么如此组织。
@@ -26,4 +32,4 @@
如果实在不行,来找 ZZM 聊聊吧。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg)

View File

@@ -28,7 +28,7 @@
问题还是没有解决,现在我该怎么做?
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhuhE7qBLHyJKaesHGC033b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhuhE7qBLHyJKaesHGC033b.png)
欢迎大家阅读
@@ -36,7 +36,6 @@
[https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md) 提问的智慧
## 关于如何搜索代码
如果我现在想要把图片读取并转换成灰度图,我该怎么去搜索呢?

View File

@@ -1,12 +1,12 @@
# 2.1.4 书籍的盲目崇拜
# 现状
## 现状
很多同学在学习一个知识的时候,总是喜欢
"我们要学 C 语言,我买一本大黑书看看!"
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png)
诚然,上面的各种书写的非常好,但是我们需要思考的是,阅读这些真的能达到我们想要的目标吗???
@@ -14,7 +14,7 @@
通常情况是,如果你阅读了一句话,用了解释这个词的意思用了三个你不懂的额外的词汇去解释,你去查这三个词汇的时候,又发现了五个你不懂的,无限循环下去。
# 解决
## 解决
因此,当你只是为了学习一个简单的知识,或者说为了完成一个简单的目标的时候,肝书可能不是最高效的选择。最高效的方法可能是需要什么的时候就去学习这么一个单一的知识点,并且将他和现有的体系联系起来

View File

@@ -18,4 +18,4 @@
在你完成这份讲义的时候,希望你可以有选择的阅览一部分,然后带着问题去看某些课,效率也会高很多。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg)

View File

@@ -1,6 +1,6 @@
# 2.1 高效的前提:摆脱高中思维
# 高中思维
## 高中思维
高考,诚然为大众提供了阶级跃迁的途径
@@ -12,20 +12,34 @@
就算你把课本上的内容搞得再烂熟,绝不代表你真正对这门课能有什么理解。
<strong>并且,全部依赖他人给你指明方向的人生已经结束了!</strong>
**并且,全部依赖他人给你指明方向的人生已经结束了!**
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png)
你无法依赖大学里的老师还是家里的父母来为你指明所谓的方向,你的人生只属于你自己,你的道路也只能由你自己来思考。
考研的老师会更加重视你是否有能力与他进行利益交换,公司更在乎你是否可以为公司创造价值,想当然的思考已经无法跟上这个飞速运转的世界了。
# 大学现状
## 大学现状
在这里引用一段上海交通大学生存指南的一段话。
> 在当今流水线式的教育体制下,我们就像廉价的零件一样被生产出来。因为数量巨大,没人会对每一个人的教学质量负责。<br/>领导不会为你负责。对于一个争做世界一流大学的研究型学校,管好科研,管好实验室才是当务之急。<br/>相比之下,本科生教学显得无利可图。教授也不会为你负责。拉到足够的经费发表足够的论文,满足学院要求才是生存大计。<br/>要说管学生,也肯定先要管好自己实验室的硕士博士,而非那一百多人大课堂里的某个本科生。就算是科研任务不太重的一些任课教师,他们也不会为你负责——学不懂?那是因为你智力低,要么就是自己底下不用功。为什么跟你一个班上的某某某同学,人家就能懂?<br/>诚然,就算是老师上课说孟加拉语,一个班上也非常有可能冒出一两个翻翻书看看图就能学到八九不离十的同学(或者根本就是以前学过)。<br/>真正在课堂上口传心授的教学,其质量是不会有人过问的。教学评估会考察实验报告格式是否合格,出勤率是否够,但是绝对不会考察上百人的班上到底有几个听懂了的。<br/>试想一下,每个学院每个系有成百上千的学生,每人有着不同的思想、不同的目标、不同的知识背景、不同的接受力,我们怎么可能去指望一个统一的“教学培养计划”强制应用在每个人头上的时候,能够产生效果?好比说食堂师傅炒一大锅菜给上千人吃,我敢说我分到的那盘,不是炒糊就肯定得夹生。<br/>所谓“教学培养计划”,其科学性必须经过教育权威的论证。然而现实中塞给我们的推荐课表,却让人失望。且不深究选修课的分类、学分、毕业条件每年一个样,三年大变样,使得不少同学毕业前夕竞相奔走;甚至连两门相依赖课程的教学先后顺序都搞错过,这样的教学培养计划,实在让人难以信任
> 在当今流水线式的教育体制下,我们就像廉价的零件一样被生产出来。因为数量巨大,没人会对每一个人的教学质量负责。
>
> 领导不会为你负责。对于一个争做世界一流大学的研究型学校,管好科研,管好实验室才是当务之急。
>
> 相比之下,本科生教学显得无利可图。教授也不会为你负责。拉到足够的经费发表足够的论文,满足学院要求才是生存大计。
>
> 要说管学生,也肯定先要管好自己实验室的硕士博士,而非那一百多人大课堂里的某个本科生。就算是科研任务不太重的一些任课教师,他们也不会为你负责——学不懂?那是因为你智力低,要么就是自己底下不用功。为什么跟你一个班上的某某某同学,人家就能懂?
>
> 诚然,就算是老师上课说孟加拉语,一个班上也非常有可能冒出一两个翻翻书看看图就能学到八九不离十的同学(或者根本就是以前学过)。
>
> 真正在课堂上口传心授的教学,其质量是不会有人过问的。教学评估会考察实验报告格式是否合格,出勤率是否够,但是绝对不会考察上百人的班上到底有几个听懂了的。
>
> 试想一下,每个学院每个系有成百上千的学生,每人有着不同的思想、不同的目标、不同的知识背景、不同的接受力,我们怎么可能去指望一个统一的“教学培养计划”强制应用在每个人头上的时候,能够产生效果?好比说食堂师傅炒一大锅菜给上千人吃,我敢说我分到的那盘,不是炒糊就肯定得夹生。
>
> 所谓“教学培养计划”,其科学性必须经过教育权威的论证。然而现实中塞给我们的推荐课表,却让人失望。且不深究选修课的分类、学分、毕业条件每年一个样,三年大变样,使得不少同学毕业前夕竞相奔走;甚至连两门相依赖课程的教学先后顺序都搞错过,这样的教学培养计划,实在让人难以信任
诚然,杭电不可避免地也会受相应的“学术共同体”的影响,波及了包括但不限于竞赛,授课质量,氛围引导方面诸多的影响。
但是不可否认的,杭电也有不少优秀的老师愿意投身于教育事业当中。并且,杭电仍然有不少教育资源,可以满足一个人的所需所求。<del>(保研除外)</del>
但是不可否认的,杭电也有不少优秀的老师愿意投身于教育事业当中。并且,杭电仍然有不少教育资源,可以满足一个人的所需所求。~~(保研除外)~~

View File

@@ -1,19 +1,24 @@
# 2.2 优雅的使用工具
请大家记住使用工具的基本原则 <strong>你所感到不方便的!都有工具解决!</strong>
::: tip 🤗
如果你也有好的工具推荐,请补充喵~
:::
请大家记住使用工具的基本原则 **你所感到不方便的!都有工具解决!**
因此本小节的核心要义在于推荐一些有趣的有助于提高效率的小工具。
## 电脑软件及插件
因此本小节的核心要义在于推荐一些有趣的有助于提高效率的小工具
## 电脑便捷辅助插件
- [Everything](https://www.voidtools.com/zh-cn/downloads/) 电脑上的全局文件搜索 方便你找到不知道丢哪的文件
- [SpaceSniffer](http://www.uderzo.it/main_products/space_sniffer/download.html) 快速分析硬盘空间占用情况 解放储存,不解放大脑
- [IDM 及百度云脚本](https://greasyfork.org/zh-CN/scripts/436446-%E7%BD%91%E7%9B%98%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B) <del>帮助你将百度云提速</del>(暂不可用)
- [XDM](https://github.com/subhra74/xdm) IDM 的跨平台版本。
- [uTools](https://www.u.tools/) :自由组合插件集(最好用的是 Alt+Space 搜索功能<del>和 PowerToys 二选一</del>)非常强大,比如安装 fileshare 可以在局域网共享超大文件,而且是跨平台的。
- [PowerToys](https://github.com/microsoft/PowerToys) :微软官方出品包含诸多功能,解决 windows 下一些小痛点。
- [Connect to Work or Games from Anywhere | Parsec](https://parsec.app/) :串流小工具,简单来说你就是可以在手机上玩电脑了,远程操作,极致体验<del>(也可以玩游戏)</del>
- [uTools](https://www.u.tools/) :自由组合插件集(最好用的是 Alt+Space 搜索功能)非常强大,比如安装 fileshare 可以在局域网共享超大文件,而且是跨平台的。
- [PowerToys](https://github.com/microsoft/PowerToys) :微软官方出品包含诸多功能,解决 windows 下一些小痛点。
- [Connect to Work or Games from Anywhere | Parsec](https://parsec.app/) :串流小工具,简单来说你就是可以在手机上玩电脑了,远程操作,极致体验~~(也可以玩游戏)~~
- [VMware workstation](../3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.1VMware%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E5%AE%89%E8%A3%85Ubuntu22.04%E7%B3%BB%E7%BB%9F.md):虚拟机就用它!但是最好自己找找盗版,正版要钱。
- [cloc](https://github.com/AlDanial/cloc): 统计代码行数(空白行,注释行,代码行)的小工具
- mv & cp 命令显示进度条: 在复制大文件的时候非常友好,可以通过以下脚本安装
- mv & cp 命令显示进度条: 在复制大文件的时候非常友好,可以通过以下脚本安装Linux系统
```bash
#!/bin/bash
@@ -44,12 +49,17 @@ rm coreutils-8.32 coreutils-8.32.tar.xz
```
## 笔记工具
- [Typora](https://typora.io/) 付费的,<del>你可以去并夕夕啊淘宝啊花个不多于 5 块钱的钱买盗版 😋,</del> 正版 $14.99 ),真的好用,感觉没有 Markdown 编辑器能好用过 Typora🤥
- [MarkText](https://github.com/marktext/marktext) 费的 平替 Typora (?)感觉不太好用 😤
- [Typora](https://typora.io/) 费的~~你可以去并夕夕啊淘宝啊花个不多于 5 块钱的钱买盗版 😋~~ 正版 $14.99 ),真的好用,感觉没有 Markdown 编辑器能好用过 Typora🤥。
- [MarkText](https://github.com/marktext/marktext) 免费的,平替 Typora。
- [MiaoYan](https://github.com/tw93/MiaoYan) 仅支持 apple ,界面挺清爽。
- [思源笔记](https://b3log.org/siyuan/) 一个国产开源的笔记/知识库软件,优势是 本地化、双链、Markdown 语法,与 Obsidian 定位相似,但 Geek 成分和自定义空间相对更高
- [Zotero](https://www.zotero.org/):协助文献阅读还有写笔记,支持与平板同传(同时他是开源的,所以可以添加一些插件)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnO1PEsVd4KY7reeU64spShf.jpg)
- [Notion](http://notion.so): 笔记终结者,非常强大,(设计理念被钉钉,飞书,我来非常抄袭)。在线就可以使用。唯一的缺点是可能需要科学上网。
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnO1PEsVd4KY7reeU64spShf.jpg)
- [Notion](http://notion.so): 笔记终结者,非常强大,(设计理念被钉钉,飞书,我来非常抄袭)。在线就可以使用。
## 文献辅助阅读工具
- [知云文献翻译](https://www.zhiyunwenxian.cn/):可以有效帮助你翻译论文和文章甚至英文书籍
@@ -57,7 +67,7 @@ rm coreutils-8.32 coreutils-8.32.tar.xz
## 浏览器插件
- [沉浸式翻译](https://immersive-translate.owenyoung.com/installation):中英文对照翻译,可以给你英文下面写一小行中文翻译(里面免费的 api 只有谷歌,必应,腾讯,不过够了,也可以自行配置其他 api
- [沉浸式翻译](https://immersivetranslate.com/docs/installation/):中英文对照翻译,可以给你英文下面写一小行中文翻译(里面免费的 api 只有谷歌,必应,腾讯,不过够了,也可以自行配置其他 api
- (你真的不玩原神吗)来试试这款原神浏览器插件 [派蒙 paimon](https://github.com/daidr/paimon-webext) 可以实时显示你的树脂,委托,派遣等情况提示。
- [wappalyzer](https://www.wappalyzer.com/):如果你是个 web 仔,这个插件可以帮你检测网页所用的前后端技术栈。
- [FeHelper--Web 前端助手](https://github.com/zxlie/FeHelper):十几个小工具的集合,包括 base64 离线解码等。

View File

@@ -1,12 +1,12 @@
# 2.3.1 阅读文档(B 百度爬)
# 2.3.1 阅读文档(百度爬)
# 查找教程
## 查找教程
一般帮助我们快速入门的最好的教程是在官网上的。
比如 Pytorch 的官方文档(甚至有中文版哦)。
同时,在 Youtube 和 B 站 上的不少资料也值得称道。
同时,在 Youtube 和 B 站上的不少资料也值得称道。
我不建议各位看黑马程序员,尚硅谷这种培训班的教程,太过细致反而有些本末倒置。
@@ -14,7 +14,7 @@
不要用百度百科!太多错误了!
# 查找资料
## 查找资料
你应该使用下表中推荐的网站:
@@ -24,7 +24,7 @@
- 通常来说, 英文维基百科比中文维基百科和百度百科包含更丰富的内容。
- 一些中文论坛内大家互相抄,很有可能你阅读了很久都没有找到正确的答案,并且英文社区内的内容远远比中文的要好。
# 英文阅读
## 英文阅读
随着科学技术的发展, 在国际学术交流中使用英语已经成为常态: 顶尖的论文无一不使用英文来书写, 在国际上公认的计算机领域经典书籍也是使用英文编著。
@@ -38,10 +38,16 @@
当然也有一些巧妙地方法帮助大家进行阅读,比如知云文献翻译,不要依赖这类软件!
# 科学上网
## 合理使用代理服务
学会科学上网是非常重要的一步哦
学会合理使用代理服务是非常重要的一步哦
机场无法给大家推荐,但是梯子经常用的无非就是 clash, ssr, v2ray
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="m8.85 15.65l8.9-2.35q.375-.1.563-.463t.087-.737q-.1-.375-.437-.562t-.713-.088l-2.45.65l-4-3.75l-1.4.35l2.4 4.2l-2.4.6l-1.25-.95l-.95.25l1.65 2.85ZM20 20H4q-.825 0-1.413-.588T2 18v-4q.825 0 1.413-.588T4 12q0-.825-.588-1.413T2 10V6q0-.825.588-1.413T4 4h16q.825 0 1.413.588T22 6v12q0 .825-.588 1.413T20 20Zm0-2V6H4v2.55q.925.55 1.463 1.463T6 12q0 1.075-.537 1.988T4 15.45V18h16Zm-8-6Z"/></svg>无法给大家推荐,但是<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M5.95 21q-.475 0-.75-.388t-.15-.837L9.5 3.7q.1-.325.35-.512T10.425 3q.5 0 .775.388t.15.837L10.85 6h5.625l.625-2.3q.1-.325.363-.512T18.05 3q.475 0 .75.388t.15.837L14.5 20.3q-.1.325-.35.513t-.575.187q-.5 0-.775-.388t-.15-.837l.5-1.775H7.525L6.9 20.3q-.1.325-.363.513T5.95 21Zm3.525-10h5.6l.825-3h-5.6l-.825 3ZM8.1 16h5.6l.825-3h-5.6L8.1 16Z"/></svg>经常用的无非就是 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M27.19 42.5a89.044 89.044 0 0 1-14.681-1.573s1.431-28.554 5.411-35.39c-.13-.297 2.992 1.212 4.422 6.266a25.557 25.557 0 0 1 4.847-.47"/><ellipse cx="21.24" cy="20.309" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" rx="1.671" ry="2.13"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M27.19 42.5a89.044 89.044 0 0 0 14.681-1.573s-1.431-28.554-5.413-35.39c.03-.2-3.59 1.755-4.421 6.266a25.558 25.558 0 0 0-4.848-.47"/><ellipse cx="33.14" cy="20.309" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" rx="1.671" ry="2.13"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="5.714" d="M12.508 40.927c-1.93-.327-4.948-.31-6.04-3.487c-1.067-3.107.438-6.67 3.742-7.045m15.253-4.008a1.467 1.467 0 0 0 1.473-1.472"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="5.714" d="M28.41 26.387a1.467 1.467 0 0 1-1.474-1.472"/></svg>, <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M40.53 6.78a.26.26 0 0 1 .22.31l-6.39 28.17a.22.22 0 0 1-.28.16l-13.64-4.3a.52.52 0 0 1-.25-.83l11.6-14.17l-.11-.12l-16.07 13.84a.58.58 0 0 1-.54.09l-11.2-4.41a.21.21 0 0 1 0-.38L40.39 6.81h.14Zm-20.4 27l6.69-.69l-6.41 8a.28.28 0 0 1-.5-.18l.17-10.47"/></svg>
如果不知道怎么办,可以求助(找学长)
<style module>
svg {
display: inline-block;
}
</style>

View File

@@ -2,11 +2,11 @@
请克服对论文英文的恐惧,适当的利用翻译软件。
<del>由于笔者只阅读过 CV 领域和</del><del>NLP</del><del>领域的一些文章,且阅读量并不算太高,故对论文的理解不仅有限且仅限于该领域内的论文风格和内容技巧,望读者见谅。</del>
~~由于笔者只阅读过 CV 领域和NLP领域的一些文章,且阅读量并不算太高,故对论文的理解不仅有限且仅限于该领域内的论文风格和内容技巧,望读者见谅。~~
## 论文的一般结构
### 1.title(标题)
### 1. title(标题)
首先是标题部分。
@@ -16,19 +16,23 @@
论文作者会在标题下面指出,当我们的论文阅读量到一定程度之后可以关注一下作者。当我们在关注或研究某一个领域时,该领域的几篇重要论文读下来我们就可以知道哪个作者在该领域较为活跃,谁提出了 Backbone ,谁在挖坑(填坑)。可以通过作者进而检索到你感兴趣的工作或判断论文写作质量。
### 2.abstract(摘要)
### 2. abstract(摘要)
Abstract 是论文中一篇具有独立性的短文,用简单、明确、易懂、精辟的语言对全文内容加以概括,提取论文的主要信息。作者的观点、论文的主要内容、研究成果、独到的见解,这些都会在摘要中体现出来,是需要重点阅读的地方。
摘要在资料交流方面承担着至关重要的作用。摘要会收录到大型资料库中并为读者提供信息,因此我们可以通过摘要索引查找论文。
摘要的四要素:目的、方法、结果和结论称为摘要的四要素。
1目的指出研究的范围、目的、重要性、任务和前提条件不是主题的简单重复。
2方法根据研究的主要内容和发现的问题说明在这个过程中都做了哪些工作。(摘要中的方法不会太过详细,一般只会给出一个名词)
3结果陈述研究之后重要的新发现、新成果及价值包括通过调研、实验、观察取得的数据和结果并剖析其不理想的局限部分。
4结论通过对这个课题的研究所得出的重要结论包括从中取得证实的正确观点进行分析研究比较预测其在实际生活中运用的意义理论与实际相结合的价值。
### 3.introduction(导言)
### 3. introduction(导言)
Introduction 主要是对整篇论文的一个介绍,读者看完 introduction 后就知道论文的几乎所有工作。
@@ -36,19 +40,19 @@ Introduction 会说明论文的主题、范围和研究目的。
然后阐明研究的起因、背景及相关领域简要历史回顾。(前人做了哪些工作、哪些尚未解决、目前进展到何种程度等)这一部分不同的论文情况不同,有些论文会单独拿出来作为一部分(related work)当我们刚进入到某一个领域时我们可以通过这一部分了解该领域的大致研究风格和该篇论文的研究路径get 到作者的研究思路(论文的这个课题存在有着哪些问题以及所面临怎样的挑战,发现前人工作的缺陷以及在此基础上的改进),有时可能会对我们的工作有启发。当然,如果我们对这一领域足够了解,可以不需要看这一部分,研究思路也可以在论文的方法部分自行体会。
### 4.method(提出的算法)
### 4. method(提出的算法)
此处为文章主体,详细介绍了他是怎么做的,<del>如果需要复现的话需要仔细阅读这一部分</del>,无论复现与否都需要详细阅读,理解具体操作与作者的理论并尽可能将二者结合<del>(该领域的某些方面可解释性并不强)。</del>读者不仅可以从该部分具体理解论文工作,还可以从中发现与前人工作的不同,并从中提出进一步改进。
此处为文章主体,详细介绍了他是怎么做的,~~如果需要复现的话需要仔细阅读这一部分~~,无论复现与否都需要详细阅读,理解具体操作与作者的理论并尽可能将二者结合~~(该领域的某些方面可解释性并不强)~~。读者不仅可以从该部分具体理解论文工作,还可以从中发现与前人工作的不同,并从中提出进一步改进。
### 5.experiment(实验)
### 5. experiment(实验)
<del>一般情况为介绍我为什么很牛逼,这里一般可以跳过如果不写文章的话</del>
~~一般情况为介绍我为什么很牛逼,这里一般可以跳过如果不写文章的话~~
该部分一般会晒出工作的效果,我们可以从中更直观的体会工作的改进,甚至可以根据结果直接推断结果好坏的某些原因<del>(不过一般论文中的图片当然都会放效果很好的以便作者吹逼,真想看效果建议复现工作)</del>,大胆并合理的假设推理也是科研工作中不可缺少的一个能力。
该部分一般会晒出工作的效果,我们可以从中更直观的体会工作的改进,甚至可以根据结果直接推断结果好坏的某些原因~~(不过一般论文中的图片当然都会放效果很好的以便作者吹逼,真想看效果建议复现工作)~~,大胆并合理的假设推理也是科研工作中不可缺少的一个能力。
### 6.conclusion(结论)
### 6. conclusion(结论)
<del>Conclusion 结论部分,一般阅读完开头直接阅读结尾,就基本清楚文章脉络结构和思考方案了</del>
~~Conclusion 结论部分,一般阅读完开头直接阅读结尾,就基本清楚文章脉络结构和思考方案了~~
结论和摘要的内容基本相似,但某些论文的结论中可能还会指出对该工作的不足之处,还有该领域内对该工作的一些期望(挖坑)。
@@ -56,19 +60,21 @@ Introduction 会说明论文的主题、范围和研究目的。
视频地址: [如何读论文【论文精读】](https://www.bilibili.com/video/BV1H44y1t75x)
### 第一遍(海选)
<Bilibili bvid='BV1H44y1t75x'/>
### 第一遍(海选)
阅读标题、摘要、结论。花费十几分钟时间了解论文是否适合你的研究方向。
看完之后可以再看一看方法和实验部分重要的图和表,进而判断这篇论文是否适合自己,是否和自己当前在做的工作相似。
### 第二遍(大致把握)
### 第二遍(大致把握)
确定论文值得读之后,快速将整个论文过一遍,不需要知道所有的细节,先尝试去理解论文中重要的图和表,知道每一个部分在干什么,圈出比较重要的相关文献。
若到此为止:知道它解决什么问题,结果怎么样,大概用了什么方法,但是觉得文章很难看不太懂,可以去读他们之前引用的那些文章,读完之后再回头读这篇文章。
### 第三遍(重点研读)
### 第三遍(重点研读)
第三遍是最详细的一遍,当我们在读第三遍时通常意味着我们对该论文的工作很感兴趣了,这时我们需要力争做到知道每一段和每一句都在说什么、干什么。基本了解整个文章的细节,在之后基于他做研究,或者在之后提到它的时候,可以详详细细的复述一遍。

View File

@@ -1,16 +1,16 @@
# 2.3.3 优秀的开源社区
# 什么是开源?
## 什么是开源?
开源是源代码可以任意获取的计算机软件,这种软件的著作权持有人在软件协议的规定下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。
开源协议通常符合开放源代码的定义的要求。
但是后续因为各种原因(有一段有趣的历史,大伙可以去了解一下)开源也变为了很多种形式,比如说较为严格的,如果你使用了我的代码,你就必须也得开源,以及可以自由使用只需要标记参考了哪些源码就行。
这里面有非常多有趣的历史故事以及各种渊源,感兴趣的同学可以自行了解一下
# 灵活使用开源社区
## 灵活使用开源社区
开源社区有时候是我们大伙学习一个新技术,查找某一个资料非常好的一种方式。
@@ -22,7 +22,7 @@
如果说国外的
[GitHub: Where the world builds software](https://github.com/)最好科学上网)(全世界最大的开源社区)
[GitHub: Where the world builds software](https://github.com/)(全世界最大的开源社区)
在本章内容 /3.编程思维体系构建/3.5git与github 中详细介绍了github和git的使用方法大家可以参考一下
@@ -34,94 +34,61 @@ awesome (你想学的东西)
例如 awesome C
# 开源的意义
## 开源的意义
本章内容节选自Datawhale 5位成员在AI TIME的分享《清华、北大、上交大、哈工大、中山大学5位同学眼中的开源》。
## Z世代的开源新态度
杨毅远王琦与江季作为《Easy RL: 强化学习教程》的作者,他们有着丰富的开源经历与感受。
杨毅远:开源收获的是一个正向反馈
在互联网上开源自己的论文代码、项目代码以及学习心得等内容,也有助于和他人沟通交流,收获的也是一个正向反馈。针对问题普通人如何实现开源,杨毅远认为还是要先拥抱开源,不必操之过急,开源工作需要是有意义的工作,是一个漫长的工作。
王琦:开源的过程虽然会占用自己的一部分时间,但这却是一个幸福的烦恼。
论文末尾大多会附上代码地址即代码开源。大家在看到论文代码开源的情况下会认为这篇论文能够复现的可能性比较大。虽然在将开源项目发布到GitHub之后给他人问题答复的过程可能会占用自己的一部分时间但这可以算是一个幸福的烦恼。
江季:敢于开源的人也是一个乐于分享,心态积极的人。
互联网上的开源是需要勇气的,毕竟开源后的代码要在互联网上面临网友们的考验。江季对于开源的领域也有自己独到的见解,他以春秋战国时期的百家争鸣为例,阐述了无论是对于工科生还是文科生,开源这件事都是很适用的。
张文涛:能够与志同道合的人交流,是开源过程中至关重要的一环。
开源不是一个瞬间,而是需要持续地去做,无论是主动还是被动。将项目发布到网络上只是一个起点,之后反复与他人交流和解决问题,进而对项目进行不断的修正。
陈安东:要像种一棵树一样等到自己的开源工作开花结果。
开源可以分为三点:首先是要知道自己想要什么;第二点是做开源一定要有始有终,只有完整的开源工作才能被大家使用和学习,完整的工作才能在之后有优化迭代的空间;第三是要有一个”开源是一个长期的过程”这样的心态。
## 作为年轻一代,我们眼中的企业开源
王琦:企业的目的可能是先通过开源抢占市场,后续再通过推行定制化的服务来盈利。
陈安东:开源是一种企业与市场自我革命的做法,这种革命能够促进技术的发展,最终为用户带来好处。
一个行业的开源企业对传统1对1收费的市场是一个不小的冲击因为这个市场份额也就随着这家免费的开源企业而不断减小。但是由于开源带来的技术分享反而使市场更加集中与优质化技术也随着开源而更快速的迭代从而产生了更好用的产品。
张文涛:开源有利于提升产品的影响力
虽然公司在做开源之前不一定有明确商业目的,但是可能在开源过程中发现一些可盈利的点来开发出其产品线。然后,企业可以将这块收入的一部分反馈到开源的过程之中来增加产品的影响力。
杨毅远:开源不失为一种提高公司知名度和用户信任感的方式
如果是一家中小型的创业公司,是否可以把自己核心的一部分开源出来?这样不失为一种提高公司知名度和用户信任感的方式。此外,当把实验代码开源到网络上之后,人们也希望有其他同领域的专家、研究人员可以一起来滚动更新这个任务。
## 关于未来的开源,我们想说……
江季:开源是一个很有前景的领域,然而现在的开源文化还并不成熟,开源确实是仍然在路上。
开源目前仍然存在不够合格的现象,比如说某些人的开源工作难以复现。开源是一个很有前景的领域,尤其是在促进学术界发展上。然而现在的开源文化还并不成熟,开源网站中占据大部分篇幅的还是广告,并没有形成知识分享的模式,开源确实是仍然在路上。
张文涛:开源的形式丰富多样,暂时不必思考太多,可以先和志同道合的人一起前进。
王琦:三体人的先进在于一代又一代的持续知识共享,我们可以先模仿、学习他人的项目。
我们如今做的东西,可能在历史长河之中早已被他人做过。如果提前了解到这些,可以很大地提升我们的工作效率。如果想做一个优质的开源项目,我们可以先模仿、学习他人的项目。
陈安东:开源应该是一个特别酷的东西,要敢于让别人看到自己的工作。
如今的开源还远远不够,大多数人还停留在在闭门造车的阶段。鼓励大家将自己的项目分享出来让大家来一起参与,接受大家的评价,彼此交流与指出问题,这样不但可以让开源工作更好,也可以让参与开源的大家收获满满。

View File

@@ -12,6 +12,8 @@ Typora
看看下面教程
https://www.markdown.xyz/
https://www.markdown.xyz
以及这个
https://castel.dev/post/lecture-notes-1/
https://castel.dev/post/lecture-notes-1

View File

@@ -2,11 +2,12 @@
作为一名理工科学生,也许英语并不是你的强势,但往往学习又难以避开英语。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png)
下面提供一些英语阅读的方法:
1. <strong>学好英语(顺便过四六级)</strong>
2. 文档阅读:使用浏览器插件,例如:[沙拉查词](https://saladict.crimx.com/)、[划词翻译](https://hcfy.app/)
1. **学好英语(顺便过四六级)**
2. 文档阅读:使用浏览器插件,例如:[沙拉查词](https://saladict.crimx.com/)、[划词翻译](https://hcfy.app/)、[沉浸式翻译](https://immersivetranslate.com/docs/)
3. Youtube 等视频网站的双语字幕 [languagereactor](https://www.languagereactor.com/)。
4. 实用翻译软件[复制即翻译](https://copytranslator.github.io/)。
5. ~~Galgame 翻译 [LunaTranslator](https://github.com/HIllya51/LunaTranslator)~~

View File

@@ -0,0 +1,15 @@
# 2.1.6学会使用AI辅助学习
在过去AI取代人类似乎一直是一件遥远的事情但在 2022 年末OpenAI 的 ChatGPT 发布后在全球引发了一场 AI 热潮ChatGPT 所表现出来的能力让我们思考在不久的未来我们真的会被AI取代吗
在知识储备上,我们人类在 AI 面前绝不占优势,就比如 ChatGPT 是几乎使用了绝大多数西方互联网的优质回答而训练出来的想要在知识储备量战胜AI已经成了天方夜谭但大家也不要为不知道一些知识而焦虑我很欣赏南京大学的蒋炎岩教授说的一句话“大佬和小白的差距并不是知识量的差距而是大佬知道如何问出好的问题搜索引擎会告诉你答案或许未来还可以问 AI ”
假如你已经玩过 ChatGPT ,你会发现它还远没有到真正取代人类的地步,而是它的出现已经能够使教育以及学习方式发生巨大变革。接下去我会给你们一些小建议:
- 如果你希望完成一件事但却不知道怎么做,你可以问搜索引擎 (PS:远离百度! 通常会得到 StackOverflow 上的答案),或是直接问 ChatGPT不过要小心人工智能现在还经常一本正经胡说八道。
- 问出合适的问题,就像你问一个大佬,假如你给出的 Prompt 非常宽泛而模糊无论是谁都没法保障给出的答案是你想要的。比如你问“如何学好数学”你可能会得到“多做题”这样的答案但这并不是你想要的。你应该问“如何学好导数”这样你就能得到更加精准的答案。问ChatGPT也是同样的道理假如你给了它一个非常宽泛的 Prompt ,它也只能给你一个模糊而无用的回答,假如给它的 Prompt 非常准确,那么你得到一个优质的回答的概率也会更高。
- 有时候遇到一些你不愿意从头读到尾的手册这时候去问ChatGPT是一个合适的选择在一个手册里可能你需要的只是其中的一小段但是手册却有几十页此时ChatGPT的优势就体现出来了它会根据你给的 Prompt 从手册中总结你需要的知识告诉你这极大地降低了检索知识的成本所以我觉得ChatGPT更像一个加强版搜索引擎。
- 向AI获取知识在现在的很多时候AI对于知识的掌控和讲解的逻辑性甚至超过了相当一大部分老师或许去听3节长课甚至不如向ChatGPT问几个问题学到的知识更多或许未来的课堂可以变成老师下发一张写着问题的卡片我们只需要发给ChatGPT通过它的回答来学习
- 还有就是在大学你会遇到非常多非常无趣的报告甚至有些报告需要查重没人愿意写这时候ChatGPT就成为了拯救你的时间的利器直接告诉它报告的要求同时限定个数和字数往往它能给出能混出相对高分的优质低信息熵报告当然这适合的是一些水课报告专业课报告别这么搞专业课报告最好用它做来辅助你的写作而不是直接抄袭。
> PS. 不论ChatGPT还是一些别的AI它们的回答都不是绝对准确的使用的时候要带有自己的思考不要盲目相信AI的指示把AI作为你的帮手这能极大提高你的学习效率。

View File

@@ -9,22 +9,27 @@ author:zzm 邮箱 1264517821@qq.com
但是首先各位需要了解几个名词
::: danger 名词提醒
# RTFM
<div style="font-size: 2rem;line-height: 2;">RTFM</div>
Read the f**friendly manual
# STFW
:::
::: danger 名词提醒
<div style="font-size: 2rem;line-height: 2;">STFW</div>
Search the "friendly" website
:::
# 为什么不能直接告诉我?
## 为什么不能直接告诉我?
因为本讲义的目的除了让你学会知识以外,更重要的目的是教给你如何当一个合格的大学生。
一个合格的大学生理应具备独立解决问题的能力。
<strong>并且这是无论是学术界还是工业界都非常重视的基本素养</strong>
**并且这是无论是学术界还是工业界都非常重视的基本素养**
当遇到问题不是赶紧找个大神帮我,而是"我来试试 STFW 和 RTFM, 看能不能自己解决".
@@ -34,17 +39,16 @@ Search the "friendly" website
这也是我们希望大伙能获得的能力,如果把全部信息都塞上去难免有些揠苗助长。
况且现在还有GPT来辅助你去解决问题大大降低了学习的难度不过大家需要谨慎考虑的是现在的机器也会一本正经的胡说八道
况且现在还有ChatGPT来辅助你去解决问题大大降低了学习的难度不过大家需要谨慎考虑的是现在的机器也会一本正经的胡说八道
:::
# 如果真的不知道怎么解决怎么办?
## 如果真的不知道怎么解决怎么办?
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg)
来细看看本章节的内容吧!
# 参考内容 上海交大生存指南
## 参考内容 上海交大生存指南
[https://survivesjtu.gitbook.io/survivesjtumanual/](https://survivesjtu.gitbook.io/survivesjtumanual/)

View File

@@ -1,19 +1,19 @@
# 补充:为什么不要用百度
相信大家都用过百度来搜索一些非技术问题, 而且一般很容易找到答案. 但随着问题技术含量的提高, 百度的搜索结果会变得越来越不靠谱. 坚持使用百度搜索技术问题, 你将很有可能会碰到以下情况之一:
相信大家都用过百度来搜索一些非技术问题而且一般很容易找到答案 但随着问题技术含量的提高百度的搜索结果会变得越来越不靠谱 坚持使用百度搜索技术问题你将很有可能会碰到以下情况之一
- 搜不到相关结果, 你感到挫败
- 搜到看似相关的结果, 但无法解决问题, 你在感到挫败之余, 也发现自己浪费了不少时间
- 你搜到了解决问题的方案, 但没有发现原因分析, 结果你不知道这个问题背后的细节
- 搜不到相关结果你感到挫败
- 搜到看似相关的结果但无法解决问题你在感到挫败之余也发现自己浪费了不少时间
- 你搜到了解决问题的方案但没有发现原因分析结果你不知道这个问题背后的细节
你可能会觉得"可以解决问题就行, 不需要了解问题背后的细节". 但对于一些问题(例如编程问题), 你了解这些细节就相当于学到了新的知识, 所以你应该去了解这些细节, 让自己懂得更多.
你可能会觉得"可以解决问题就行不需要了解问题背后的细节" 但对于一些问题(例如编程问题)你了解这些细节就相当于学到了新的知识所以你应该去了解这些细节让自己懂得更多
如果谷歌能以更高的概率提供可以解决问题的方案, 并且带有原因分析, 你应该没有理由使用百度来搜索技术问题. 如果你仍然坚持使用百度, 原因就只有一个: 你不想主动去成长.
如果谷歌能以更高的概率提供可以解决问题的方案并且带有原因分析你应该没有理由使用百度来搜索技术问题 如果你仍然坚持使用百度原因就只有一个 你不想主动去成长
你或许会觉得翻阅手册太麻烦了, 所以可能会在百度上随便搜一篇博客来尝试寻找解决方案. 但是, 你需要明确以下几点:
你或许会觉得翻阅手册太麻烦了所以可能会在百度上随便搜一篇博客来尝试寻找解决方案 但是你需要明确以下几点
- 你搜到的博客可能也是转载别人的, 有可能有坑
- 博主只是分享了他的经历, 有些说法也不一定准确
- 搜到了相关内容, 也不一定会有全面的描述
- 你搜到的博客可能也是转载别人的有可能有坑
- 博主只是分享了他的经历有些说法也不一定准确
- 搜到了相关内容也不一定会有全面的描述
最重要的是, 当你尝试了上述方法而又无法解决问题的时候, 你需要明确"我刚才只是在尝试走捷径, 看来我需要试试 RTFM 了".
最重要的是当你尝试了上述方法而又无法解决问题的时候你需要明确"我刚才只是在尝试走捷径看来我需要试试 RTFM 了"

View File

@@ -36,6 +36,8 @@ author:wenjing
③ 在初高中参加竞赛的学生的数量和质量有极可能已经有所下降,因为竞赛相关政策的紧缩,稀烂的强基计划替代了对竞赛友好的自主招生,选择全力投身竞赛,拼搏省队的学生有所下降,有基础的学生现在也不见得很强。
UPD at 2023/7/19从长期来看这个结论应该是没有错的但是很可惜如果您是2023届的新生您将遭遇紧缩政策下一波不得不来hdu的竞赛高材生截至笔者更新为止已经有五位NOI银牌选手和两位具备NOI银牌能力的选手提前加入了集训队也许对于零基础的同学而言仍然只要和别的零基础同学竞争保底的三个席位就好了。但从长远来看进队不是结束抢夺比赛机会才是开始。而且如果hdu能抢到这样的生源其他学校的水平大概率也会上涨就算有了比赛机会也很难说会不会拿铜遗憾结尾。如果您出于好奇想了解这荒谬的景象是如何诞生请参阅电子书[《整型溢出》](https://zhuanlan.zhihu.com/p/117660874)
进队的学生零基础偏少,如果你选择这条路你可能需要克服不小的困难
# 我应该以什么态度学习 ACM

View File

@@ -6,7 +6,7 @@
进入 [https://www.luogu.com.cn/](https://www.luogu.com.cn/)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing1.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing1.png)
## 社交模块
@@ -16,11 +16,11 @@
点开题库,我们看见以下界面
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing2.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing2.png)
在上方我们可以筛选我们想要的题目,接下来我们点开 P1000 为例
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing3.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing3.png)
右侧三个模块为折叠状态,下面介绍他们的作用
@@ -34,7 +34,7 @@
点击提交答案
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing4.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing4.png)
左侧可以选择语言类型C++ 用户建议选择 C++14。
@@ -44,7 +44,7 @@ O2 优化是一种优化(废话)假如您的代码复杂度正确但 TLE
怎么知道自己代码的问题出在哪里呢?记录模块是帮助你的好工具。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing5.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing5.png)
AC通过该数据点
@@ -64,7 +64,7 @@ OLE输出超限 放心你见不到的
点开侧栏题单
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing6.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing6.png)
建议新手从官方精选题单开始,由浅入深,由简到难。等到对算法形成概念,针对漏洞补习时可以尝试用户分享题单(到那个阶段已经有很多手段去找题了,刘教练的题单就够你做了)
@@ -76,7 +76,7 @@ OLE输出超限 放心你见不到的
进入 [https://codeforces.com/?locale=en](https://codeforces.com/?locale=en)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing7.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing7.png)
比起 Luogu这样的 UI 设计离 CN 互联网已经很远了然而比起更硬核的一些做题网站CF 的 UI 真是越看越顺眼)
@@ -100,7 +100,7 @@ OLE输出超限 放心你见不到的
进入比赛页面
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing8.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing8.png)
上方为将举办比赛显示开始时间UTC+8 也就是我们时区的时间)和持续时间大多都开始的比较晚,例如笔者就没有这么晚学习的习惯,所以一般赛后写题。比赛分为以下几种类型(例如写在括号里的 Div.2
@@ -114,14 +114,14 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。
## VP
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing9.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing9.png)
这是一场笔者之前赛后补过的 Div.2,画面右下角分别为赛后公告和题解,右侧便是开启 VP 的按钮。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing10.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing10.png)
<em>VP</em><em>模拟赛时的好处就是在虚拟参赛中获得真实比赛才能积累的经验,比如这里笔者发现通过前三题后,我应该先去看看 F 题因为做出来的人更多我有更大的可能性做出来ACM 中题目并不是 100% 按难度排序。</em>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing11.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing11.png)
进入 VP 后,我们可以发现比起正常赛后补题有了明显不同。
@@ -135,25 +135,25 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。
让我们点开 A 题,来看看如何提交答案
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing12.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing12.png)
可以看见,右侧有一个 submit与 luogu 不同的是,你需要上传源代码文件(如 cpp然后选择 G++17 为语言,提交。
当然,你也可以点开上侧的 submit code
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing13.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing13.png)
选择题目、语言,填写代码后提交,就和 Luogu 的方式一样了。
同样,在上侧 MY SUBMISSIONS 处可以查看已提交的代码和状态
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing14.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing14.png)
## PROBLEMSET
同样CF 也有题库
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing15.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing15.png)
如果你只想做某道题而不是某场比赛,这里也许更适合你。

View File

@@ -0,0 +1,79 @@
# 3.2.3 ACM 竞赛从入门到入坟
> 作者:[选择公理](https://github.com/axiomofchoice-hjt)
>
> 利益相关2021 杭电六队2022 杭电一队成员
相信大家从前面的文章中已经了解 ACM 的基本情况,这里就不赘述了。
首先需要强调的是,选择 ACM 这条路非常辛苦每天要花大量时间刷题同时ACM 也是残酷的,唯有实力才能保证你不被集训队淘汰。
这里就不得不提一下参加 ACM 竞赛的一般流程了:
1. 大一上:参加集训队选拔,进入集训队(错过选拔的要用 [Codeforces](https://codeforces.com/) 分数来向老刘申请)。
2. 大一下:主要是个人训练,经历多轮淘汰,期末会组队(三人一队)。
3. 大一暑假:以组队形式参加多校等训练,这些训练将决定你在大二这个赛季能参加几次比赛。
4. 大二:训练或比赛。没比赛资格没关系,你可以沉淀,大三还有机会。
5. 大三同上,但是也有选择退出的。
## 第一阶段
打 ACM 要趁早。从上面流程图可以看出来,大一入学就应该决定好了,然后是学习,再然后参加选拔(冷知识:集训队不是想进就能进的)。
### 群
首先是加群。每一届老刘都会弄个杭电 ACM 新生群,没有门槛的。想要加这个群,可以问一问杭电的其他群 / 学长学姐。
群里主要关注两件事,一个是 ACM 公选课,一个是选拔。然后有问题也可以丢群里。
### 公选课
老刘每学期都有公选课,大一上的时候可以去旁听。公选课的内容和选拔是相关的,课讲了哪些,选拔就考哪些。所以,跟上课程进度是很有必要的。
### 要学什么
编程语言C/C++)是算法的前提,而公选课是不会教你语言的,得自学。零基础的同学要注意了,千万不要跟着 C 语言的课来学,太慢了。尽量在一个礼拜内学完 C 的基础内容指针可以跳过然后跟上公选课。C++ 可以晚点再学。
说明一下,语言其实包含很多语法,但是 ACM 用得到的只是其中的一个子集。像 C 的指针C++ 的模板,都是很难但是鸡肋的知识点。如果你要做工程,那这些语法都得学。
学会语言后,可以找一个算法书(算法竞赛入门经典(刘汝佳),算法赛进阶指南(李煜东)等等)系统学习各种算法。
提醒一下这里讲到的所有东西都要上机实践ACM 非常注重实践。你在开始学语言的时候就要多上机。
### 选拔
在大一上 10 月开始,每个月至少 1 场选拔赛(上机编程的模式),每场比赛都会根据参选人员的实际表现确定若干数量的同学入围集训队。
除了选拔,还有一种进队方法那就是 [Codeforces](https://codeforces.com/)。Codeforces 每个账号都会有一个分数rating打 Codeforces 比赛打得好就上分,反之就掉分。只要大一上你的 rating 连续三次达到 1400具体以老刘为准就可以向老刘申请入队。事实上这种方法甚至到了大二都是可以的大二你的 rating 可能要 1900不过几乎没有人这么做所以还是要趁早。
大一上会选拔 50-60 人,大一下会保留 20 人左右。(仅供参考)
## 第二阶段
恭喜你,你已经学完了基础算法,可以进入以刷题为主的学习模式了。
刷题平台OJ有很多如果没有特别适合你的那就去刷 [Codeforces](https://codeforces.com/)。因为这个平台比赛多,老刘认可。建议 Codeforces 的每场比赛都参加(如果时间不好可以第二天补上)。
说到时间Codeforces 比赛最常见的时间是 22:35 到 00:35Codeforces 是俄罗斯的有时差所以时间有点阴间。ACMer 其实很多都是熬夜党。
打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Axiomofchoice_1.png)
为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。
另外建议大家整理一个自己的模板(算法套路),这里推荐几个资料供参考:[OI Wiki](https://oi-wiki.org)[Kuangbin 模板](https://kuangbin.github.io/2018/08/01/ACM-template/)。想要验证模板可以去 [luogu](https://www.luogu.com.cn/)luogu 收录了很多模板题。
## 第三阶段
恭喜你,你应该已经度过淘汰阶段,到了组队环节了,祝愿你组队能抱到大腿。
有了队伍,可以考虑一下分工问题,包括读题、键盘手、各种算法类型等分工。这里建议对于任何一类问题(比如数据结构),队伍里要有至少两个人擅长,因为两个人讨论解决问题比一个人要快很多很多。而在比赛中期,最好的策略也是双开,即两个人研究一题,剩下一个研究另一题(不过这只是经验之谈了)。
如果你在激烈的竞争中获得参赛资格,那么你基本可以认为你有至少银牌的实力了。(~~拿了铜牌及以下老刘会生气的~~
## 退役的姿势
打 ACM 很多是为了方便找工作的,但是作者这届找工作太难了😭,光凭借 ACM 奖牌是远远不够的,要拥有好多其他能力。
不管你 ACM 是否取得了成绩,建议退役后要好好做规划,多了解行情,选择好的方向进行研究。

View File

@@ -10,7 +10,7 @@
首先附上一张经典老图
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg)
## C 语言/C++
@@ -56,6 +56,6 @@ Python 在图里是电锯,适合干比较“狂野”的任务,也是深度
<strong>频繁应用于</strong><strong>W</strong><strong>eb 开发,安卓应用等等。</strong>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg)
当然还有各种形形色色的编程语言等着同学们去探索。

View File

@@ -8,7 +8,7 @@
尝试借鉴他人的代码也未尝不可,但是要保证每一行都看懂哦
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png)
# 我感觉讲义写的不够细
@@ -67,6 +67,6 @@ NJU-ICS-PA 南京大学计算机系统基础
# <strong>坚持了好久还是搞不定, 我想放弃了</strong>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg)
也许是你坚持的姿势不对,来和 ZZM 聊聊吧

View File

@@ -2,9 +2,11 @@
初学 C 语言,第一个问题莫过于用什么软件编写 C 语言程序。学校的老师可能会推荐包括但不限于 VC6.0CodeBlocksdevC++Visual Studio2013 等,如果你的电脑不是老年机,那么以上软件衷心建议你不要去使用,过于老旧了。
# Windows-Visual Studio
## Windows-Visual Studio
[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT?vd_source=699341ff80cb01917fb43665199a48dd)
[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT)
<Bilibili bvid='BV1Xt411g7jT'/>
Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言的开发平台,有“宇宙第一 IDE”之称功能丰富开箱即用。目前更新到 2022 版。
@@ -16,7 +18,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言
选择社区版
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png)
社区版和专业版等的区别:社区版免费,功能上几乎无差别
@@ -24,7 +26,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言
选择 C++ 桌面开发其他不用选有需要了再说。另外Python 开发不好使,不要像我一样选 Python 开发。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkjmKcCxIgRIzA5kyUZckye.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkjmKcCxIgRIzA5kyUZckye.png)
安装完成后,一般来说 VS 不会自动创建桌面快捷方式,你需要到开始菜单中启动 VS。
@@ -38,19 +40,19 @@ VS 是项目制,你需要创建一个项目才能开始编写代码并运行
打开 VS会打开如下界面我使用深色主题在此处单击“创建新项目”
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png)
在创建新项目页面中选择项目模板为控制台应用(空项目亦可,后续手动添加.c 源文件),并单击下一步
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png)
为你的项目起一个名字以及选择项目的位置一般默认即可如果你有强迫症C 盘一定不能放个人数据,请自行修改。完成后单击“创建”
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkxd472wIT39DbEiBsyPWzf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkxd472wIT39DbEiBsyPWzf.png)
自此就创建了一个项目了,你将会到达如下界面:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png)
其中,左侧(如果在一开始没有选择 C++ 开发环境的话可能在右侧)为资源管理器,列出了本项目所用到的所有文件,包括代码(外部依赖项、源文件、头文件),以及将来开发图形化界面所需的资源文件;最中间占据面积最多的是代码编辑器窗口,你以后将会在这里编写你的 C 语言代码。最下面是输出窗口,源代码进行编译时,会在此处给出编译进度以及可能的代码中的错误。
@@ -66,7 +68,7 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合
当你编写完自己的代码后,即可单击“本地 Windows 调试器”(或者使用快捷键 F5进行“运行”。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png)
你可能会发现在“本地 Windows 调试器”右侧还有一个绿色三角形,并且单击这个也可以“运行”,这两个的区别在于“本地 Windows 调试器”是调试运行,右侧那个是不调试直接运行。
@@ -74,17 +76,17 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合
如果你的代码被 VS 提示“This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.”
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png)
需要你在项目-xxx 属性xxx 是你的项目名)-C/C++-代码生成-安全检查里将安全检查禁用
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniHhCIUQY0oB3ALlxqgciLd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniHhCIUQY0oB3ALlxqgciLd.png)
## 调试
IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统。通过调试,可以快速定位代码中没有被编译器检查出来的逻辑错误。如果需要调试,则可以在这个位置单击,打下断点,并且运行程序,程序运行时,就会在此处暂停下来,暂停时就可以查看各个变量的值了。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnydHyaNPqUEVVWmbdGofX0d.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnydHyaNPqUEVVWmbdGofX0d.png)
## <strong>深色主题</strong>
@@ -94,15 +96,15 @@ IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统
### 仔细查看报错
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png)
如果程序代码中出现红色波浪线,则表示该处代码有“错误”,并且该处的错误会同步显示在下面的这个位置,单击即可看到错误详情。如果代码中出现绿色波浪线,则表示该处代码中有警告。警告和错误的区别是警告可以通过编译运行,但编译器认为你这里可能写错了;错误是完全不可以通过编译。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png)
### 善用提示
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2ouk043lNQEUkVkIS7bSSd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2ouk043lNQEUkVkIS7bSSd.png)
当你打一些函数名或者关键字时VS 会给出你语法提示,如果这个提示正确,按下 Tab 键即可将这个提示补全到你的代码里;或者你也可以跟着这个提示打一遍,防止打错关键字。
@@ -136,7 +138,7 @@ vscode 的项目和 VS 不同vscode 的项目比较松散,并没有 VS 那
编写完代码后,保存文件,并点击运行-启动调试
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnim98FJybpkGl8sfqxP9v9b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnim98FJybpkGl8sfqxP9v9b.png)
此时会弹出如下选择框,我的电脑上同时安装有 VS 和 gcc 编译器因此有两个大部分的电脑上应该只有一个“C++ (Windows)”,选择你电脑上的编译器并运行即可。
@@ -162,25 +164,25 @@ CLion 是 jetbrains 家族的 C 语言 IDE
XCode 是 mac 官方的 IDE能编写所有 mac 家族设备的软件。但缺点是没有中文。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png)
打开以后选择 Create a new Xcode project选择 macOS-Command Line Tool
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbnrVCmNGfriHhU5pL76gsd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbnrVCmNGfriHhU5pL76gsd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnjaObP5JzpICUx1PMO9MQg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnjaObP5JzpICUx1PMO9MQg.png)
两个空里第一个填项目名,第二个随便填就行
next 后选择项目保存的位置,之后即可到达以下界面:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png)
点左上方小三角即可运行
在行号上点击并运行即可调试
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmRygjmZfwFzODP2N6bVoEh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmRygjmZfwFzODP2N6bVoEh.png)
# Linux

View File

@@ -3,7 +3,7 @@
- 本篇不需要任何前置知识,推荐在学习 C 语言和学完 C 语言后各看一遍。
- 我们鼓励你在解决问题的时候进行思考,锻炼解决问题的能力,而不只是成为一个做代码翻译工作的“码农”。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/YAOvb6gquofiAYxsn3tcxcCYngf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/YAOvb6gquofiAYxsn3tcxcCYngf.png)
解决编程问题的常见误区:
@@ -13,7 +13,7 @@
如果你计划得足够好并且代码编写得正确,你的代码将在第一次工作。即便它第一次不起作用,那么你至少有一个对于代码如何调试的可靠计划。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png)
## Work an Example Yourself

View File

@@ -4,7 +4,9 @@
以下方式难度由易到难,但并不意味着收获由小到大:
1.Video[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1?spm_id_from=333.337.search-card.all.click&vd_source=da5a5affb1b0c71c0d7e410b1d1a3c17)(非常基础,缺点是只看视频学的过浅)
1.Video[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1)(非常基础,缺点是只看视频学的过浅)
<Bilibili bvid='BV19W411B7w1'/>
2.MOOC[翁凯 C 课程的 MOOC 慕课](https://www.icourse163.org/course/ZJU-9001)(同上,慕课的习题和 Projects 性价比不高,几乎没有差别)
@@ -34,6 +36,6 @@
计算机思维与计算机科学与编码能力
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png)
### <strong>CS education is more than just “learning how to code”!</strong>

View File

@@ -6,13 +6,13 @@
使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。例如,使用链表存储 {1,2,3},各个元素在内存中的存储状态可能是:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png)
可以看到,数据不仅没有集中存放,在内存中的存储次序也是混乱的。那么,链表是如何存储数据间逻辑关系的呢?
链表存储数据间逻辑关系的实现方案是:为每一个元素配置一个指针,每个元素的指针都指向自己的直接后继元素,如下图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png)
显然,我们只需要记住元素 1 的存储位置,通过它的指针就可以找到元素 2通过元素 2 的指针就可以找到元素 3以此类推各个元素的先后次序一目了然。像图 2 这样,数据元素随机存储在内存中,通过指针维系数据之间“一对一”的逻辑关系,这样的存储结构就是链表。
@@ -20,13 +20,13 @@
在链表中,每个数据元素都配有一个指针,这意味着,链表上的每个“元素”都长下图这个样子:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncRc5OKZROtxC9rpQYxrjvf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncRc5OKZROtxC9rpQYxrjvf.png)
数据域用来存储元素的值,指针域用来存放指针。数据结构中,通常将这样的整体称为结点。
也就是说,链表中实际存放的是一个一个的结点,数据元素存放在各个结点的数据域中。举个简单的例子,图 3 中 {1,2,3} 的存储状态用链表表示,如下图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png)
在 C 语言中,可以用结构体表示链表中的结点,例如:
@@ -66,7 +66,7 @@ typedef struct Node* Link;
例如,创建一个包含头结点的链表存储 {1,2,3},如下图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png)
## 链表的创建
@@ -104,7 +104,7 @@ while (Judgement)
}
```
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png)
### 创建结点——尾插法
@@ -121,7 +121,7 @@ while (Judgement) //for同理
}
```
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png)
## 链表的基本操作
@@ -176,7 +176,7 @@ int GetElem(Link *L, int i; int *e)
例如,在链表 `{1,2,3,4}` 的基础上分别实现在头部、中间、尾部插入新元素 5其实现过程如图所示
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png)
从图中可以看出,虽然新元素的插入位置不同,但实现插入操作的方法是一致的,都是先执行步骤 1 ,再执行步骤 2。实现代码如下
@@ -207,7 +207,7 @@ int ListInsert(Link *L, int i, int e)
对于没有头结点的链表,在头部插入结点比较特殊,需要单独实现。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png)
和 2)、3) 种情况相比,由于链表没有头结点,在头部插入新结点,此结点之前没有任何结点,实现的步骤如下:
@@ -253,7 +253,7 @@ temp->next=temp->next->next;
例如,从存有 `{1,2,3,4}` 的链表中删除存储元素 3 的结点,则此代码的执行效果如图 3 所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png)
实现代码如下:
@@ -282,7 +282,7 @@ int ListDelete(Link *L, int i, int* e)
对于不带头结点的链表,需要单独考虑删除首元结点的情况,删除其它结点的方式和图 3 完全相同,如下图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png)
实现代码如下:
@@ -319,7 +319,7 @@ int ListDelete(Link *L, int i, int* e)
如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngx7ZPA7pONbJo82LbNCO1g.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngx7ZPA7pONbJo82LbNCO1g.png)
出列顺序依次为:
@@ -339,10 +339,10 @@ int ListDelete(Link *L, int i, int* e)
为了使空链表和非空链表处理一致,我们通常设一个头结点,当然,并不是说,循环链表一定要头结点,这需要注意。循环链表带有头结点的空链表如图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png)
对于非空的循环链表如图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngoLTiM9wto9uCGzH7nkjkW.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngoLTiM9wto9uCGzH7nkjkW.png)
循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是 p->next 不等于头结点,则循环未结束。

View File

@@ -20,7 +20,7 @@
当然,如果你选择跳过,也不会对 python 开发那里造成非常大的影响但是你会错失一个非常宝贵的学习机会。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg)
在 1980 年代, [文字冒险](http://en.wikipedia.org/wiki/Text_adventure) 是一种受人尊敬的电脑游戏类型。但是时代已经变了,在 21 世纪,它们与 带有 3D 引擎的现代 [MMORPG 相比显得苍白无力。](http://en.wikipedia.org/wiki/Mmorpg)书籍在电影的兴起中幸存下来,而基于文本的游戏很快就输掉了与图形游戏的战斗。“互动小说”由一个活跃的社区保持活力,但它的商业价值早已不复存在。

View File

@@ -28,7 +28,7 @@
- 打印变量, 断点, 监视点, 函数调用栈...
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png)
# 调试理论

View File

@@ -2,7 +2,7 @@
请在开始进行 C 语言编程之后查阅使用
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHXggg6eLy86vFmb4shOksh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHXggg6eLy86vFmb4shOksh.png)
# GDB 是什么?

View File

@@ -1,6 +1,6 @@
# C 的历史问题undefined behavior
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png)
简写为 UB

View File

@@ -6,7 +6,7 @@
值得一提的是,我不会在本教程讲授过于基础的概念,但是会贴出你可能需要学习的内容。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png)
同时我要说的是C 语言为了适配多种多样的硬件以及各式各样的操作,他对非常多的 undefined 操作不做太多限制,也就是说你可能会出现各种各样的问题,<del>甚至把你电脑炸了</del>

View File

@@ -22,7 +22,7 @@
- Linux 下
```
```bash
# Debian , Ubuntu
sudo apt install git
```
@@ -35,7 +35,7 @@ sudo apt install git
安装好之后,你需要先进行一些配置工作。在终端里输入以下命令:
```
```bash
git config --global user.name "Zhang San" # your name
git config --global user.email "zhangsan@foo.com" # your email
```
@@ -44,7 +44,7 @@ git config --global user.email "zhangsan@foo.com" # your email
你会通过 `git clone` 命令来拉取远程仓库的代码,里面已经包含一些 `git` 记录,因此不需要额外进行初始化。如果你想在别的实验、项目中使用 `git` ,你首先需要切换到实验、项目的目录中,然后输入
```
```bash
git init
```
@@ -54,7 +54,7 @@ git init
使用
```
```bash
git log
```
@@ -64,7 +64,7 @@ git log
使用
```
```bash
git status
```
@@ -76,23 +76,23 @@ git status
首先你需要使用 `git status` 查看是否有新的文件或已修改的文件未被跟踪;若有,则使用 `git add` 将文件加入跟踪列表,例如
```
```bash
git add file.c
```
会将 `file.c` 加入跟踪列表。如果需要一次添加所有未被跟踪的文件,你可以使用
会将 `file.c` 加入**跟踪列表**。如果需要一次添加所有未被跟踪的文件,你可以使用
```
```bash
git add -A
# or
# 或者
git add .
```
但这样可能会跟踪了一些不必要的文件(二进制文件),例如编译产生的 `.o` 文件,和最后产生的可执行文件。事实上,我们只需要跟踪代码源文件即可。为了让 `git` 在添加跟踪文件之前作筛选,你可以编辑 `.gitignore` 文件( 没有的话手动创建 文件名就叫这个 ),在里面给出需要被 `git` 忽略的文件和文件类型。
这个网页可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件
[这个网页](https://www.toptal.com/developers/gitignore) 可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件
```
```bash
# .gitignore文件示例
.idea # 编辑器配置
__pycache__ # 缓存文件夹
@@ -107,13 +107,13 @@ file.o # 一个编译后的文件
把新文件加入跟踪列表后, 使用 `git status` 再次确认. 确认无误后就可以存档了, 使用
```
```bash
git commit -m "...comment..."
```
提交工程当前的状态(注释)。其中 `...comment...` 是你本次提交的注释( 一般在注释中简略写出本次提交干了什么)以下为注释规范,养成良好习惯请遵守:
```
```bash
模板:
type(scope): subject
@@ -149,7 +149,7 @@ subject为commit概述
如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用光玉来救你一命了。首先使用 `git log` 来查看已有的存档,并决定你需要回到哪个过去。每一份存档都有一个 `hash code`,例如 `b87c512d10348fd8f1e32ddea8ec95f87215aaa5` , 你需要通过 `hash code` 来告诉 `git` 你希望读哪一个档。使用以下命令进行读档:
```
```bash
git reset --hard b87c
```
@@ -161,7 +161,7 @@ git reset --hard b87c
当然还是有办法来避免上文提到的副作用的,这就是 `git` 的分支功能。使用命令:
```
```bash
git branch
```
@@ -169,7 +169,7 @@ git branch
读档的时候使用以下命令:
```
```bash
git checkout b87c
```
@@ -178,13 +178,13 @@ git checkout b87c
- 查看 `b87c` 存档的内容
- 使用以下命令切换到其它分支
```
```bash
git checkout 分支名
```
- 对代码的内容进行修改,但你不能使用 `git commit` 进行存档,你需要使用
```
```bash
git checkout -B 分支名
```
@@ -200,23 +200,50 @@ git checkout -B 分支名
## 全球最大男性交友网站 —— Github
::: tip 🤡
想象一下你正在进行人生中第一次软件开发的小组合作。
你把任务分配好让组员去写代码中的某一个模块。组员写好之后发给你。
你一看通过QQ发过来的是一个文件啊文件 比如说 `学生管理模块.c` 你打开一看,我去是**乱码**。
你废了九牛二虎之力把他的 GBK 编码改成 UTF8 之后,细细地品鉴这段代码,发现我去有严重逻辑错误,而且代码很不规范。
你通过QQ告诉他这一行有问题能不能改一下。他说好的我改一下。
然后又发了文件啊文件给你,如此反复循环,你俩已经互相传了好几百个源代码文件,很没效率!
:::
> 通过Git版本控制管理自己的代码 再通过Github来发布、同步互联是一个很好的解决方案
简介
作为开源代码库以及版本控制系统Github 拥有超过 900 万开发者用户。随着越来越多的应用程序转移到了云上Github 已经成为了管理软件开发以及发现已有代码的首选方法。
页面大概是这样:
页面大概是这样(老图)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHemi9HkeAG1fgoznHbHLrc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHemi9HkeAG1fgoznHbHLrc.png)
### Git 和 Github
[GitHub](https://github.com/)[ ](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
[GitHub](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
### Git 绑定 Github
::: tip 🤗
下面将教学如何注册这个网站,并给[本项目](https://github.com/camera-2018/hdu-cs-wiki)点一个小小的 kita kita 的 star🎇
:::
#### 第一步:注册账号
[GitHub 官网](https://github.com/))右上角 sign up 会有一个非常酷炫的界面指引你注册 🥳
[GitHub 官网](https://github.com/))右上角点击 sign up 会有一个非常酷炫的界面指引你注册 🥳
他会用一个像是命令行交互的方式引导注册,你需要依次填写 `邮箱``密码``用户名(此为 ID 非昵称)``是否同意邮箱广告推送``机器验证码` 之后创建账户,随后会给你填写的邮箱发送验证码,填写注册。
随后是一个欢迎问卷😋随便填写、如果他问你什么PRO Plan 选择 free 不付费就好。
最后你访问[GitHub 官网](https://github.com)应该会显示你的 dashboard 管理台界面
#### 第二步:创建 SSH Key 并获取公钥
@@ -226,7 +253,7 @@ git checkout -B 分支名
如果没有,打开 Shell Windows 下打开 Git Bash <em>前提是你已经安装好了 git 在桌面右键应该会有 Git bash here 选项 </em>),创建 SSH Key
```powershell
```bash
ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电子邮件地址
```
@@ -234,32 +261,33 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电
#### 第三步:绑定 Github
登陆 `GitHub`,打开 `settings`
登陆 `GitHub`点击右上角自己的头像,打开 `settings`
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-12-32.png)
然后打开左侧栏 `SSH and GPG`` keys` 页面
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1HbQct335qvZ71tGNu7jne.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1HbQct335qvZ71tGNu7jne.png)
然后,点 `New SSH Key`,填上任意 Title在 Key 文本框里粘贴 `id_rsa.pub` 文件的内容即可
#### 第四步:创建仓库并和本地绑定
绑定完 GitHub 然后你可以创建仓库了
首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库
绑定完 GitHub 然后你可以创建仓库了
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png)
首先在 GitHub 主页,找到 `New` 或者 `Create repository` 一个绿色的按钮,创建一个新的仓库
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png)
然后填上这个仓库的大名就可以创建了
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsN133WrLrbxsX8JgvsQmif.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsN133WrLrbxsX8JgvsQmif.png)
根据之前学习的方法在本地创建完 git 仓库之后
在 git bash 中输入:
```powershell
```bash
git remote add origin git@github.com:yourname/gitexample.git
# 请将yourname换成自己的id
```
@@ -268,45 +296,61 @@ git remote add origin git@github.com:yourname/gitexample.git
或者是直接 git clone 下来
```powershell
```bash
git clone git@github.com:yourname/gitexample.git
```
> 以上方法是基于 ssh 方式的,下面方法是基于 HTTPS 方式的
或者你可以跟随新创建之后的指引,`…or create a new repository on the command line` 内他描述了如何创建一个文件夹、创建一个README.md的文件然后和github仓库绑定。
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-19-18.png)
### 下载代码——clone
拷贝他人存档也未尝不可,而我们如果用他人存档时,次次都需要一样一样的拷贝文件和代码未免太过折磨,下面简单介绍如何使用
```powershell
git clone [url]
```bash
git clone <url>
```
接下去对着下面这个 GitHub 的代码使用一下
首先,代码的 url 在下图所示的位置
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTiaT2EnNfKVkretPsyajVd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTiaT2EnNfKVkretPsyajVd.png)
然后复制完代码后切换回我们的命令行
```bash
e: #powershell or cmd
# 进入到想要存储该代码的地方
# powershell or cmd
# 进入cd到想要存储该代码的地方(父文件夹目录)
git clone https://github.com/camera-2018/git-example.git
```
> 这里使用的[例子](https://github.com/camera-2018/git-example)是我的仓库,当然你也可以用你自己的仓库。
>
> 如果你使用我的仓库的话,你 clone 过后在你自己电脑更改的文件等东西,是没法直接提交回来的(因为你没有我仓库管理权限)
>
> 如果你非要给我的仓库添加东西呢 也是可以,参照下面的 PR Pull Request教程
一阵抽搐过后就下载好了
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png)
注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用
::: tip
用完之后别忘记给 camera-2018 点个 follow 😋 `呃呃 follow 没用 star 有用`
:::
注意:失败就重试吧 还失败建议使用魔法
注意:失败就重试吧 还失败建议使用魔法(非国内网你懂得)
### 提交和合并分支
如图 我在仓库里新建了 `helloworld.c` 并且写了一些代码
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZpPsp4FP78auolzHvCKP0g.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZpPsp4FP78auolzHvCKP0g.png)
接下来是提交操作
@@ -314,7 +358,7 @@ git clone https://github.com/camera-2018/git-example.git
git status #看一下文件暂存区
```
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png)
红色表示文件没有提交到暂存区 我们要提交
@@ -324,7 +368,7 @@ git status #看一下文件暂存区
git add . #将没有提交的所有文件加入暂存区
```
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYHd076RAqfDmHjbUkeNSvg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYHd076RAqfDmHjbUkeNSvg.png)
绿色表示所有文件已加入暂存
@@ -332,61 +376,131 @@ git add . #将没有提交的所有文件加入暂存区
git commit -m "feat(helloworld): add helloworld file"
```
将刚才加入暂区的文件发起了一个提交 注释`feat(helloworld): add helloworld file`
将刚才加入暂区的文件发起了一个提交提交注释commit message`feat(helloworld): add helloworld file`
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni2dupDzNO8qTWPAxS5c67b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni2dupDzNO8qTWPAxS5c67b.png)
1. 如果这是你自己的仓库有权限 你就可以直接使用
1. 如果这是你自己的仓库有权限(本人仓库或 Collaborators 有权限的情况下)你就可以直接使用
```bash
git push origin main # origin是第四步里remote add起的远程名字
# main是分支名
```
```bash
git push origin main # origin是第四步里remote add起的远程名字
# main是分支名
```
上传本次提交
上传本次提交
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png)
1. 如果你没有本仓库的主分支提交权限 可以提交 prpull requests
2. 如果你没有本仓库的主分支提交权限 可以提交 PRPull Requests
这里假设我是协作者 无主分支权限
**第一种情况:这里假设我是协作者 无主分支权限,但有创建分支权限**
首先创建一个新分支 命名为 `yourname-dev`
首先创建一个新分支 命名为 `yourname-dev`
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaS7aOzdt31vsZZx8R1s33e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png)
然后按照上面的方法 `git clone` 并切换到你刚创建的分支
然后按照上面的方法 `git clone` 并切换到你刚创建的分支
```bash
git switch camera-2018-dev
```
```bash
git switch camera-2018-dev
```
然后提交一个文件 这里使用 vscode 自带的 git 工具试试
然后提交一个文件这里直接使用 vscode 自带的 git 工具试试 (很方便、不用敲命令行)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png)
点暂存所有更改 写好 comment 之后点提交
点暂存所有更改 写好 comment 之后点提交
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png)
最后点同步更改上传
最后点同步更改上传
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png)
如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮
如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png)
点它创建 pr
点它创建 PR
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png)
这样管理本仓库的人看到 pr 请求就可以 merge 合并辣
这样管理本仓库的人看到 pr 请求就可以 merge 合并辣
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png)
实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧
实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧
**第二种情况:我不是协作者、我什么权限也没有,我看了这个 public 项目后觉得很好但是有一些问题,我要给他贡献一些代码**
可以点击仓库右上角的 fork
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-34-21.png)
这样会在你的名下多出来一份这个同名仓库,而这个仓库你是拥有所有权限的,你可以 clone 你这个同名仓库,更改代码,提交代码之后
回到源仓库点击 Pull Request 然后创建 PR `New pull request`
最上面会提示你说
Comparing changes
Choose two branches to see whats changed or to start a new pull request. If you need to, you can also **compare across forks** .
点击小蓝字 `compare across forks` 这会让你对比你fork仓库和源代码仓库的提交记录之后就可以创建 PR 了,原作者看到了会合并。
### 其他功能
问题跟踪GitHub的问题跟踪功能可用于报告软件中的问题、错误和功能请求并进行讨论、分配和解决。
Wiki页面用户可以创建和编辑与存储库相关的Wiki页面用于提供项目的文档、指南、示例代码等。
Pull请求Pull Requests使用者可以将自己的代码变更提交给其他项目的所有者并请求合并到主干代码中。
项目管理GitHub提供项目管理功能包括任务管理、里程碑milestones、项目板project boards等工具可用于组织和跟踪项目的进展。
部署功能GitHub可以与各种持续集成和部署CI/CD工具集成帮助开发人员自动化构建、测试和部署他们的应用程序。
统计信息GitHub提供有关存储库活动和贡献者的统计信息例如提交图表、活动日历等有助于跟踪和分析项目的发展。
社交功能:用户可以关注其他用户、存储库和组织,接收他们的更新和活动通知,并与他们进行交流和讨论。
代码审核Code ReviewGitHub的Pull请求功能允许团队成员对代码进行审查和讨论以确保代码质量和最佳实践。
集成和扩展GitHub支持与其他工具和服务的集成例如持续集成CI工具、代码质量检查工具、项目管理工具等。
页面托管GitHub Pages功能使您可以托管静态网站和文档这在展示和共享项目文档、演示和博客等方面非常有用。
然后还有一些比如说 Copilot 之类的有用的功能。
[Copilot](https://github.com/features/copilot) 是 GitHub 推出的一款基于人工智能技术的代码辅助工具。它使用了机器学习模型 codex并针对编写代码的场景进行了训练。
Copilot 可以根据上下文和输入的提示,为开发人员生成代码建议和自动完成。它可以通过分析现有代码库、注释和上下文来生成代码片段,提高编码效率并减少重复劳动。
## [Copilot](https://github.com/features/copilot) 白嫖教程
你需要学生认证你的 Github 账号。
地址在 https://education.github.com/students 点击 `Sign up for Global Campus` 来开始认证,下面会让你输入学校,绑定学校邮箱(杭电为 @hdu.edu.cn 结尾的邮箱)(如果你是杭电新生的话,可能要等到智慧杭电账号发放时才能注册杭电邮箱)并上传**学生证明**从21年开始这个验证越来越严如果不过的话你可以尝试 `学生证第一页`、`学生证第一页英文翻译(像有道翻译那样 P 图上去)`、`学信网学籍证明英文翻译(英文也是 P 上去)`
通过了的话你的账户会有 Pro 标识 然后你可以享受的 Github 学生包里包含[这些东西](https://education.github.com/pack)
里面比较有用的有
- JETBRAINS 全家桶的免费用我没用我用的是jb自己家的验证方式不是github
- name.com 家的一个一年期的免费域名(大概价值吧 六七十块钱?)
- github 的容量扩容和 actions 时间扩容、Codespaces 时间延长、Pages 扩容(没啥用倒是)
- Termius 学生包这是我很喜欢用的终端软件有学生包可以多端同步ssh的账号密码啥的很方便。
- Sentry 容量扩容
- Copilot 免费用
你可以在 `settings` 里看到你的copilot ,配置如下
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-59-49.png)
然后就可以在你喜欢的 IDE 或编辑器上下载 Copilot 插件,来启用他。
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_18-02-19.png)

View File

@@ -10,21 +10,21 @@
装下来之后具体操作可以看[安装教程](https://blog.csdn.net/in546/article/details/117400839),如果自动配置环境变量的选项是灰色的话,请按照下面的教程把下面的几个文件路径加入环境变量。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png)
在里面添加并写入文件路径加入就好了~
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png)
然后打开 Pycharm创建新项目设置按照以下方式操作记得挂梯子。
如果不挂梯子,请按照教程配置清华源。[我是教程](https://blog.csdn.net/jasneik/article/details/114227716)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTfvjYweuIZFKlcH78X38Pd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTfvjYweuIZFKlcH78X38Pd.png)
然后一个新的环境就创建好辣~

View File

@@ -2,9 +2,13 @@
教程
[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学干货_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW?p=1&share_medium=android&share_plat=android&share_source=COPY&share_tag=s_i&timestamp=1623240637&unique_k=vHC5Wg)
[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学干货_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW)
[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss?from=search&seid=1987861827719523712&spm_id_from=333.337.0.0)
<Bilibili bvid='BV1Bp4y117UW'/>
[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss)
<Bilibili bvid='BV15U4y1J7Ss'/>
# 巧妇难为无米之炊
@@ -32,7 +36,7 @@
可以输入 `python3 --version` 检验是否成功。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn95LbcwuMC2dIViOxWk8BFb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn95LbcwuMC2dIViOxWk8BFb.png)
# Jupyter Notebook
@@ -50,6 +54,6 @@ jupyter notebook
进行使用
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png)
[Pycharm](https://www.jetbrains.com/zh-cn/pycharm/):可能很多同学已经用上了,我在这里不做更多解释

View File

@@ -2,7 +2,7 @@
什么是递归呢?
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png)
#

View File

@@ -184,7 +184,7 @@ P79*9 乘法表
可能现在对你来说,构建像下图这样的 99 乘法表已经是非常容易的一件事了,可是如果我要求你使用 python 的列表推导式(list comprehension),在两行以内完成呢?
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png)
P8couple 情侣

View File

@@ -158,7 +158,7 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此,
首先,打开一个终端窗口。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/L5HvblSuYonJn4x03a4cMLKknrh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/L5HvblSuYonJn4x03a4cMLKknrh.png)
#### 主目录
@@ -174,11 +174,11 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此,
PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路径(或路由)。请记住,您可以通过两种不同的方式访问计算机上的文件和目录(文件夹)。您可以使用终端(这是一个<strong>命令行</strong>界面或 CLI也可以使用 Finder <strong>。</strong>Finder 是<strong>图形</strong>用户<strong>界面</strong>(或 GUI的一个 例子<strong>。</strong>导航技术不同,但文件相同。例如,这是我的 CS 61A 实验室文件夹在我的 GUI 中的样子:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png)
这是完全相同的文件夹在终端中的外观:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png)
请注意,在这两种情况下,黄色框都显示了 PATH紫色椭圆显示了“labs”文件夹的内容。
@@ -186,7 +186,7 @@ PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路
让我们停下来思考一下终端和 Python 解释器之间的区别。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png)
1. 哪个是终端?
2. 哪个是 Python 解释器?
@@ -197,7 +197,7 @@ A 和 D 都是我的终端。在这里您可以运行 bash 命令,例如 `cd`
B 是 Python 解释器。你可以从 >>> 提示中看出这意味着你已经启动了一个 Python 解释器。您还可以判断,因为启动它的命令是可见的:`python3`。该 `python3` 命令启动 Python 解释器。如果您在 Python 解释器中键入 bash 命令,您可能会遇到语法错误!这是一个例子:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png)
C 是我的代码编辑器。这是我可以编写 Python 代码以通过我的终端执行的地方。
@@ -287,7 +287,7 @@ mkdir lab
现在,如果您列出目录的内容(使用 `ls`),您将看到两个文件夹,`projects``lab`.
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png)
### 更多目录更改
@@ -475,7 +475,7 @@ ______
实验室还将包括函数编写问题。在你的文本编辑器中打开 `lab00.py`。您可以 `open .` 在 MacOS 或 `start .` Windows 上键入以在 Finder/文件资源管理器中打开当前目录。然后双击或右键单击以在文本编辑器中打开文件。你应该看到这样的东西:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png)
三引号中的行 `"""` 称为<strong>文档字符串Docstring</strong>,它描述了函数应该做什么。在 61A 中编写代码时,您应该始终阅读文档字符串!
@@ -483,7 +483,7 @@ ______
在这里,我们圈出了文档字符串和文档测试,以便于查看:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png)
`twenty_twenty_two`,

View File

@@ -14,13 +14,13 @@
一路下一步
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntUYJNAaOwB8L6KSEhJJojh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntUYJNAaOwB8L6KSEhJJojh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQkVQ4uyYCveO6toBujoGOc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQkVQ4uyYCveO6toBujoGOc.png)
这俩我推荐勾掉
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndgDKfTuio3nF0QboemIPHe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndgDKfTuio3nF0QboemIPHe.png)
安装过后点许可证 输上面的 key 激活
@@ -30,15 +30,15 @@
下好回到 VMware
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png)
创建新的虚拟机-典型(推荐)-下一步-安装程序 iso 选中你刚下的 iso 下一步
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXilUhHNEyU4r95FxiVgCdg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXilUhHNEyU4r95FxiVgCdg.png)
这里填你一会儿要登录 linux 的个人信息
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png)
这里建议把位置改到其他盘
@@ -46,21 +46,21 @@
启动后进入 Ubuntu 安装
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png)
键盘映射 直接 continue
接下来一路 continue install now
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png)
最后 restart
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCX92JHjg8PU3quKs4GziZb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCX92JHjg8PU3quKs4GziZb.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png)
这个 skip
@@ -68,15 +68,15 @@
点右上角 settings
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvLxCTKYfogPm9GNaKmusEf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvLxCTKYfogPm9GNaKmusEf.png)
然后按指引 restart 系统
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn30VJILYpO81pq89mAmzjTf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn30VJILYpO81pq89mAmzjTf.png)
会提示你要不要重新命名这些用户下的文件夹
@@ -84,27 +84,27 @@
如果你的语言还没有变过来的话
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKzJjY8Dvj13A49bnMAztPg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKzJjY8Dvj13A49bnMAztPg.png)
点击这个他会安装语言
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndHnAuGC7TXhQgLkpLkHghf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndHnAuGC7TXhQgLkpLkHghf.png)
把汉语拖到英文之上 点应用到整个系统
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png)
右上角 logout 重新登陆 就是中文辣
最后在设置-电源把息屏改成从不
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png)
<strong>至此 恭喜安装完成!</strong>
之后就可以在桌面上右键
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png)
打开命令行

View File

@@ -15,10 +15,10 @@
(现在可能是只开 `适用于Linux的windows子系统`
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYVkEecWdUs710e8h6G9GTh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYVkEecWdUs710e8h6G9GTh.png)
如果你的 windows 版本为<strong>家庭版</strong> 那么 hyperv 选项是没有的
你需要右键以管理员权限打开以下脚本来强行开启 hyperv
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoCF5MilDma33yviwRGdDHe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoCF5MilDma33yviwRGdDHe.png)

View File

@@ -133,7 +133,12 @@ int main(void) {
}
```
> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。<br/>对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式具体处于那个模式可以观察窗口左下角NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )`:q 仅退出` `:q! 不保存退出` <br/>呃呃 [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg)
> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。
> 对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式具体处于那个模式可以观察窗口左下角NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )`:q 仅退出` `:q! 不保存退出`
>
> [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg)
>
> <Bilibili bvid='BV13t4y1t7Wg'/>
保存后就能够看到 `hello.c` 的内容了. 终端中可以用 `cat hello.c` 查看代码的内容. 如果要将它编译, 可以使用 `gcc` 命令:

View File

@@ -24,7 +24,7 @@ python内容完成后基本学习到如何使用python当一门工具使用
如果你要开始推荐你从3.0开始阅读,然后挑选你喜欢的内容
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOrKXUsIPJAUXyGB3Txewve.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOrKXUsIPJAUXyGB3Txewve.png)
## 本章参考内容

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

View File

@@ -219,13 +219,13 @@ ICLIn-Context Learning上下文学习和 COTChain of Thought
虽然学界对此没有太大的共识,但其原理无非在于给予 LLMs 更翔实的上下文,让输出与输入有着更紧密的关联与惯性。(从某种意义上来说,也可以将其认为是一种图灵机式的编程)
> ICL<br/>![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png)
> ICL<br/>![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png)
ICL 为输出增加惯性
> 可以简单认为,通过 ICL Prompt能强化人类输入到机器输出的连贯性借以提升输出的确定性。<br/>在经过“回答”的 finetune 之前,大模型的原始能力就是基于给定文本进行接龙,而 ICL 的引入则在“回答”这一前提条件下,降低了机器开始接龙这一步骤中的语义跨度,从而使得输出更加可控。<br/>
COT<br/>![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png)
COT<br/>![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png)
COT 为输出增加关联
@@ -240,7 +240,7 @@ COT 为输出增加关联
需要注意的是TaskMatrix.AI 更大程度上是一个愿景向的调研案例,尚未正式落地生态)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png)
TaskMatrix 的生态愿景
@@ -275,7 +275,7 @@ TaskMatrix 的生态愿景
- Usage ExampleAPI 的调用方法样例
- Composition InstructionAPI 的使用贴士,如应该与其它什么 API 组合使用,是否需要手动释放等
> 样例:打开文件 API<br/>![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png)
> 样例:打开文件 API<br/>![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png)
基于此类文档内容和 ICL 的能力LLMs 能从输入中习得调用 API 的方法,依此快速拓展了其横向能力
@@ -287,11 +287,11 @@ COT for TaskMatrix
在 TaskMatirx 中,通过该模式,让 MCFM 将任务转化为待办大纲,并最终围绕大纲检索并组合 API完成整体工作
> 样例:写论文<br/>构建完成工作大纲<br/>![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GAeJbok1FoTFLixLQAlcxdAPned.png)
> 样例:写论文<br/>构建完成工作大纲<br/>![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GAeJbok1FoTFLixLQAlcxdAPned.png)
TaskMatrix 自动围绕目标拆解任务
> 自动调用插件和组件<br/>![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png)
> 自动调用插件和组件<br/>![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png)
TaskMatrix 自动为任务创建 API 调用链
@@ -313,7 +313,7 @@ TaskMatrix 自动为任务创建 API 调用链
Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂的问题由 LLMs 自主划分为多个子任务。随后,我们通过 LLMs 完成多个任务,并将过程信息最终组合并输出理想的效果
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X7iLbYOcpoXZy7xuhorc71LSnod.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X7iLbYOcpoXZy7xuhorc71LSnod.png)
几种 Prompt 方法图示
@@ -321,7 +321,7 @@ Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂
而对于 Decomp 过程,则又是由一个原始的 Decomp Prompt 驱动
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/A7OubowqYo11O3xn0KbcRoscnEh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/A7OubowqYo11O3xn0KbcRoscnEh.png)
Decomp 方法执行样例
@@ -347,7 +347,7 @@ Decomp 的原始功能实际上并不值得太过关注,但我们急需考虑
通过问题的分解和通过“专用函数”的执行,我们可以轻易让 LLMs 实现自身无法做到的调用 API 工作,例如主动从外部检索获取回答问题所需要的知识。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png)
Decomp 方法调用外部接口样例
@@ -359,7 +359,7 @@ Decomp 方法调用外部接口样例
[HuggingGPT](https://arxiv.org/abs/2303.17580) 一文也许并未直接参考 Decomp 方法,而是用一些更规范的手法完成该任务,但其充分流水线化的 Prompt 工程无疑是 Decomp 方法在落地实践上的最佳注脚
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Uct8bXhTgocChExgmiWcQTbSnGb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Uct8bXhTgocChExgmiWcQTbSnGb.png)
HuggingGPT
@@ -407,7 +407,7 @@ Generative Agents 构建了一套框架,让 NPC 可以感知被模块化的世
- 一方面,其包含场景中既有对象,包括建筑和摆件等的基础层级信息
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BKZPbpDrIo95amxDZANccwHZnpd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BKZPbpDrIo95amxDZANccwHZnpd.png)
Generative Agents 的场景信息管理
@@ -635,7 +635,7 @@ AutoGPT 主要特性如下:
其提醒我们,就连我们的意识主体性,也只是陈述自我的一个表述器而已。我们是否应当反思对语言能力的过度迷信,从而相信我们能通过训练模型构建 All in One 的智能实体?
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png)
全局工作空间理论
@@ -905,7 +905,7 @@ AutoGPT 的核心记忆设计依赖于预包装的 Prompt 本体,这一包装
Generative Agent 通过自动化评估记忆的价值,并构建遗忘系统、关注系统等用于精准从自己繁杂的记忆中检索对于当前情景有用的信息。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/StjCbHn2BoqTrNxF64ScvrPInCe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/StjCbHn2BoqTrNxF64ScvrPInCe.png)
Generative Agents :基于 Reflection 构建记忆金字塔

View File

@@ -60,4 +60,4 @@ ZZM 曾经尝试过投入大量时间去钻研数学以及机器学习相关的
联系 ZZM我努力改
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg)

View File

@@ -13,7 +13,7 @@
计算机视觉旨在<strong>用计算机模拟人类处理图片信息的能力</strong>,就比如这里有一张图片——手写数字 9
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvQiaAx6WgPx64s8fBklVwh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvQiaAx6WgPx64s8fBklVwh.png)
对我们人类而言,能够很轻松地知道这张图片中包含的信息(数字 9而对计算机来说这只是一堆像素。计算机视觉的任务就是让计算机能够从这堆像素中得到数字 9这个信息。
@@ -21,15 +21,15 @@
<strong>图像分割</strong>是在图片中对物体分类,并且把它们所对应的位置标示出来。下图就是把人的五官,面部皮肤和头发分割出来,效(小)果(丑)图如下:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png)
<strong>图像生成</strong>相信大家一定不陌生NovalAI 在 2022 年火的一塌糊涂,我觉得不需要我过多赘述,对它(Diffusion model)的改进工作也是层出不穷,这里就放一张由可控姿势网络(ControlNet)生成的图片吧:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnUjnRociXua1yKj6dmU1A3c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnUjnRociXua1yKj6dmU1A3c.png)
<strong>三维重建</strong>也是很多研究者关注的方向,指的是传入对同一物体不同视角的照片,来生成 3D 建模的任务。这方面比图像处理更加前沿并且难度更大。具体见[4.6.5.4神经辐射场(NeRF)](4.6.5.4%E7%A5%9E%E7%BB%8F%E8%BE%90%E5%B0%84%E5%9C%BA(NeRF).md) 章节。
@@ -39,9 +39,9 @@
这就更好理解了让计算机能够像人类一样理解文本中的“真正含义”。在计算机眼中文本就是单纯的字符串NLP 的工作就是把字符转换为计算机可理解的数据。举个例子ChatGPT(或者 New Bing)都是 NLP 的成果。在过去NLP 领域被细分为了多个小任务,比如文本情感分析、关键段落提取等。而 ChatGPT 的出现可以说是集几乎所有小任务于大成,接下来 NLP 方向的工作会向 ChatGPT 的方向靠近。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyh6pakAkcxCKq6pLylSdef.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyh6pakAkcxCKq6pLylSdef.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwWnoEDulgWdqGkY0WeYogc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwWnoEDulgWdqGkY0WeYogc.png)
## 多模态(跨越模态的处理)
@@ -53,7 +53,7 @@
具体的任务比如说<strong>图片问答</strong>,传入一张图片,问 AI 这张图片里面有几只猫猫,它们是什么颜色,它告诉我有一只猫猫,是橙色的:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg)
## 对比学习
@@ -84,3 +84,8 @@
# And more?
我们对AI的定义如果仅仅只有这些内容我认为还是太过于狭隘了我们可以把知识规划知识表征等等东西都可以将他划入AI的定义中去当然这些还期待着你的进一步探索和思考~
# 特别致谢
非常荣幸能在本章中得到 IIPL智能信息处理实验室 http://iipl.net.cn 的宝贵贡献,衷心感谢他们的无私支持与帮助!

View File

@@ -26,7 +26,7 @@
甚至深度学习,也只是机器学习的一部分,不过使用了更多技巧和方法,增大了计算能力罢了。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbtaUStj8coQiNTmZzfWqNl.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbtaUStj8coQiNTmZzfWqNl.png)
# 两种机器学习算法
@@ -42,11 +42,11 @@
近三个月来,每当你的城市里有人卖了房子,你都记录了下面的细节——卧室数量、房屋大小、地段等等。但最重要的是,你写下了最终的成交价:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png)
然后你让新人根据着你的成交价来估计新的数量
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png)
这就是监督学习,你有一个参照物可以帮你决策。
@@ -66,7 +66,7 @@
这其实就是一种经典的聚类算法
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSn17EC3YvEnA6GScKNAF3e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSn17EC3YvEnA6GScKNAF3e.png)
可以把特征不一样的数据分开,有非常多的操作,你感兴趣可以选择性的去了解一下。
@@ -139,7 +139,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
第二步把每个数值都带入进行运算。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDICYiLh7ddcxEVrHxFODe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniDICYiLh7ddcxEVrHxFODe.png)
比如说,如果第一套房产实际成交价为 25 万美元,你的函数估价为 17.8 万美元,这一套房产你就差了 7.2 万。
@@ -168,13 +168,13 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
为了避免这种情况,数学家们找到了很多种[聪明的办法](https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Gradient_descent)来快速找到优秀的权重值。下面是一种:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png)
这就是被称为 loss 函数的东西。
这是个专业属于,你可以选择性忽略他,我们将它改写一下
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png)
<em>θ 表示当前的权重值。 J(θ) 表示「当前权重的代价」。</em>
@@ -182,7 +182,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
如果我们为这个等式中所有卧室数和面积的可能权重值作图的话,我们会得到类似下图的图表:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniBPPpszGhbOWGpvto38Alf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniBPPpszGhbOWGpvto38Alf.png)
因此,我们需要做的只是调整我们的权重,使得我们在图上朝着最低点「走下坡路」。如果我们不断微调权重,一直向最低点移动,那么我们最终不用尝试太多权重就可以到达那里。
@@ -194,7 +194,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
当你使用一个机器学习算法库来解决实际问题时,这些都已经为你准备好了。但清楚背后的原理依然是有用的。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg)
枚举法
@@ -225,7 +225,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
我们换一个好看的形式给他展示
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png)
<em>箭头头表示了函数中的权重。</em>
@@ -233,17 +233,17 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
所以为了更加的智能化,我们可以利用不同的权重来多次运行这个算法,收集各种不同情况下的估价。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png)
然后我们把四种整合到一起,就得到一个超级答案
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnplbH8Ot0U6cuLHStDmXyze.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnplbH8Ot0U6cuLHStDmXyze.png)
这样我们相当于得到了更为准确的答案
# 神经网络是什么
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png)
我们把四个超级网络的结合图整体画出来,其实这就是个超级简单的神经网络,虽然我们省略了很多的内容,但是他仍然有了一定的拟合能力
@@ -318,17 +318,17 @@ print('y_pred=',y_test.data)
我们试着只识别一个数字 8
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQnrltieoJ93DT79pyX45e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQnrltieoJ93DT79pyX45e.png)
我们把一幅 18×18 像素的图片当成一串含有 324 个数字的数组,就可以把它输入到我们的神经网络里面了:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png)
为了更好地操控我们的输入数据,我们把神经网络的输入节点扩大到 324 个:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png)
请注意我们的神经网络现在有了两个输出而不仅仅是一个房子的价格。第一个输出会预测图片是「8」的概率而第二个则输出不是「8」的概率。概括地说我们就可以依靠多种不同的输出利用神经网络把要识别的物品进行分组。
@@ -349,7 +349,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
当数字并不是正好在图片中央的时候,我们的识别器就完全不工作了。一点点的位移我们的识别器就掀桌子不干了
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnShOBEoOhsJLR6L5xyr7INb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnShOBEoOhsJLR6L5xyr7INb.png)
这是因为我们的网络只学习到了正中央的「8」。它并不知道那些偏离中心的「8」长什么样子。它仅仅知道中间是「8」的图片规律。
@@ -365,9 +365,9 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
当然,你同时也需要更强的拟合能力和更深的网络。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIcHcRF34F6jJgTRvhyAevc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIcHcRF34F6jJgTRvhyAevc.png)
一层一层堆叠起来,这种方法很早就出现了。
@@ -377,7 +377,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
作为人类你能够直观地感知到图片中存在某种层级hierarchy或者是概念结构conceptual structure。比如说你在看
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg)
你会快速的辨认出一匹马,一个人。
@@ -387,7 +387,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
有人对此做过研究,人的眼睛可能会逐步判断一个物体的信息,比如说你看到一张图片,你会先看颜色,然后看纹理然后再看整体,那么我们需要一种操作来模拟这个过程,我们管这种操作叫卷积操作。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png)
## 卷积是如何工作的
@@ -395,13 +395,13 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
当然也有最新研究说卷积不具备平移不变性,但是我这里使用这个概念是为了大伙更好的理解,举个例子:你将 8 无论放在左上角还是左下角都改变不了他是 8 的事实
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png)
我们将一张图像分成这么多个小块,然后输入神经网络中的是一个小块。<em>每次判断一张小图块。</em>
然而,有一个非常重要的不同:对于每个小图块,我们会使用同样的神经网络权重。换一句话来说,我们平等对待每一个小图块。如果哪个小图块有任何异常出现,我们就认为这个图块是「异常」
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCxlvaanbzweMmeCOsp1xKf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCxlvaanbzweMmeCOsp1xKf.png)
换一句话来说,我们从一整张图片开始,最后得到一个稍小一点的数组,里面存储着我们图片中的哪一部分有异常。
@@ -413,7 +413,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
让我们先来看每个 2×2 的方阵数组,并且留下最大的数:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnquKepO4wJ74KfNIy3LtqVg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnquKepO4wJ74KfNIy3LtqVg.png)
每一波我们只保留一个数,这样就大大减少了图片的计算量了。
@@ -435,7 +435,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东
你猜怎么着?数组就是一串数字而已,所以我们我们可以把这个数组输入到另外一个神经网络里面去。最后的这个神经网络会决定这个图片是否匹配。为了区分它和卷积的不同,我们把它称作「全连接」网络
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png)
我们的图片处理管道是一系列的步骤:卷积、最大池化,还有最后的「全连接」网络。

View File

@@ -4,6 +4,10 @@
完成习题
:::
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/1-Lecture.zip"/>
:::
/4.人工智能/code/MAZE.zip
# Node
@@ -172,7 +176,7 @@ class Maze:
5. 两种算法总是能找到相同长度的路径
2. 下面的问题将问你关于下面迷宫的问题。灰色单元格表示墙壁。在这个迷宫上运行了一个搜索算法,找到了从 A 点到 B 点的黄色突出显示的路径。在这样做的过程中,红色突出显示的细胞是探索的状态,但并没有达到目标。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png)
在讲座中讨论的四种搜索算法中——深度优先搜索、广度优先搜索、曼哈顿距离启发式贪婪最佳优先搜索和曼哈顿距离启发式$A^*$
@@ -192,7 +196,7 @@ class Maze:
4. 深度限制的极小极大值永远不会比没有深度限制的极大极小值更可取
4. 下面的问题将询问您关于下面的 Minimax 树,其中绿色向上箭头表示 MAX 玩家,红色向下箭头表示 MIN 玩家。每个叶节点都标有其值。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png)
根节点的值是多少?

View File

@@ -4,6 +4,10 @@
如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/1-Projects.zip"/>
:::
`pip3 install -r requirements.txt`
# 理解

View File

@@ -18,13 +18,13 @@
导航是使用搜索算法的一个典型的搜索,它接收您的当前位置和目的地作为输入,并根据搜索算法返回建议的路径。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hesobke0ZocH48xGFyocf9Cxntd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hesobke0ZocH48xGFyocf9Cxntd.png)
在计算机科学中,还有许多其他形式的搜索问题,比如谜题或迷宫。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png)
# 举个例子
@@ -42,14 +42,14 @@
- 搜索算法开始的状态。在导航应用程序中,这将是当前位置。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png)
- 动作(Action)
- 一个状态可以做出的选择。更确切地说,动作可以定义为一个函数。当接收到状态$s$作为输入时,$Actions(s)$将返回可在状态$s$ 中执行的一组操作作为输出。
- 例如,在一个数字华容道中,给定状态的操作是您可以在当前配置中滑动方块的方式。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png)
- 过渡模型(Transition Model)
@@ -58,14 +58,14 @@
- 在接收到状态$s$和动作$a$作为输入时,$Results(sa)$返回在状态$s$中执行动作$a$ 所产生的状态。
- 例如,给定数字华容道的特定配置(状态$s$),在任何方向上移动正方形(动作$a$)将导致谜题的新配置(新状态)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/RKV2buJoroCV6SxiMUuct3dbnPU.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/RKV2buJoroCV6SxiMUuct3dbnPU.png)
- 状态空间(State Space)
- 通过一系列的操作目标从初始状态可达到的所有状态的集合。
- 例如,在一个数字华容道谜题中,状态空间由所有$\frac{16!}{2}$种配置,可以从任何初始状态达到。状态空间可以可视化为有向图,其中状态表示为节点,动作表示为节点之间的箭头。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/JdCqb2UI9ooWmdxk258cTIIznab.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/JdCqb2UI9ooWmdxk258cTIIznab.png)
- 目标测试(Goal Test)
@@ -112,9 +112,9 @@
- 展开节点(找到可以从该节点到达的所有新节点),并将生成的节点添加到边域。
- 将当前节点添加到探索集。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/K53FbGmswoM7JAxqJZxcQEjdnES.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/K53FbGmswoM7JAxqJZxcQEjdnES.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/THhpbemEHoxl80xHeTjc9d35nVh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/THhpbemEHoxl80xHeTjc9d35nVh.png)
边域从节点 A 初始化开始
@@ -122,9 +122,9 @@ a. 取出边域中的节点 A展开节点 A将节点 B 添加到边域。
b. 取出节点 B展开添加......
c. 到达目标节点,停止,返回解决方案
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Wsntb9rLwogdAKxpJgLchrI8nae.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Wsntb9rLwogdAKxpJgLchrI8nae.png)
会出现什么问题?节点 A-> 节点 B-> 节点 A->......-> 节点 A。我们需要一个探索集记录已搜索的节点
@@ -143,13 +143,13 @@ c. 到达目标节点,停止,返回解决方案
- 所找到的解决方案可能不是最优的。
- 在最坏的情况下,该算法将在找到解决方案之前探索每一条可能的路径,从而在到达解决方案之前花费尽可能长的时间。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png)
- 代码实现
@@ -175,13 +175,13 @@ def remove(self):
- 几乎可以保证该算法的运行时间会比最短时间更长。
- 在最坏的情况下,这种算法需要尽可能长的时间才能运行。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PQeZbJv3Bom6NYxa6lccT084nFn.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PQeZbJv3Bom6NYxa6lccT084nFn.png)
- 代码实现
@@ -202,13 +202,13 @@ def remove(self):
- 贪婪最佳优先搜索扩展最接近目标的节点,如启发式函数$h(n)$所确定的。顾名思义,该函数估计下一个节点离目标有多近,但可能会出错。贪婪最佳优先算法的效率取决于启发式函数的好坏。例如,在迷宫中,算法可以使用启发式函数,该函数依赖于可能节点和迷宫末端之间的曼哈顿距离。曼哈顿距离忽略了墙壁,并计算了从一个位置到目标位置需要向上、向下或向两侧走多少步。这是一个简单的估计,可以基于当前位置和目标位置的$(xy)$坐标导出。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png)
- 然而,重要的是要强调,与任何启发式算法一样,它可能会出错,并导致算法走上比其他情况下更慢的道路。不知情的搜索算法有可能更快地提供一个更好的解决方案,但它比知情算法更不可能这样。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png)
- $A^*$搜索
@@ -220,9 +220,9 @@ def remove(self):
- 一致性,这意味着从新节点到目标的估计路径成本加上从先前节点转换到该新节点的成本应该大于或等于先前节点到目标的估计路径成本。用方程的形式表示,$h(n)$是一致的如果对于每个节点n$和后续节点n'$从n$到$n'$的步长为c$,满足$h(n)≤h(n')+c$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BbIiba1pwo3uI7x4k7QcwicznGc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BbIiba1pwo3uI7x4k7QcwicznGc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png)
# 对抗性搜索
@@ -232,41 +232,41 @@ def remove(self):
- 作为对抗性搜索中的一种算法Minimax 将获胜条件表示为$(-1)$表示为一方,$(+1)$表示为另一方。进一步的行动将受到这些条件的驱动,最小化的一方试图获得最低分数,而最大化的一方则试图获得最高分数。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png)
- 井字棋 AI 为例
- $s_0$: 初始状态在我们的情况下是一个空的3X3棋盘
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/WstnbmHwYoQauRxUQOCclz8Jngb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/WstnbmHwYoQauRxUQOCclz8Jngb.png)
- $Players(s)$: 一个函数,在给定状态$$s$$的情况下返回轮到哪个玩家X或O
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png)
- $Actions(s)$: 一个函数,在给定状态$$s$$的情况下,返回该状态下的所有合法动作(棋盘上哪些位置是空的)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LuEzbLOaqox7yox5lXzcouWYnKc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LuEzbLOaqox7yox5lXzcouWYnKc.png)
- $Result(s, a)$: 一个函数,在给定状态$$s$$和操作$$a$$的情况下,返回一个新状态。这是在状态$$s$$上执行动作$$a$$(在游戏中移动)所产生的棋盘。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png)
- $Terminal(s)$: 一个函数,在给定状态$$s$$的情况下检查这是否是游戏的最后一步即是否有人赢了或打成平手。如果游戏已结束则返回True否则返回False。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png)
- $Utility(s)$: 一个函数在给定终端状态s的情况下返回状态的效用值$$-1、0或1$$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png)
- 算法的工作原理:
- 该算法递归地模拟从当前状态开始直到达到终端状态为止可能发生的所有游戏状态。每个终端状态的值为$(-1)$、$0$或$(+1)$。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png)
- 根据轮到谁的状态,算法可以知道当前玩家在最佳游戏时是否会选择导致状态值更低或更高的动作。
@@ -278,7 +278,7 @@ def remove(self):
在得到这些值之后,最大化的玩家会选择最高的一个。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png)
- 具体算法:
@@ -310,7 +310,7 @@ def remove(self):
- 这一点最容易用一个例子来说明最大化的玩家知道在下一步最小化的玩家将试图获得最低分数。假设最大化玩家有三个可能的动作第一个动作的值为4。然后玩家开始为下一个动作生成值。要做到这一点如果当前玩家做出这个动作玩家会生成最小化者动作的值并且知道最小化者会选择最低的一个。然而在完成最小化器所有可能动作的计算之前玩家会看到其中一个选项的值为3。这意味着没有理由继续探索最小化玩家的其他可能行动。尚未赋值的动作的值无关紧要无论是10还是-10。如果该值为10则最小化器将选择最低选项3该选项已经比预先设定的4差。如果尚未估价的行动结果是-10那么最小化者将选择-10这一选项这对最大化者来说更加不利。因此在这一点上为最小化者计算额外的可能动作与最大化者无关因为最大化玩家已经有了一个明确的更好的选择其值为4。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LDZab4TeMoByvDxF1Onc8WQenpb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LDZab4TeMoByvDxF1Onc8WQenpb.png)
- 深度限制的极大极小算法(Depth-Limited Minimax)

View File

@@ -4,6 +4,10 @@
完成习题
:::
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/2-Lecture.zip"/>
:::
# Sentence——父类
```python
@@ -311,15 +315,15 @@ check_knowledge(knowledge)
在这个游戏中,玩家一按照一定的顺序排列颜色,然后玩家二必须猜测这个顺序。每一轮,玩家二进行猜测,玩家一返回一个数字,指示玩家二正确选择了多少颜色。让我们用四种颜色模拟一个游戏。假设玩家二猜测以下顺序:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png)
玩家一回答“二”。因此,我们知道其中一些两种颜色位于正确的位置,而另两种颜色则位于错误的位置。根据这些信息,玩家二试图切换两种颜色的位置。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png)
现在玩家一回答“零”。因此,玩家二知道切换后的颜色最初位于正确的位置,这意味着未被切换的两种颜色位于错误的位置。玩家二切换它们。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EuXObldHcoaO74xIzZocQQKTn4k.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EuXObldHcoaO74xIzZocQQKTn4k.png)
在命题逻辑中表示这一点需要我们有(颜色的数量)$^2$个原子命题。所以,在四种颜色的情况下,我们会有命题 red0red1red2red3blue0…代表颜色和位置。下一步是用命题逻辑表示游戏规则每个位置只有一种颜色没有颜色重复并将它们添加到知识库中。最后一步是将我们所拥有的所有线索添加到知识库中。在我们的案例中我们会补充说在第一次猜测中两个位置是错误的两个是正确的而在第二次猜测中没有一个是对的。利用这些知识模型检查算法可以为我们提供难题的解决方案。

View File

@@ -4,6 +4,10 @@
如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/2-Projects.zip"/>
:::
`pip3 install -r requirements.txt`
# 骑士与流氓问题
@@ -71,7 +75,7 @@ C 说“A 是骑士。”
写一个 AI 来玩扫雷游戏。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png)
## 背景
@@ -80,7 +84,7 @@ C 说“A 是骑士。”
- 扫雷器是一款益智游戏,由一个单元格网格组成,其中一些单元格包含隐藏的“地雷”。点击包含地雷的单元格会引爆地雷,导致用户输掉游戏。单击“安全”单元格(即不包含地雷的单元格)会显示一个数字,指示有多少相邻单元格包含地雷,其中相邻单元格是指从给定单元格向左、向右、向上、向下或对角线一个正方形的单元格。
- 例如,在这个 3x3 扫雷游戏中,三个 1 值表示这些单元格中的每个单元格都有一个相邻的单元格,该单元格是地雷。四个 0 值表示这些单元中的每一个都没有相邻的地雷。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png)
- 给定这些信息,玩家根据逻辑可以得出结论,右下角单元格中一定有地雷,左上角单元格中没有地雷,因为只有在这种情况下,其他单元格上的数字标签才会准确。
- 游戏的目标是标记(即识别)每个地雷。在游戏的许多实现中,包括本项目中的实现中,玩家可以通过右键单击单元格(或左键双击,具体取决于计算机)来标记地雷。
@@ -90,7 +94,7 @@ C 说“A 是骑士。”
- 你在这个项目中的目标是建立一个可以玩扫雷游戏的人工智能。回想一下,基于知识的智能主体通过考虑他们的知识库来做出决策,并根据这些知识做出推断。
- 我们可以表示人工智能关于扫雷游戏的知识的一种方法是,使每个单元格成为命题变量,如果单元格包含地雷,则为真,否则为假。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IROdbJ4zAooiWNxitU9cRovbnne.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IROdbJ4zAooiWNxitU9cRovbnne.png)
- 我们现在掌握了什么信息?我们现在知道八个相邻的单元格中有一个是地雷。因此,我们可以写一个逻辑表达式,如下所示,表示其中一个相邻的单元格是地雷。
- `Or(A,B,C,D,E,F,G,H)`
@@ -124,12 +128,12 @@ Or(
- 这种表示法中的每个逻辑命题都有两个部分:一个是网格中与提示数字有关的一组单元格 `cell`,另一个是数字计数 `count`,表示这些单元格中有多少是地雷。上面的逻辑命题说,在单元格 A、B、C、D、E、F、G 和 H 中,正好有 1 个是地雷。
- 为什么这是一个有用的表示?在某种程度上,它很适合某些类型的推理。考虑下面的游戏。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UiHObqm4noSOKlxcEtScuwPlnLd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UiHObqm4noSOKlxcEtScuwPlnLd.png)
- 利用左下数的知识,我们可以构造命题 `{DEG}=0`,意思是在 D、E 和 G 单元中,正好有 0 个是地雷。凭直觉,我们可以从这句话中推断出所有的单元格都必须是安全的。通过推理,每当我们有一个 `count` 为 0 的命题时,我们就知道该命题的所有 `cell` 都必须是安全的。
- 同样,考虑下面的游戏。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png)
- 我们的人工智能会构建命题 `{EFH}=3`。凭直觉,我们可以推断出所有的 E、F 和 H 都是地雷。更一般地说,任何时候 `cell` 的数量等于 `count`,我们都知道这个命题的所有单元格都必须是地雷。
- 一般来说,我们只希望我们的命题是关于那些还不知道是安全的还是地雷的 `cell`。这意味着,一旦我们知道一个单元格是否是地雷,我们就可以更新我们的知识库来简化它们,并可能得出新的结论。
@@ -137,7 +141,7 @@ Or(
- 同样,如果我们的人工智能知道命题 `{ABC}2`,并且我们被告知 C 是一颗地雷,我们可以从命题中删除 C并减少计数的值因为 C 是导致该计数的地雷),从而得到命题 `{A、B}1`。这是合乎逻辑的:如果 A、B 和 C 中有两个是地雷,并且我们知道 C 是地雷,那么 A 和 B 中一定有一个是地雷。
- 如果我们更聪明,我们可以做最后一种推理。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png)
- 考虑一下我们的人工智能根据中间顶部单元格和中间底部单元格会知道的两个命题。从中上角的单元格中,我们得到 `{ABC}=1`。从底部中间单元格中,我们得到 `{ABCDE}=2`。从逻辑上讲,我们可以推断出一个新的知识,即 `{DE}1`。毕竟,如果 A、B、C、D 和 E 中有两个是地雷,而 A、B 和 C 中只有一个是地雷的话,那么 D 和 E 必须是另一个地雷。
- 更一般地说,任何时候我们有两个命题满足 `set1=count1``set2=count2`,其中 `set1``set2` 的子集,那么我们可以构造新的命题 `set2-set1=count2-count1`。考虑上面的例子,以确保你理解为什么这是真的。

View File

@@ -112,7 +112,7 @@
- $KB$: 如果今天是星期四并且不下雨,那我将出门跑步;今天是星期四;今天不下雨。$(P\land\lnot Q)\to R,P,\lnot Q$
- 查询结论(query): $R$
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png)
- 接下来,让我们看看如何将知识和逻辑表示为代码。
@@ -175,31 +175,31 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都
- 模型检查不是一种有效的算法,因为它必须在给出答案之前考虑每个可能的模型(提醒:如果在$KB$为真的所有模型(真值分配)下,查询结论$R$为真,则$R$ 也为真)。 推理规则允许我们根据现有知识生成新信息,而无需考虑所有可能的模型。
- 推理规则通常使用将顶部部分(前提)与底部部分(结论)分开的水平条表示。 前提是我们有什么知识,结论是根据这个前提可以产生什么知识。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png)
- 肯定前件(Modus Ponens)
- 如果我们知道一个蕴涵及其前件为真,那么后件也为真。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png)
- 合取消除(And Elimination)
- 如果 And 命题为真,则其中的任何一个原子命题也为真。 例如,如果我们知道哈利与罗恩和赫敏是朋友,我们就可以得出结论,哈利与赫敏是朋友。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png)
- 双重否定消除(Double Negation Elimination)
- 被两次否定的命题为真。 例如,考虑命题“哈利没有通过考试是不正确的”。 这两个否定相互抵消,将命题“哈利通过考试”标记为真。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png)
- 蕴含消除(Implication Elimination)
- 蕴涵等价于被否定的前件和后件之间的 Or 关系。 例如,命题“如果正在下雨,哈利在室内”等同于命题“(没有下雨)或(哈利在室内)”。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S31Ub9xcUo9yArxntWscU47pnwh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S31Ub9xcUo9yArxntWscU47pnwh.png)
| $P$ | $Q$ | $P\to Q$ | $\lnot P\lor Q$ |
| --- | --- | -------- | --------------- |
@@ -212,25 +212,25 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都
- 等值命题等价于蕴涵及其逆命题的 And 关系。 例如,“当且仅当 Harry 在室内时才下雨”等同于(“如果正在下雨Harry 在室内”和“如果 Harry 在室内,则正在下雨”)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png)
- 德摩根律(De Morgans Law)
- 可以将 And 连接词变成 Or 连接词。考虑以下命题:“哈利和罗恩都通过了考试是不正确的。” 由此,可以得出“哈利通过考试不是真的”或者“罗恩不是真的通过考试”的结论。 也就是说,要使前面的 And 命题为真Or 命题中至少有一个命题必须为真。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GTagbx1jso6l8gx1rQOcPW3inIb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GTagbx1jso6l8gx1rQOcPW3inIb.png)
- 同样,可以得出相反的结论。考虑这个命题“哈利或罗恩通过考试是不正确的”。 这可以改写为“哈利没有通过考试”和“罗恩没有通过考试”。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png)
- 分配律(Distributive Property)
- 具有两个用 And 或 Or 连接词分组的命题可以分解为由 And 和 Or 组成的更小单元。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CvPybic63o7jSlxvuzpcFxjQnse.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CvPybic63o7jSlxvuzpcFxjQnse.png)
## 知识和搜索问题
@@ -247,16 +247,16 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都
- 归结是一个强大的推理规则,它规定如果 Or 命题中的两个原子命题之一为假,则另一个必须为真。 例如给定命题“Ron 在礼堂”或“Hermione 在图书馆”除了命题“Ron 不在礼堂”之外我们还可以得出“Hermione 在图书馆”的结论。 更正式地说,我们可以通过以下方式定义归结:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png)
- 归结依赖于互补文字,两个相同的原子命题,其中一个被否定而另一个不被否定,例如$P$和$¬P$。
- 归结可以进一步推广。 假设除了“Rom 在礼堂”或“Hermione 在图书馆”的命题外我们还知道“Rom 不在礼堂”或“Harry 在睡觉”。 我们可以从中推断出“Hermione 在图书馆”或“Harry 在睡觉”。 正式地说:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png)
- 互补文字使我们能够通过解析推理生成新句子。 因此,推理算法定位互补文字以生成新知识。
- 从句(Clause)是多个原子命题的析取式(命题符号或命题符号的否定,例如$P$, $¬P$)。 析取式由Or逻辑连接词 ($P Q R$) 相连的命题组成。 另一方面连接词由And逻辑连接词 ($P ∧ Q ∧ R$) 相连的命题组成。 从句允许我们将任何逻辑语句转换为合取范式 (CNF),它是从句的合取,例如:$(A B C) ∧ (D ¬E) ∧ (F G)$。

View File

@@ -5,6 +5,11 @@
完成习题
:::
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/3-Lecture.zip"/>
:::
本节代码不做额外梳理,[不确定性问题](./4.3.3%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7%E9%97%AE%E9%A2%98.md) 中已有解释。
## Quiz
@@ -30,7 +35,7 @@
9. 1
3. 回答关于贝叶斯网络的问题,问题如下:
![](static/PUesbhgsFoiucAxWBKYcUUU3nMd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUesbhgsFoiucAxWBKYcUUU3nMd.png)
以下哪句话是真的?

View File

@@ -5,13 +5,18 @@
如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。
:::
::: tip 📥
本节附件下载 <Download url="https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/code/3-Projects.zip"/>
:::
## 背景
- GJB2 基因的突变版本是导致新生儿听力障碍的主要原因之一。每个人都携带两个版本的基因,因此每个人都有可能拥有 0、1 或 2 个听力障碍版本的 GJB2 基因。不过,除非一个人接受基因测试,否则要知道一个人拥有多少个变异的 GJB2 基因并不那么容易。这是一些 "隐藏状态":具有我们可以观察到的影响(听力损伤)的信息,但我们不一定直接知道。毕竟,有些人可能有 1 或 2 个突变的 GJB2 基因,但没有表现出听力障碍,而其他人可能没有突变的 GJB2 基因,但仍然表现出听力障碍。
- 每个孩子都会从他们的父母那里继承一个 GJB2 基因。如果父母有两个变异基因,那么他们会将变异基因传给孩子;如果父母没有变异基因,那么他们不会将变异基因传给孩子;如果父母有一个变异基因,那么该基因传给孩子的概率为 0.5。不过,在基因被传递后,它有一定的概率发生额外的突变:从导致听力障碍的基因版本转变为不导致听力障碍的版本,或者反过来。
- 我们可以尝试通过对所有相关变量形成一个贝叶斯网络来模拟所有这些关系,就像下面这个网络一样,它考虑了一个由两个父母和一个孩子组成的家庭。
![](static/FNyab3RWQo3EA8xu8T7cyLwhnyh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FNyab3RWQo3EA8xu8T7cyLwhnyh.png)
- 家庭中的每个人都有一个 `Gene` 随机变量代表一个人有多少个特定基因例如GJB2 的听力障碍版本):一个 0、1 或 2 的值。家族中的每个人也有一个 `Trait` 随机变量,它是 `yes``no`,取决于该人是否表达基于该基因的性状(例如,听力障碍)。从每个人的 `Gene` 变量到他们的 `Trait` 变量之间有一个箭头,以编码一个人的基因影响他们具有特定性状的概率的想法。同时,也有一个箭头从母亲和父亲的 `Gene` 随机变量到他们孩子的 `Gene` 随机变量:孩子的基因取决于他们父母的基因。
- 你在这个项目中的任务是使用这个模型对人群进行推断。给出人们的信息,他们的父母是谁,以及他们是否具有由特定基因引起的特定可观察特征(如听力损失),你的人工智能将推断出每个人的基因的概率分布,以及任何一个人是否会表现出有关特征的概率分布。

View File

@@ -24,11 +24,11 @@ $
- 用标准骰子掷出数字 R 的概率可以表示为 $P(R)$ 。在我们的例子中,$P(R)=1/6$ ,因为有六个可能的世界(从 1 到 6 的任何数字),并且每个世界有相同的可能性发生。现在,考虑掷两个骰子的事件。现在,有 36 个可能的事件,同样有相同的可能性发生。
![](static/GqlRbfW7Yom5a9xKCBHckMBuniF.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GqlRbfW7Yom5a9xKCBHckMBuniF.png)
- 然而,如果我们试图预测两个骰子的总和,会发生什么?在这种情况下,我们只有 11 个可能的值(总和必须在 2 到 12 之间),而且它们的出现频率并不相同。
![](static/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png)
- 为了得到事件发生的概率,我们将事件发生的世界数量除以可能发生的世界总数。例如,当掷两个骰子时,有 36 个可能的世界。只有在其中一个世界中,当两个骰子都得到 6 时,我们才能得到 12 的总和。因此,$P(12)\frac{1}{36}$,或者,换句话说,掷两个骰子并得到两个和为 12 的数字的概率是$\frac{1}{36}$。$P(7)$是多少?我们数了数,发现和 7 出现在 6 个世界中。因此,$P(7)\frac{6}{36}\frac{1}{6}$。
@@ -49,11 +49,11 @@ $P(a\land b)=P(a)P(b|a)$
- 例如,考虑$P(总和为12|在一个骰子上掷出6)$,或者掷两个骰子假设我们已经掷了一个骰子并获得了六,得到十二的概率。为了计算这一点,我们首先将我们的世界限制在第一个骰子的值为六的世界:
![](static/MkZ6bIPFroAm3lxzLydcsn5QnNg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MkZ6bIPFroAm3lxzLydcsn5QnNg.png)
- 现在我们问,在我们将问题限制在(除以$P(6)$,或第一个骰子产生 6 的概率)的世界中,事件 a和为 12发生了多少次
![](static/XZfhbR6sBorTI9x7hVVchGLUn3b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XZfhbR6sBorTI9x7hVVchGLUn3b.png)
## 随机变量(Random Variables)
@@ -135,7 +135,7 @@ $P(Flight=取消)=0.1$
- 每个节点 X 具有概率分布$P(X|Parents(X))$。
- 让我们考虑一个贝叶斯网络的例子,该网络包含影响我们是否按时赴约的随机变量。
![](static/GKc6be6ueopUYZxxQg4cS4AVnmb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GKc6be6ueopUYZxxQg4cS4AVnmb.png)
- 让我们从上到下描述这个贝叶斯网络:
@@ -279,21 +279,21 @@ for node, prediction in zip(model.states, predictions):
- 如果我们从对 Rain 变量进行采样开始,则生成的值 none 的概率为 0.7,生成的值 light 的概率为 0.2,而生成的值 heavy 的概率则为 0.1。假设我们的采样值为 none。当我们得到 Maintenance 变量时,我们也会对其进行采样,但只能从 Rain 等于 none 的概率分布中进行采样,因为这是一个已经采样的结果。我们将通过所有节点继续这样做。现在我们有一个样本,多次重复这个过程会生成一个分布。现在,如果我们想回答一个问题,比如什么是$P(Train=on\ time)$,我们可以计算变量 Train 具有准时值的样本数量,并将结果除以样本总数。通过这种方式,我们刚刚生成了$P(Train=on\ {time})$的近似概率。
![](static/CreObGAg4oXB0oxe2hMcQbYZnAc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CreObGAg4oXB0oxe2hMcQbYZnAc.png)
![](static/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png)
- 我们也可以回答涉及条件概率的问题,例如$P(rain=light|train=on\ {time})$。在这种情况下,我们忽略 Train 值为 delay 的所有样本,然后照常进行。我们计算在$Train=\text{on time}$的样本中有多少样本具有变量$Rain=light$,然后除以$Train=\text{on time}$的样本总数。
![](static/KsELbuMTCoKZkGxU9U5czQpanKg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KsELbuMTCoKZkGxU9U5czQpanKg.png)
![](static/MrP0b2FbXofDsOxgnmncufUynAB.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MrP0b2FbXofDsOxgnmncufUynAB.png)
去除$T= on time$的样本
![](static/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png)
![](static/AptYbb5MZoylvex7LvPcSqivnef.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AptYbb5MZoylvex7LvPcSqivnef.png)
选择$R=light$的样本
@@ -357,11 +357,11 @@ print(Counter(data))
- 马尔科夫链是一个随机变量的序列,每个变量的分布都遵循马尔科夫假设。也就是说,链中的每个事件的发生都是基于之前事件的概率。
- 为了构建马尔可夫链,我们需要一个过渡模型,该模型将根据当前事件的可能值来指定下一个事件的概率分布。
![](static/VBGxbrNgAovuKXxnTKYcm7UinFd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VBGxbrNgAovuKXxnTKYcm7UinFd.png)
- 在这个例子中,基于今天是晴天,明天是晴天的概率是 0.8。这是合理的,因为晴天之后更可能是晴天。然而,如果今天是雨天,明天下雨的概率是 0.7,因为雨天更有可能相继出现。使用这个过渡模型,可以对马尔可夫链进行采样。从一天是雨天或晴天开始,然后根据今天的天气,对第二天的晴天或雨天的概率进行采样。然后,根据明天的情况对后天的概率进行采样,以此类推,形成马尔科夫链:
![](static/XBghbKBaVoz0C4xa85rch804ngd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XBghbKBaVoz0C4xa85rch804ngd.png)
- 给定这个马尔可夫链,我们现在可以回答诸如“连续四个雨天的概率是多少?”这样的问题。下面是一个如何在代码中实现马尔可夫链的例子:
@@ -394,7 +394,7 @@ print(model.sample(50))
- 在衡量网站的用户参与度时,隐藏的状态是用户的参与程度,而观察是网站或应用程序的分析。
- 举个例子。我们的人工智能想要推断天气(隐藏状态),但它只能接触到一个室内摄像头,记录有多少人带了雨伞。这里是我们的传感器模型(sensor model),表示了这些概率:
![](static/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png)
- 在这个模型中,如果是晴天,人们很可能不会带伞到大楼。如果是雨天,那么人们就很有可能带伞到大楼来。通过对人们是否带伞的观察,我们可以合理地预测外面的天气情况。
@@ -403,7 +403,7 @@ print(model.sample(50))
- 假设证据变量只取决于相应的状态。例如,对于我们的模型,我们假设人们是否带雨伞去办公室只取决于天气。这不一定反映了完整的事实,因为,比如说,比较自觉的、不喜欢下雨的人可能即使在阳光明媚的时候也会到处带伞,如果我们知道每个人的个性,会给模型增加更多的数据。然而,传感器马尔科夫假设忽略了这些数据,假设只有隐藏状态会影响观察。
- 隐马尔科夫模型可以用一个有两层的马尔科夫链来表示。上层,变量$X$,代表隐藏状态。底层,变量$E$,代表证据,即我们所拥有的观察。
![](static/FnyrbYSEWohimaxIYPSchotGnse.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FnyrbYSEWohimaxIYPSchotGnse.png)
- 基于隐马尔科夫模型,可以实现多种任务:

View File

@@ -6,7 +6,7 @@
人工智能是一个宏大的愿景,目标是让机器像我们人类一样思考和行动,既包括增强我们人类脑力也包括增强我们体力的研究领域。而学习只是实现人工智能的手段之一,并且,只是增强我们人类脑力的方法之一。所以,人工智能包含机器学习。机器学习又包含了深度学习,他们三者之间的关系见下图。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png)
# 如何学习本节内容

View File

@@ -42,11 +42,11 @@
机器学习包括深度学习
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png)
[同时向你推荐这个 Data AnalyticsData Analysis数据挖掘数据科学机器学习大数据的区别是什么](https://www.quora.com/What-is-the-difference-between-Data-Analytics-Data-Analysis-Data-Mining-Data-Science-Machine-Learning-and-Big-Data-1)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png)
## 我没有任何相关概念

View File

@@ -6,7 +6,7 @@
## 深度学习框架
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWLzi1LIWLCncrXcTcjAKne.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWLzi1LIWLCncrXcTcjAKne.png)
### 1、深度学习框架是什么
@@ -113,9 +113,9 @@ PyTorch 完全基于 Python。
官网如下
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png)
选择 Conda 或者 Pip 安装皆可
@@ -140,15 +140,21 @@ conda config --set show_channel_urls yes
### TensorFlow
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5u9u9M6DPRh83ufoSwfuof.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5u9u9M6DPRh83ufoSwfuof.png)
#### 教程
[在 Windows 上配置 pytorchCPU 和 GPU 版)](https://www.bilibili.com/video/BV1YY4y1B7cA?spm_id_from=333.337.search-card.all.click&vd_source=8e0b454d3850af2ce4435d1ca2d9e040)
[在 Windows 上配置 pytorchCPU 和 GPU 版)](https://www.bilibili.com/video/BV1YY4y1B7cA)
[Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版](https://www.bilibili.com/video/BV1S5411X7FY?p=1&vd_source=8e0b454d3850af2ce4435d1ca2d9e040)
<Bilibili bvid='BV1YY4y1B7cA'/>
[最新 TensorFlow 2.8 极简安装教程](https://www.bilibili.com/video/BV1i34y1r7dv/?spm_id_from=333.788&vd_source=8e0b454d3850af2ce4435d1ca2d9e040)
[Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版](https://www.bilibili.com/video/BV1S5411X7FY)
<Bilibili bvid='BV1S5411X7FY'/>
[最新 TensorFlow 2.8 极简安装教程](https://www.bilibili.com/video/BV1i34y1r7dv)
<Bilibili bvid='BV1i34y1r7dv'/>
#### 思考题:为什么需要 CUDA 版本???
@@ -161,17 +167,17 @@ cuda 版本需要额外配置,我们将这个任务留给聪明的你!!!
同时按下键盘的 win+r 键,打开 cmd键入 `dxdiag` 然后回车
系统、显卡、声卡以及其他输入设备的信息都在这里了。(给出我的界面)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png)
cuda 版本查看
桌面空白位置摁下右键
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp9i1SagOxXd17W9BiP3RNe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp9i1SagOxXd17W9BiP3RNe.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngaZNZB3XLSJia0rk0DgGbe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngaZNZB3XLSJia0rk0DgGbe.png)
#### linux
@@ -187,11 +193,11 @@ nvidia-smi
通常大家所指的 cuda 是位于/usr/local 下的 cuda
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntFGELTpdcVoigy5ldCorAb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntFGELTpdcVoigy5ldCorAb.png)
当然可以看到 cuda 是 cuda-11.6 所指向的软链接(类似 windows 的快捷方式),所以我们如果要切换 cuda 版本只需要改变软链接的指向即可。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTB39MtPKBr9CgufCpSIYuf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTB39MtPKBr9CgufCpSIYuf.png)
cuda driver version 是 cuda 的驱动版本。
@@ -199,9 +205,9 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。
二者的版本是可以不一致的。如下图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnATNfI2spkNsXbqtIuwwY6c.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnATNfI2spkNsXbqtIuwwY6c.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnz03UebyZ42JNOXpdUfjMBg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnz03UebyZ42JNOXpdUfjMBg.png)
一般来讲 cuda driver 是向下兼容的。所以 cuda driver version >= cuda runtime version 就不会太大问题。
@@ -211,13 +217,13 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。
以 pytorch 为例,可以看到在安装过程中我们选择的 cuda 版本是 10.2
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcns8yMCuacj0A2BbMU6ZB08b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcns8yMCuacj0A2BbMU6ZB08b.png)
那么这个 cudatookit10.2 和 nvidia-smi 的 11.7 以及 nvcc -V 的 11.4 三者有什么区别呢?
pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文件就都包含的 cudatookkit 里面。并不需要 cuda 的头文件等其他东西,如下所示
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png)
所以我们如果想让使用 pytorch-cuda 版本,我们实际上不需要/usr/local/cuda。只需要在安装驱动的前提下在 python 里面安装 cudatookit 即可。
@@ -227,8 +233,8 @@ pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文
Cudnn 是一些链接文件,你可以理解成是为了给 cuda 计算加速的东西。同样的我们也可以用以下命令查看/usr/local/cuda 的 cudnn
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png)
以及 pytorch 的 cuda 环境的 cudnn
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png)

View File

@@ -40,8 +40,8 @@
这是我用照片重建的独角兽<strong>稀疏</strong>点云,红色的不用管,是照相机视角(图不够多,巨糊)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWx8hYfT6kFug4A1iA3uftg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWx8hYfT6kFug4A1iA3uftg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg)
先这些,后续想起来了可能会补充。

View File

@@ -2,7 +2,10 @@
## <strong>刘二大人(Pytorch)</strong>
## [【速成课:人工智能】Ai - [21 集全/中英双语] - Artificial Intelligence_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1P7411r7Dw/?spm_id_from=333.999.0.0&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7)
## 速成课:人工智能
[【速成课人工智能】Ai - [21 集全/中英双语] - Artificial Intelligence_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1P7411r7Dw)
<Bilibili bvid='BV1P7411r7Dw'/>
Crash course 的课程可以基本了解pytorch的内容但是当然有很多内容已经有些过时
@@ -65,7 +68,7 @@ Crash course 的课程可以基本了解pytorch的内容但是当然有很
### 损失
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRbeabbEppeHlM39UwqJSJc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRbeabbEppeHlM39UwqJSJc.png)
首先我们需要有一个损失函数$Fxx=true-predict$
@@ -74,13 +77,13 @@ Crash course 的课程可以基本了解pytorch的内容但是当然有很
### 梯度下降
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnMuwaG2okodvywzbxX138Re.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnMuwaG2okodvywzbxX138Re.png)
假设损失函数为$y=x^2$,梯度下降的目的是快速找到导数为 0 的位置(附近)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneVFa131Lb9xDMCsIMI9fcc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneVFa131Lb9xDMCsIMI9fcc.png)
以此类推,我们最后的 w 在 0 的附近反复横跳,最后最接近目标函数的权重 w 就是 0。
@@ -94,7 +97,7 @@ Crash course 的课程可以基本了解pytorch的内容但是当然有很
# 关于 MINIST
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png)
这个数据集可以说是最最经典的数据集了,里面有 0-9 这 10 个数字的手写图片和标注,正确率最高已经到了 99.7%.

View File

@@ -4,7 +4,7 @@
进入官网后选择 Install在下面表格中按照你的配置进行选择
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxltvaT52E6mu6JIYaKvM1X.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxltvaT52E6mu6JIYaKvM1X.png)
其中 Package 部分选择安装的途径,这里主要介绍 Pip 和 Conda 两种途径。
@@ -56,8 +56,8 @@ conda config --show channels
同时按下 Win+R,运行 cmd,输入 `dxdiag` 并回车。系统、显卡、声卡以及其他设备信息都会显示。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnepK0nkI8pWAJaO89zQoRgh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnepK0nkI8pWAJaO89zQoRgh.png)
cuda 版本查看
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRoZEZsUdVduFRR9DjegeNh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRoZEZsUdVduFRR9DjegeNh.png)

View File

@@ -2,7 +2,7 @@
### CV 领域的大任务
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png)
#### aImage classification <strong>图像分类</strong>
@@ -18,7 +18,7 @@
- 这张图我们需要标注两个类别 `head、helmet头盔`
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif)
#### cSemantic segmentation <strong>语义分割</strong>
@@ -32,13 +32,13 @@
#### eKey Point 人体关键点检测
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnT2udZtMmV2kLQsXoPuElNd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnT2udZtMmV2kLQsXoPuElNd.png)
通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要。
#### fScene Text RecognitionSTR场景文字识别
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png)
很多照片中都有一些文字信息,这对理解图像有重要的作用。
@@ -48,7 +48,7 @@
利用两张图片或者其他信息生成一张新的图片
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png)
利用左边两张小图生成右边的图片
@@ -56,6 +56,6 @@
将输入图片分辨率增加
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png)
当然还有一些新兴领域我们没有写入~

View File

@@ -117,7 +117,7 @@ Torchvision 库中的 torchvision.datasets 包中提供了丰富的图像数据
下表中列出了 torchvision.datasets 包所有支持的数据集。各个数据集的说明与接口,详见链接 [https://pytorch.org/vision/stable/datasets.html](https://pytorch.org/vision/stable/datasets.html)。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png)
注意torchvision.datasets 这个包本身并不包含数据集的文件本身,它的工作方式是先从网络上把数据集下载到用户指定目录,然后再用它的加载器把数据集加载到内存中。最后,把这个加载后的数据集作为对象返回给用户。
@@ -129,11 +129,11 @@ MNIST 数据集是一个著名的手写数字数据集,因为上手简单,
MNIST 数据集是 NIST 数据集的一个子集MNIST 数据集你可以通过[这里](http://yann.lecun.com/exdb/mnist/)下载。它包含了四个部分。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png)
MNIST 数据集是 ubyte 格式存储,我们先将“训练集图片”解析成图片格式,来直观地看一看数据集具体是什么样子的。具体怎么解析,我们在后面数据预览再展开。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png)
接下来,我们看一下如何使用 Torchvision 来读取 MNIST 数据集。

View File

@@ -12,21 +12,21 @@ AlexNet 有 6 千万个参数和 650,000 个神经元。
### <strong>网络框架图</strong>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng0jB2dmDD18EwU8nAIFPIc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng0jB2dmDD18EwU8nAIFPIc.png)
### <strong>使用 ReLU 激活函数代替 tanh</strong>
在当时,标准的神经元激活函数是 tanh()函数,这种饱和的非线性函数在梯度下降的时候要比非饱和的非线性函数慢得多,因此,在 AlexNet 中使用 ReLU 函数作为激活函数。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png)
### <strong>采用 Dropout 防止过拟合</strong>
dropout 方法会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是 0.5,设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络(如下图所示),然后再用反向传播方法进行训练。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png)
###

View File

@@ -10,7 +10,7 @@
### 框架图
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png)
### 同 CNN 的对比
@@ -26,7 +26,7 @@ FCN 对图像进行像素级的分类,从而解决了语义级别的图像分
这里图像的反卷积使用了这一种反卷积手段使得图像可以变大FCN 作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现 end to end。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngqgiogbvy4OYpIzIo6eSXd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngqgiogbvy4OYpIzIo6eSXd.png)
### 视频

View File

@@ -21,11 +21,11 @@
如图所示,随着层数越来越深,预测的效果反而越来越差(error 越大)
:::
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBDfBnOPmS0btwNseKvsN6f.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBDfBnOPmS0btwNseKvsN6f.png)
## 网络模型
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png)
::: warning 😺
我们可以看到ResNet 的网络依旧非常深,这是因为研究团队不仅发现了退化现象,还采用出一个可以将网络继续加深的 trickshortcut亦即我们所说的 residual。
@@ -35,7 +35,7 @@
:::
### residual 结构
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhgVaLChu3O2omGJKzFU7uB.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhgVaLChu3O2omGJKzFU7uB.png)
## 网络代码
@@ -197,7 +197,7 @@ def resnet101(num_classes=1000, include_top=True):
## 视频
https://www.bilibili.com/video/BV1P3411y7nn
<Bilibili bvid='BV1P3411y7nn'/>
## 思考

View File

@@ -8,7 +8,7 @@
## 网络框架
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png)
::: warning 😺
@@ -45,7 +45,7 @@ U-net 网络的结构如图所示,蓝色箭头代表卷积和激活函数,
## 视频
https://www.bilibili.com/video/BV1Vq4y127fB
<Bilibili bvid='BV1Vq4y127fB'/>
## 思考 1
::: warning 🤔

View File

@@ -6,11 +6,11 @@
- 你可以先行尝试一下怎么把在 MNIST 上训练的网络真正投入应用,比如识别一张你自己用黑笔写的数字~
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg)
- 比如你可以尝试训练一个网络来实现人体五官分割(笔者之前就玩过这个)数据集采用 [helen 数据集](https://pages.cs.wisc.edu/~lizhang/projects/face-parsing/),关于数据集的架构你可以搜一搜,自己设计一个 Dataloader 和 YourModle 来实现前言中的五官分割效果(真的很有乐子 hhh
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJJlzanhvtE55Q7d0IR1vph.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJJlzanhvtE55Q7d0IR1vph.png)
- 当然你也可以尝试一些自己感兴趣的小任务来锻炼工程能力~

View File

@@ -6,11 +6,11 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位
在生成建模前,我们需要对被建模物体进行密集的采样,如下图是一个示例的训练集,它含有 100 张图片以及保存了每一张图片相机参数(表示拍摄位置,拍摄角度,焦距的矩阵)的 json 文件。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6jg09V944MU1sBsstmdaib.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6jg09V944MU1sBsstmdaib.png)
你可以看到,这 100 张图片是对一个乐高推土机的多角度拍摄结果。我们需要的是一个可<strong>以获取这个推土机在任意角度下拍摄的图片</strong>的模型。如图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif)
现在来看 NeRF 网络:
@@ -40,7 +40,7 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位
- 对应的小方块的 RGB 信息
- 不透明度
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg)
在这里,作者选择了最简单的 MLP因此<strong>这是一个输入为 5 维,输出为 4 维向量</strong>($R,G,B,\sigma$)的简单网络,值得注意的是,不透明度与观察角度无关,这里在网络中进行了特殊处理,让这个值与后两维无关。
@@ -58,15 +58,15 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位
这段要仔细看和推导,第一遍不容易直接懂。顺带一提,我们的<strong>小方块</strong>学名叫<strong>体素</strong><del>为了显得我们更专业一点以后就叫它体素罢</del>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png)
上面所说的公式具体如下t 是我们的$\sigma$$t_f,t_n$分别是离发射点最远的体素和最近的体素。这个公式求得是像素的颜色。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png)
思路总体如上,这里放一张找来的渲染过程示意图(<del>不知道为什么有点包浆</del>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfH30VDvbSdzahs5lRuirUd.gif)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfH30VDvbSdzahs5lRuirUd.gif)
# 算法细节部分
@@ -86,10 +86,10 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位
粗网络就是上述采样方法用的普通网络,而<strong>粗网络输出的不透明度值会被作为一个概率分布函数</strong>,精细网络根据这个概率分布在光线上进行采样,不透明度越大的点,它的邻域被采样的概率越大,也就实现了我们要求的在实体上多采样,空气中少采样。最后精细网络输出作为结果,因此粗网络可以只求不透明度,无视颜色信息。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwl72wntQgYMFvRPTWY5fPf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwl72wntQgYMFvRPTWY5fPf.png)
## 位置编码
学过 cv 的大家想必对这个东西耳熟能详了吧~,这里的位置编码是对输入的两个位置和一个方向进行的(体素位置,相机位置和方向),使用的是类似 transformer 的三角函数类编码如下。位置编码存在的意义是放大原本的 5 维输入对网络的影响程度,把原本的 5D 输入变为 90 维向量;并且加入了与其他体素的相对位置信息。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnliAj5mb0Afz0TOMwrwytmh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnliAj5mb0Afz0TOMwrwytmh.png)

View File

@@ -12,19 +12,19 @@
<strong>Pixel-nerf</strong><strong> </strong>对输入图像使用卷积进行特征提取再执行 nerf若有多个输入对每个视角都执行 CNN在计算光线时取每一个已有视角下该坐标的特征经过 mlp 后算平均。可以在少量视角下重建视图,需要进行预训练才能使用,有一定自动补全能力(有限)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEiUODOd4FOBxYIZmmihyef.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEiUODOd4FOBxYIZmmihyef.png)
### 2.IBRnet
<strong>IBRnet</strong><strong> </strong>是 pixel-nerf 的改进版,取消了 CNN并且在 mlp 后接入了 transformer 结构处理体密度(不透明度),对这条光线上所有的采样点进行一个 transformer。同时在获取某个体素的颜色和密度时作者用了本视角相邻的两个视角获取对应体素在这两张图片中的像素以图片像素颜色视角图片特征作为 mlp 的输入。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png)
### 3.MVSnerf
<strong>MVSnerf</strong><strong> </strong>它用 MVS 的方法构建代价体然后在后面接了一个 nerfMVS 是使用<strong>多视角立体匹配</strong>构建一个代价体,用 3D 卷积网络进行优化,这里对代价体进行 nerf 采样,可以得到可泛化网络。它需要 15min 的微调才能在新数据上使用。<strong>多视角立体匹配是一种传统算法,通过光线,几何等信息计算图像中小块的相似度,得出两个相机视角之间的位置关系。这个算法也被广泛使用在得到我们自己采样的数据的相机变换矩阵上(我就是这么干的)</strong>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbd2YxumunZR9LZG3ANrPrb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbd2YxumunZR9LZG3ANrPrb.png)
此处涉及较多图形学,使用了平面扫描算法,其中有单应性变换这个角度变换算法,推导与讲解如下:
@@ -34,7 +34,7 @@
平面扫描就是把 A 视角中的某一像素点(如图中红色区域)的相邻的几个像素提取出来,用单应性变换转换到 B 视角中,这时候用的深度是假设的深度,遍历所有假设的深度,计算通过每一个假设深度经过单应性变换得到的像素小块和 B 视角中对应位置的差值loss取最小的 loss 处的深度作为该像素的深度。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5JmWUh1Gu283biqHq3Op0r.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5JmWUh1Gu283biqHq3Op0r.png)
构建代价体:
@@ -55,7 +55,7 @@
展开说说其实这也是神经网络发展的一个方向以前的深层网络倾向于把所有东西用网络参数表示这样推理速度就会慢这里使用哈希表的快速查找能力存储一些数据信息instant-ngp 就是把要表达的模型数据特征按照不同的精细度存在哈希表中,使用时通过哈希表调用或插值调用。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXSUge0BqBCecdDJLQr4cRc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXSUge0BqBCecdDJLQr4cRc.png)
# 3.可编辑(指比如人体运动等做修改工作的)
@@ -63,7 +63,7 @@
<strong>Human-nerf</strong><strong> </strong>生成可编辑的人体运动视频建模,输入是一段人随便动动的视频。输出的动作可以编辑修改,并且对衣物折叠等有一定优化。使用的模型并非全隐式的,并且对头发和衣物单独使用变换模型。使用了逆线性蒙皮模型提取人物骨骼(可学习的模型),上面那个蓝色的就是姿态矫正模块,这个模块赋予骨骼之间运动关系的权重(因为使用的是插值处理同一运动时不同骨骼的平移旋转矩阵,一块骨骼动会牵动其他骨骼)图中的 Ω 就是权重的集合,它通过 mlp 学习得到。然后得到显式表达的人物骨骼以及传入视频中得到的对应骨骼的 meshskeletal motion 就是做游戏人物动作用的编辑器这种,后面残差链接了一个 non-rigid-motion非刚性动作这个是专门处理衣物和毛发的主要通过学习得到然后粗暴的加起来就能得到模型再经过传统的 nerf 渲染出图像。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png)
### 2.Neural Body
@@ -75,7 +75,7 @@
EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作,演示视频右下。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png)
这是 EasyMocap 的演示。
@@ -87,7 +87,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作
是个预训练模型,<strong>训练的模块就是这个 3D 卷积神经网络</strong>。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbclBwg3BsubGOrt8vZf0qb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbclBwg3BsubGOrt8vZf0qb.png)
### 3.wild-nerf
@@ -101,11 +101,11 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作
在此网络的单个输出上貌似是不监督的,因为没办法进行人为标注。这点我不是很确定,以后如果发现了会来修改的。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYeaiioqtFzQlztsTwiEpzg.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYeaiioqtFzQlztsTwiEpzg.png)
渲染经过形变的物体时,光线其实是在 t=0 时刻进行渲染的,因为推土机的铲子放下去了,所以<strong>光线是弯曲的</strong>。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng7xDooDmmpbCJRyLJBucwe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng7xDooDmmpbCJRyLJBucwe.png)
# 4.用于辅助传统图像处理
@@ -123,23 +123,23 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作
<strong>GRAF</strong><strong> </strong>把 GAN 与 nerf 结合,增加了两个输入,分别是<strong>外观/形状编码 z</strong>和<strong>2D 采样编码 v</strong>z 用来改变渲染出来东西的特征比如把生成的车变色或者变牌子suv 变老爷车之类的。v(s,u)用来改变下图 2 中训练时选择光线的标准。这里训练时不是拿 G 生成的整张图扔进 D 网络,而是根据 v 的参数选择一些光线组成的 batch 扔进 D 进行辨别
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png)
### 2.GIRAFFE
<strong>GIRAFFE</strong> 是 GRAF 的改进工作,可以把图片中的物品,背景一个个解耦出来单独进行改变或者移动和旋转,也可以增加新的物品或者减少物品,下图中蓝色是不可训练的模块,橙色可训练。以我的理解好像要设置你要解耦多少个(N)物品再训练,网络根据类似 k 近邻法的方法在特征空间上对物品进行分割解耦,然后分为 N 个渲染 mlp 进行训练,训练前加入外观/形状编码 z。最后还是要扔进 D 训练。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB04hwHA1o64WBvYSyVTDod.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB04hwHA1o64WBvYSyVTDod.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC2bKVHOANjGOePLHk7jfZe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC2bKVHOANjGOePLHk7jfZe.png)
### 3.OSF
<strong>OSF</strong>Object-Centric Neural Scene Rendering可以给移动的物体生成合理的阴影和光照效果。加入了新的坐标信息光源位置与相机坐标等一起输入。对每个小物件构建一个单独的小 nerf计算这个小 nerf 的体素时要先经过光源照射处理(训练出来的)然后在每个小物件之间也要计算反射这样的光线影响,最后进行正常的渲染。<del>这篇文章没人写 review有点冷门这些都是我自己读完感觉的不一定对。</del>
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png)
### 4.Hyper-nerf-gan
@@ -153,7 +153,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作
左边是常规卷积网络生成图像,右边是用 INR 生成图像。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png)
这种方法存在两个问题:
@@ -165,8 +165,8 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作
FMM 主要是把要学习的矩阵转化为两个低秩矩阵,去先生成他们俩再相乘,减少网络计算量。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0oHY54dgL2bxmryxjqxC6f.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0oHY54dgL2bxmryxjqxC6f.png)
现在开始讲 Hyper-nerf-gan 本身,它看上去其实就是 nerf 接在 gan 上。不过有一些变化,比如输入不再包含视角信息,我<strong>很怀疑它不能很好表达反光效果</strong>。而且抛弃了粗网络细网络的设计,只使用粗网络减少计算量。这里的 generator 完全就是 INR-Gan 的形状,生成权重,然后再经过 nerf 的 mlp 层生成,没啥别的了,就这样吧。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png)

View File

@@ -2,7 +2,7 @@
如何使用和怎么下载就不讲了,直接搜就有,它可以把多个拍摄同一物体的图片转换为它们对应视角的相机矩阵和拍摄角度,可以实现自制数据集做 nerf。它的流程SFM 算法)可以概括如下:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png)
这里主要是记录一下它的原理:
首先是一个经典关键点匹配技术:<strong>SIFT</strong>
@@ -11,53 +11,53 @@
## DOG 金字塔
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneERqw4amGHf6f2SX7gcdny.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneERqw4amGHf6f2SX7gcdny.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv4dRbGDg9eemcyQFREYs0b.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv4dRbGDg9eemcyQFREYs0b.png)
下面是原理方法:
首先是<strong>高斯金字塔</strong>,它是把原图先放大两倍,然后使用高斯滤波(高斯卷积)对图像进行模糊化数次,取出倒数第三层缩小一半继续进行这个过程,也就是说它是由一组一组的小金字塔组成的。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg)
然后是基于高斯金字塔的 DOG 金字塔,也叫差分金字塔,它是把相邻的高斯金字塔层做减法得到的,因为经过高斯模糊,物体的轮廓(或者说不变特征)被模糊化,也就是被改变。通过相减可以得到这些被改变的点。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg)
## 空间极值点检测
为了找到变化的最大的几个点来作为特征点,我们需要找到变化的极值点,因此需要进行比较,这里是在整个金字塔中进行对比,我们提取某个点周边 3*3*3 的像素点进行比较,找到最大或最小的局部极值点。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl48ovxbqSeTljgF3rp16ue.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl48ovxbqSeTljgF3rp16ue.png)
同时我们也对关键点分配方向,也就是这个点在图片空间中的梯度方向
梯度为:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbQx8TntyX8iETPixOnKjef.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbQx8TntyX8iETPixOnKjef.png)
梯度方向为:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png)
我们计算以关键点为中心的邻域内所有点的梯度方向,然后把这些 360 度范围内的方向分配到 36 个每个 10 度的方向中,并构建方向直方图,这里的示例使用了 8 个方向,几个随你其实:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg)
取其中最大的为主方向,若有一个方向超过主方向的 80%,那么把它作为辅方向。
操作可以优化为下图,先把关键点周围的像素分成 4 块,每块求一次上面的操作,以这个 4 个梯度直方图作为关键点的方向描述。也就是一个 2*2*8(方向数量)的矩阵作为这个点的方向特征。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png)
实验表明,使用 4*4*8=122 的描述更加可靠。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg)
特征点的匹配是通过计算两组特征点的 128 维的关键点的欧式距离实现的。欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。

View File

@@ -8,10 +8,10 @@
该任务目前在学术上是检索出不同摄像头下的相同行人图片,同时数据集中只有人的全身照,如下图所示。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID1.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID1.png)
但是实际上在实际应用中的时候会和检测结合,简单来说先框出目标后分类,如下图所示。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID2.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID2.png)
这个方向做的比较的奇怪,该模块只做整体性介绍,同时希望学习该模块的你对经典网络有所了解。

View File

@@ -4,25 +4,25 @@
<strong>分类 (text classification)</strong> 给一句话或者一段文本,判断一个标签。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PxE3b05ApofzZ1x8u49cirdUnye.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PxE3b05ApofzZ1x8u49cirdUnye.png)
图 2分类 (text classification)
<strong>蕴含 (textual entailment)</strong> 给一段话,和一个假设,看看前面这段话有没有蕴含后面的假设。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/OuhabfzABoqxQxxS1n1cPLTinKb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/OuhabfzABoqxQxxS1n1cPLTinKb.png)
图 3蕴含 (textual entailment)
<strong>相似 (Similarity)</strong> 判断两段文字是否相似。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png)
图 4相似 (Similarity)
<strong>多选题 (Multiple Choice)</strong> 给个问题,从 N 个答案中选出正确答案。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg)
图 5多选题 (Multiple Choice)

View File

@@ -1,6 +1,6 @@
# 推荐系统的外围架构
![推荐系统外围架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统外围架构图.png)
![推荐系统外围架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统外围架构图.png)
<center>推荐系统外围架构图</center>
@@ -22,7 +22,7 @@
若是将推荐系统的任务细分,可以结合现实实际情况:将最新加入的物品推荐给用户;商业上需要宣传的物品推荐给用户;为用户推荐不同种类的物品。
**复杂的特征和情况不同的任务**会让推荐系统变得非常复杂所以推荐系统的架构为了方便考虑采用多个不同的推荐引擎组成每个推荐引擎专门负责某一类特征和一种任务而推荐系统再将推荐引擎的结果按照一定的优先级合并排序并返回给UI系统。
![推荐系统的架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统的架构图.png)
![推荐系统的架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统的架构图.png)
<center>推荐系统的架构</center>
如上图所示。
@@ -38,7 +38,7 @@
- 推荐列表筛选、过滤、重排列部分
![推荐引擎的架构](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐引擎的架构.png)
![推荐引擎的架构](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐引擎的架构.png)
以上为推荐引擎的架构图。

View File

@@ -179,7 +179,7 @@ $$Preference(u,i)=r_{ui}=p^T_uq_i=\sum^F_{f=1}{p_{u,k}q_{i,k}}$$
在研究图模型之前,需要用已有的数据生成一个图,设二元组 $(u,i)$ 表示用u对于物品 i 产生过行为。令 $G(V,E)$ 表示用户物品二分图,其中$V=V_U\cup V_I$ 由用户顶点集合和物品顶点集合组成,$E$ 是边的集合。对于数据集中的二元组 $(u,i)$ 图中都会有对应的边 $e(v_u,v_i)\in E$ 如下图所示。
![用户物品二分图模型](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/用户物品二分图模型.png)
![用户物品二分图模型](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/用户物品二分图模型.png)
### 基于图的推荐算法

View File

@@ -10,5 +10,5 @@
<br/><br/>
而SRSs则是将用户和商品的交互建模为一个动态的序列并且利用序列的依赖性来活捉当前和最近用户的喜好。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnolggxKhDZDBzIFPIaDFfhc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnolggxKhDZDBzIFPIaDFfhc.png)

View File

@@ -4,7 +4,7 @@
如下图是阿里巴巴著名的“千人千面”推荐系统
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg)
还有短视频应用用户数量的急剧增长,这背后,视频推荐引擎发挥着不可替代的作用

View File

@@ -42,4 +42,4 @@
在成功搭建起知识图谱这个数据库后,接下来就是最重要的一步了,让计算机理解——表示学习。目前这个方向,最重要的就是向量化,将节点和关系全部向量化,一方面有向量的平移不变性的好处,另一方面也方便计算,在从中穿插点图论的相关知识,例如将知识图谱看成特大号异构图进行处理。不过这方面方向太多,难以一一列举。
- [https://www.cnblogs.com/fengwenying/default.html?page=5](https://www.cnblogs.com/fengwenying/default.html?page=5) 胡萝不青菜的博客
- [https://space.bilibili.com/497998686?spm_id_from=333.337.0.0](https://space.bilibili.com/497998686?spm_id_from=333.337.0.0) up 主骰子 AI知识图谱在推荐系统上的利用
- [up主 骰子 AI](https://space.bilibili.com/497998686?spm_id_from=333.337.0.0) up 主 骰子 AI知识图谱在推荐系统上的利用

View File

@@ -18,7 +18,7 @@
## 模型详解
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png)
### 模型主题结构
@@ -51,9 +51,9 @@
例如
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv2inISAGi2xOauc3pxKpCb.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv2inISAGi2xOauc3pxKpCb.png)
其中该张图片的编码为[0.50.60.3....]
@@ -70,4 +70,4 @@
## 视频
https://www.bilibili.com/video/BV15P4y137jb
<Bilibili bvid='BV15P4y137jb'/>

View File

@@ -30,13 +30,13 @@ mlp 的重点和创新并非它的模型结构,而是它的训练方式,前
BERT 模型的输入就是上面三者的和,如图所示:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngc1a7cWapQA9rSLXYqUvkf.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngc1a7cWapQA9rSLXYqUvkf.png)
## 模型结构
简单来说BERT 是 transformer<strong>编码器</strong>的叠加,<strong>也就是下图左边部分</strong>。这算一个 block。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPg8594YzCdnX6KZxpEYYod.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPg8594YzCdnX6KZxpEYYod.png)
说白了就是一个 多头自注意力=>layer-norm=> 接 feed forward(其实就是 mlp)=>layer-norm没有什么创新点在这里。因为是一个 backbone 模型,它没有具体的分类头之类的东西。输出就是最后一层 block 的输出。
@@ -74,6 +74,8 @@ BERT 因为是以完型填空训练的,因此不能用于文本生成任务,
# 相关资料:
李沐的【BERT 论文逐段精读【论文精读】】 [https://www.bilibili.com/video/BV1PL411M7eQ/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6](https://www.bilibili.com/video/BV1PL411M7eQ/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6)
李沐的【BERT 论文逐段精读【论文精读】】https://www.bilibili.com/video/BV1PL411M7eQ
<Bilibili bvid='BV1PL411M7eQ'/>
原论文:[https://arxiv.org/pdf/1810.04805v2](https://arxiv.org/pdf/1810.04805v2)

View File

@@ -28,7 +28,7 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行
在这里,作者为了加大任务的难度,扩大了被 mask 掉的比例,避免模型只学到双线性插值去修补缺的图像。作者把 75% 的 patch 进行 mask然后放入模型训练。从下图可以看出被 mask 的块是不进行编码的,这样也可以降低计算量,减少成本。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png)
在被保留的块通过编码器后,我们再在原先位置插入只包含位置信息的 mask 块,一起放入解码器。
@@ -38,12 +38,14 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行
下面是原论文给的训练结果,可以看到效果是很惊人的。(有些图我脑补都补不出来)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPWO0VWbPvCE537tf6MWu4e.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPWO0VWbPvCE537tf6MWu4e.png)
# 相关资料
更具体的比如模型性能对比最好还是去看原论文或者李沐老师的讲解
李沐【MAE 论文逐段精读【论文精读】】 [https://www.bilibili.com/video/BV1sq4y1q77t/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6](https://www.bilibili.com/video/BV1sq4y1q77t/?share_source=copy_web&vd_source=59df19b7fca15c3fb440b91c21605fc6)
李沐【MAE 论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1sq4y1q77t
<Bilibili bvid='BV1sq4y1q77t'/>
原论文:[https://arxiv.org/pdf/2111.06377v2.pdf](https://arxiv.org/pdf/2111.06377v2.pdf)

View File

@@ -38,7 +38,9 @@
论文的优秀讲解
[Transformer 中 Self-Attention 以及 Multi-Head Attention 详解_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15v411W78M?spm_id_from=333.337.search-card.all.click&vd_source=2cb6252f9211ae9d29cf1f76f0aea8d7)
[Transformer 中 Self-Attention 以及 Multi-Head Attention 详解_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15v411W78M)
<Bilibili bvid='BV15v411W78M'/>
除此之外就是相关代码,不要求你可以完全自己复现,但是要保证非常重要的知识都懂

View File

@@ -24,7 +24,7 @@
直观来讲,我们把特征的向量进行一下归一化,它们就分布在一个超球面上。简单起见,我们先看 3 维向量
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png)
我们通过<strong>正样本</strong>(跟拿到的特征<strong>应当相近</strong>的另一个特征)与<strong>负样本</strong>(反之)的对比,使得

View File

@@ -8,7 +8,7 @@
作者团队认为,让这些猎豹,雪豹的标签相互接近(指互相在判别时都排名靠前)的原因并不是它们有相似的标签,而是它们有相似的图像特征。
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png)
## 个体判别任务
@@ -16,7 +16,7 @@
于是他们<strong>把每一个图片当作一个类别</strong>,去跟其他的图片做对比,具体模型如下
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPNukes2FlNwUFSKiqIJEbd.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPNukes2FlNwUFSKiqIJEbd.png)
先介绍一下模型结构:
@@ -48,11 +48,11 @@
A 是起始点B 是第一次更新后的点C 是第二次更新后的点
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5zfD155Joy1eD5CvbZXZnc.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5zfD155Joy1eD5CvbZXZnc.png)
而在我们刚刚提到的动量更新里,它的公式可以概括为:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png)
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png)
m 表示动量k 是新的特征q 是上一个特征,只要设置小的动量就可以使改变放缓。

Some files were not shown because too many files have changed in this diff Show More