打卡 第一次

第一节:线性回归部分(从0实现和用torch实现):

1.torch中:

index_selcet(a,0,j)其中,a表示被选择的目标,0表示按行索引,j为索引,j为torch.tensor([])形式

2.yield和return的区别

3. w.grad.data.zero_()

  b.grad.data.zero_()

每一次更新结束后,都要将其的梯度记录清0,不然会叠加,影响后面的训练


Torch可以从基础开始实现,也可以直接用torch直接调用简洁实现

1.torch如何构建多层的神经网络

首先构建结构

from torch import nn

# ways to init a multilayer network三种方法

# method one

net = nn.Sequential(

   nn.Linear(num_inputs, 1)

    #other layers can be added here

    )


# method two

net = nn.Sequential()

net.add_module('linear',nn.Linear(num_inputs, 1))

# net.add_module ......


# method three

from collections import OrderedDict

net = nn.Sequential(OrderedDict([

         ('linear', nn.Linear(num_inputs, 1))

         # ......

       ]))

然后初始化模型参数 init,定义损失函数,定义优化函数,训练


第二节:softmax

将输出值变换成为值为正且和为1的概率分布(解决了原来输出范围不决定,误差难以衡量的问题)

交叉熵损失函数

使用fasionminist数据集


第三节 多层感知机

激活函数

第四节 文本预处理

要对文本进行处理要先进行预处理

[if !supportLists]l  [endif]读入,分词,建立字典(将每个词映射到唯一的索引),将文本从词的序列转化为索引的序列,方便输入模型

读入

with open('/home/kesci/input/timemachine7163/timemachine.txt', 'r') asf:

        lines= [re.sub('[^a-z]+', ' ', line.strip().lower()) for line inf]

line.strip()去掉头尾的空白字符(空格制表换行符)

import re 正则表达式包

re.sub('[^a-z]+', ' ', line.strip().lower()) #正则表达式的替换函数,把由非英文字符开头的子串替换为空格


分词

有不同的分词级别,比如word和char

iftoken== 'word':

        return[sentence.split(' ') forsentenceinsentences]

建立字典

输入一个二维的列表,里面放的词,下面的函数把它展开,再用counter函数记录里面每个词出现的次数,得到字典(<词,词频>)

def count_corpus(sentences):

    tokens=[tk for stinsentencesfortkinst]

returncollections.Counter(tokens)


enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

>>> list(enumerate(seasons, start=1)) # 下标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]


Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。

for key,values in dict.items(): print key,values

字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', 'www.runoob.com')]


现有工具进行分词:

我们前面介绍的分词方式非常简单,它至少有以下几个缺点:

[if !supportLists]1.     [endif]标点符号通常可以提供语义信息,但是我们的方法直接将其丢弃了

[if !supportLists]2.     [endif]类似“shouldn't", "doesn't"这样的词会被错误地处理

[if !supportLists]3.     [endif]类似"Mr.", "Dr."这样的词会被错误地处理

因为自己写的分词逻辑很简单

有一些现有的工具可以很好地进行分词,我们在这里简单介绍其中的两个:spaCy和NLTK。


第五节 语言模型

一段自然语言文本可以看作是一个离散时间序列,给定一个长度为的词的序列,语言模型的目标就是评估该序列是否合理,即计算该序列的概率。概率越大,说明越合理

本节我们介绍基于统计的语言模型,主要是元语法。在后续内容中,我们将会介绍基于神经网络的语言模型。

N元语法,基于n-1马尔可夫链。(某个词的概率只与前面n-1个词相关)

[if !supportLists]l  [endif]存在很多问题

[if !supportLists]1.     [endif]参数空间过大

[if !supportLists]2.     [endif]数据稀疏

[if !supportLists]l   [endif]随机采样的基本过程

下面的代码每次从数据里随机采样一个小批量。其中批量大小batch_size是每个小批量的样本数,num_steps是每个样本所包含的时间步数。 在随机采样中,每个样本是原始序列上任意截取的一段序列,相邻的两个随机小批量在原始序列上的位置不一定相毗邻。


[if !supportLists]l  [endif]相邻采样的基本过程

如图假设批量大小为3,第一个批量里面的三个样本为红色。。。。

第六节 循环神经网络

网络构建

剪裁梯度

rnn中出现梯度爆炸和梯度衰减

针对梯度爆炸,有梯度裁剪去解决

第七节 过拟合、欠拟合


第八节 梯度消失梯度爆炸

你可能感兴趣的:(打卡 第一次)