Re:从零开始的PyTorch生活 week1

Re:从零开始的PyTorch生活

Day1 6月28

一、关于tensor

辨析-1

-1可以表示最后一行/列

x=tensor([[-0.1859,  1.3970,  0.5236],
        [ 2.3854,  0.0707,  2.1970],
        [-0.3587,  1.2359,  1.8951],
        [-0.1189, -0.1376,  0.4647],
        [-1.8968,  2.0164,  0.1092]])
print(x[:, -1])

会打印最后一列:tensor([0.5236, 2.1970,1.8951, 0.4647, 0.1092])

-1也可以表示缺省

在view()函数里

x=torch.randn(4,4)#4行4列
y=x.view(16)#形成16维的向量
z=x.view(-1,8)#view的-1缺省行数,但是已知列数是8,所以行数是2
print(x)
print(y)
print(z)
tensor([[ 0.5618,  0.6179, -0.6277,  0.3646],
        [ 0.9595, -0.9613, -0.6899, -0.2878],
        [-1.1062, -0.6001,  0.4027,  0.4323],
        [ 0.0840,  0.1004,  0.9699, -0.5401]])
tensor([ 0.5618,  0.6179, -0.6277,  0.3646,  0.9595, -0.9613, -0.6899, -0.2878,
        -1.1062, -0.6001,  0.4027,  0.4323,  0.0840,  0.1004,  0.9699, -0.5401])
tensor([[ 0.5618,  0.6179, -0.6277,  0.3646,  0.9595, -0.9613, -0.6899, -0.2878],
        [-1.1062, -0.6001,  0.4027,  0.4323,  0.0840,  0.1004,  0.9699, -0.5401]])

辨析randn和rand

torch.rand(*sizes, out=None) → Tensor

  • randn:正态分布, μ \mu μ=0, σ \sigma σ=1
  • rand:包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。

Day2 6月29

早上:看到一篇好的文章,讲的是python的切片操作,重点掌握的是切片的3个参数[start:\end:step]

step:正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。

下午:看了Autograd

一、requires_grad

这是每个Tensor都有的参数,默认是False。

x = torch.ones(2, 2, requires_grad=True)

设置为True之后,会追踪与它相关的计算

所以,求导的时候,x.grad会一直回溯到设置为True的地方,中间的过程比如y=x^3,z=3y…会算在导数里

二、backward()

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)

传入的参数tensors表示雅可比向量积中,作为相乘向量的v

backward会自动对tensor计算雅克比矩阵,而v是用来确定最终输出的是哪个变量的偏导向量(Page25)

实际上,自己用草稿纸推一下就很明白了。

三、神经网络

一个典型的神经网络训练过程包括以下几点:(page27)
1.定义一个包含可训练参数的神经网络(class Net(nn.Module)😃

2.迭代整个输入(循环)
3.通过神经网络处理输入(optimizer.zero_grad()清零梯度缓存器 output = net(input))
4.计算损失(loss)(loss = criterion(output, target) )
5.反向传播梯度到神经网络的参数( loss.backward() )
6.更新网络的参数,典型的用一个简单的更新方法(Optimize包 optimizer.step())

Day3 6月30

一、Net

  • 激励函数: leakyReLU和Tanh是比较流行的,提供好的非线性特征

  • 隐藏层与输入层的大小不要相差太多(待探究原因)

  • 损失函数:

    • 交叉熵损失函数:适合期望标签值为0/1的情况
    • MSE:(待探究)

二、CNN

卷积神经网络

卷积:一般是提取图片特征

  • padding : 在图片四周补上0,可以使得feature map 和输入的图片尺寸相同,也可以使边缘的数据被扫描的次数增多

    • 如果边缘的东西不重要(比如正方形照片识别圆形标志,四周是边角料),就不用padding了
  • Batch Normalization:批归一化,防止梯度消失

  • Pooling层: 降维操作,比如2x2的pool可以把2nx2n的图片降维成为nxn的。

    而且还与激励函数比较相似,都没有待定系数,跟在卷积后面,是产生非线性的效果(待探究)

    • Max Pooling:取最大
    • Average Pooling:取平均
    • 二者都各有好处,具体到任务里要实验

三、RNN

循环神经网络

循环层

  • 特点:把前一次输入的内容或其中间的激励值,以及当前这一次的输入值,一起作为网络的输入
  • 好处:时序上,前一次的内容对这一次的输入有影响,就可以被学习

现在比较流行的是LSTM与GRU

LSTM

  • 实际上有超多的参数,所以实际工作里,大多只使用一层LSTM,2层就非常多了
  • 一个以时序输入的Sequence,如果其前后有联系,就可以根据上文对下文进行提示或限制,那么,用LSTM网络可以去记忆时序之间的概率关系

Day4 7月3日 摸了2天鱼QAQ

今天开始学习seq2seq模型(太难了)

还是学习字符级RNN名字分类吧

首先,这是一个字符级的,应该是用abcd看成独热向量,所以可以用一个max_lenth作为固定的input_size去训练吧

其次,怎么设置这个RNN的层呢,设置一个隐藏层和输出层就好

貌似这周得断更了,好多论文要看(留下了不学无术的泪水)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值