动手学深度学习在线课程

github

课程安排

LeNet ResNet LSTM BERT
损失函数 目标函数 过拟合 优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

深度学习介绍

1.图片集
2. 图片分类
3. 物体检测和分割
4. 样式迁移
5. 人脸合成
6. 文字生成图片
在这里插入图片描述
7. 文字生成
8. 无人驾驶

安装

anaconda

conda常用命令
conda官网
anaconda python1.6

1.win+r 进入cmd
2.创建名字为py36,环境为python3.6的虚拟环境:

conda create -n py36 python=3.6 pip
-y, --yes
Do not ask for confirmation.

-n, --name
Name of environment.

3.激活py36

activate py36

4.pip安装

pip install -y opencv-python
pip install -y jupyter d2l torch torchvision
wget http://zh-v2.d2l.ai/d2l-zh.zip
unzip d2l-zh.zip
jupyter notebook

5.补充的

conda env list

删除环境

使用conda env remove -n env-name,删除指定的环境。

(base) C:\Users\zlw>conda env list

conda environments:
base * E:\anaconda
py36 E:\anaconda\envs\py36
py37 E:\anaconda\envs\py37

(base) C:\Users\zlw>activate py36

(py36) C:\Users\zlw>

1、创建名字为XXX,环境为python3.6的虚拟环境:
conda create --name XXX python=3.6
2、进入虚拟环境XXX:
source activate XXX
3、退出虚拟环境:
source deactivate
4、删除虚拟环境XXX:
conda remove -n XXX --all

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

”cv2”中的”2”并不表示OpenCV的版本号。
OpenCV是基于C/C++的,
”cv”和”cv2”表示的是底层C API和C++API的区别,
”cv2”表示使用的是C++API。这主要是一个历史遗留问题,是为了保持向后兼容性。

详情参考大佬文章

pytorch1.6

activate py36
# 官方conda
conda install pytorch==1.6.0 torchvision==0.7.0 cpuonly -c pytorch
# 官方pip
pip install torch==1.6.0+cpu torchvision -f https://download.pytorch.org/whl/torch_stable.html
# 永久更改pip源
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
# 清华源
 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 豆瓣源
 -i https://pypi.douban.com/simple

如果上面都不好用,可以手动离线安装
清华镜像网站
找到适合的
在这里插入图片描述
1.6 CPU版的
pytorch-1.6.0-py3.6_cpu_0.tar.bz2
torchvision-0.7.0-py36_cpu.tar.bz2

conda install --offline pytorch-1.6.0-py3.6_cpu_0.tar.bz2
conda install --offline torchvision-0.7.0-py36_cpu.tar.bz2

如果卡着,一直回车

pip install            
# 查看已安装的包
pip show 
# 列出所有的安装包
pip list
# pip检测更新
pip list –outdated
# pip升级包
pip install --upgrade 
# pip卸载包
pip uninstall 

pip -V
pip install --upgrade pip
easy_install -U pip==21.0.1

ubuntu

~$ sudo apt update
~$ sudo apt install build-essential
wget https://
bash 
pip install jupyter d2l torch torchvision
wget 记事本
sudo apt install zip
unzip

预备知识

数据操作

jupyter notebook

[1:3,1:]
左闭右开 省略到尾
1,21到尾列
[::3,::2]
每三行
0,30,2-1
张量
多维向量
torch.arange(12)
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
元素总数
x.numel()
形状
x.shape
x.reshape(3, 4)0 形状2,34
torch.zeros((2, 3, 4))

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
常见的标准算术运算符(+-*/**求幂函数)都可以被升级为按元素运算

连接 cat dim=0 按行

X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
x==y
x.sum()
广播机制
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))

numpy和tensor相互转换

A = X.numpy()
B = torch.tensor(A)
type(A), type(B)

a = torch.tensor([3.5])
a, a.item(), float(a), int(a)

数据预处理

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)

os.makedirs(name, mode=0o777, exist_ok=False)
作用
用来创建多层目录(单层请用os.mkdir)
参数说明
name:你想创建的目录名
mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。
exist_ok:是否在目录存在时触发异常。如果exist_ok为***False***(默认值),则在目标目录已存在的情况下***触发***FileExistsError异常;如果exist_ok为***True***,则在目标目录已存在的情况下***不会触发***FileExistsError异常。

with open() as f 用法
r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w: 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+: 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a: 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab: 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+: 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

import os

//创建../data
//打开../data/house_tiny.csv
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)
print(data)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

在这里插入图片描述

线性代数

向量
len(x)

x.shape

A = torch.arange(20).reshape(5, 4)
A

A.T

请注意,维度(dimension)这个词在不同上下文时往往会有不同的含义,这经常会使人感到困惑。为了清楚起见,我们在此明确一下。向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量。然而,张量的维度用来表示张量具有的轴数。在这个意义上,张量的某个轴的维数就是这个轴的长度。

两个矩阵的按元素乘法称为 哈达玛积(Hadamard product)(数学符号 ⊙ )

A.sum()
默认情况下,调用求和函数会将一个张量在所有轴上汇总为一个标量。
axis = 0按照行,可以理解为把“行”给抹去只剩1行,也就是上下压扁。
axis = 1按照列,可以理解为把“列”给抹去只剩1列,也就是左右压扁。
除以元素总数
A.mean(), A.sum() / A.numel()
有时在调用函数来计算总和或均值时保持轴数不变会很有用
sum_A = A.sum(axis=1, keepdims=True)
sum_A
A.cumsum(axis=0)

在这里插入图片描述

y = torch.ones(4, dtype=torch.float32)
x, y, torch.dot(x, y)

torch.sum(x * y)

在这里插入图片描述

点积在很多场合都很有用。例如,给定一组由向量 x∈Rd 表示的值,和一组由 w∈Rd 表示的权重。 x 中的值根据权重 w 的加权和可以表示为点积 x⊤w 。当权重为非负数且和为1(即 (∑di=1wi=1) )时,点积表示 加权平均(weighted average)。将两个向量归一化得到单位长度后,点积表示它们夹角的余弦。我们将在本节的后面正式介绍长度(length)的概念。

一个矩阵 A∈Rm×n 乘法看作是一个从 Rn 到 Rm 向量的转换。可以用方阵的乘法来表示旋转

torch.mul()是矩阵的点乘,即对应的位相乘 哈达玛积,要求shape一样, 返回的还是个矩阵
torch.mm()是矩阵正常的矩阵相乘,(a, b)* ( b, c ) = ( a, c )
torch.dot()类似于mul(),它是向量(即只能是一维的张量)的对应位相乘再求和,返回一个tensor数值
torch.mv()是矩阵和向量相乘,类似于torch.mm()

非正式地说,一个向量的范数告诉我们一个向量有多大
向量范数是将向量映射到标量的函数 f
L2 范数 是向量元素平方和的平方根
在 L2 范数中常常省略下标 2 ,也就是说, ∥x∥ 等同于 ∥x∥2 。

u = torch.tensor([3.0, -4.0])
torch.norm(u)

L1 范数,它表示为向量元素的绝对值之和,受异常值的影响较小

torch.abs(u).sum()

在这里插入图片描述
类似于向量的 L2 范数,矩阵 X∈Rm×n 的 弗罗贝尼乌斯范数(Frobenius norm) 是矩阵元素的平方和的平方根:

torch.norm(torch.ones((4, 9)))

微分

通常情况下,变得更好意味着最小化一个 损失函数(loss function),即一个衡量“我们的模型有多糟糕”这个问题的分数。
(1)优化(optimization):用模型拟合观测数据的过程;(2)泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值