python笔记
模块 模块(module)是组织 Python 代码的单位。 模块拥有一个命名空间,其中可以包含任意的 Python 对象。例如:变量、函数、类、常量、甚至其他模块。 模块通过“导入(import)”被加载到 Python 程序中。 最基本的情况:模块 = 单个 .py 文件 例如你有一个文件: 1mymodule.py 内容是: 12def greet(): print("Hello") 你就可以在别的地方导入它: 12import mymodulemymodule.greet() 在这个意义上,模块就是单个 Python 文件。 进阶:包(package)是一种特殊的模块 当你有很多 .py 文件想组织在一起时,可以创建一个包。 包其实也是一种“模块”,只是它是一个文件夹而不是单个文件。 例如目录结构: 1234mypackage/ __init__.py utils.py models.py 你可以这样导入: 12import mypackage.utilsfrom mypackage import models 这里: my...
Pytorch中的张量
定义 张量(tensor)是一组具有多维度结构的数。维度的个数称为 阶(rank),通过tensor.dim()查看。张量的具体形状通过tensor.shape()查看。 索引方式 切片索引 像 python 的 list 和 numpy 的 array 一样,张量可以使用 start:stop 或 start:stop:step 这样的语法进行切片。stop 是不被包括在内的第一个元素。 123456789a = torch.tensor([0, 11, 22, 33, 44, 55, 66])print(0, a) # (0) Original tensorprint(1, a[2:5]) # (1) Elements between index 2 and 5print(2, a[2:]) # (2) Elements after index 2print(3, a[:5]) # (3) Elements before index 5print(4, a[:]) # (4) All elementsprint(5, a[1:5:2]) ...
深度学习笔记(第二部分)
循环神经网络 (Recurrent Networks) 应用场景 之前 CNN 和 MLP 的输入和输出都只有一个,但实际问题中的输入和输出可能有多个。比如给图像加描述(one to many), 视频分类(many to one), 机器翻译(many to many),这些应用中可以使用循环神经网络。 当你处理的问题的输入或输出涉及到 序列 时候,可以使用循环神经网络。 循环神经网络可以对非序列型的数据比如图片进行序列化的处理。 基础概念 我们可以通过在每一个时间步应用一个递推公式来处理一系列向量xxx。 其中使用相同的权重矩阵WWW和状态更新函数fWf_WfW就可以处理任意长的序列。 在序列被处理过程中,RNN 有一个一直更新的内部状态。 ht=fW(ht−1,xt)h_{t}=f_{W} ( h_{t-1}, x_{t} ) ht=fW(ht−1,xt) 初始状态h0h_0h0被设置为全 0 或者通过学习得到。 RNN 实现 Vanilla RNN 一种 RNN 是"Vanilla RNN"。 ht=tanh(Whhht−1+Wxhxt...
深度学习笔记(第一部分)
线性分类器(Linear Classifiers) 线性分类器的缺点 解决方法之一:特征变换 优化(Optimization) w∗=argminwL(w)w^{*}=\operatorname{arg} \operatorname* {min}_{w} L ( w ) w∗=argwminL(w) SGD 对 gradient descent 进行 Stochastic 处理,每次迭代时候抽取一批样本而不是用全部样本用于参数更新来降低算力要求。 xt+1=xt−α∇f(xt)x_{t+1}=x_{t}-\alpha\nabla f ( x_{t} ) xt+1=xt−α∇f(xt) 123for t in range(num_steps): dw = compute_gradient(w) w -= learning_rate * dw 问题 SGD with Momentum SGD with Momentum 是为了克服 SGD 在收敛的过程中可能会停在 局部最小值 或者 鞍点 的问题,在这些点处梯度为 0,参数无法继续更新。 通过给 SGD ...