zoukankan      html  css  js  c++  java
  • cs231n 作业2 心路历程

    Assignments 2

    作业说明在这里

    Fully-connected Neural Network

    今天写的时候思考了一下为什么课件里写的都是Wx+bWx+b的形式然而这里的code写的都是x * w + b,课件中的x是单张图片,这种for循环运算batch过于缓慢,故code中x是n组数据。写的时候就改成了x*w

    backward:根据链式法则更新梯度,根据要求的shape进行顺序调整,转置,reshape等等

    因为很多网络都是全连接后面立刻ReLu,所以sandwich layer就是把两层连在一起,里面调用刚刚写的两层(千万8要重复实现),嗯,这很软件工程,这种三明治层可以肆意的定义

    然后用这个写好的各个layer来实现一个两层的net,作业1已经实现过一次了,这次将其解耦,原来的写了两次的全连接,这次直接调用layers里的就行了,上面刚刚说的三明治层也立刻用上

    写好网络之后是对solver的介绍,把model和data(划分好train, val)扔进solver里,然后solver.train,这里把每次一边train一边val的代码也写了,就是作业1后期的很多重复劳动,很赞,偷懒是生产力发展的根本推动力。描述中说要模型练到至少50%,把solver.py中的例子直接复制过来就是52%了,逻辑和作业1中一模一样,效果也应当是一样的。感觉代码一下子变爽了,这个感觉以后一直能用到,tf or torch中并不会有这种solver的code,这种类似的代码似乎见过不少,api写的这么赞的是第一次。从输出中理解了epoch和Iteration的区别,前者是val loop,后者就是计算loss loop

    (2020.2.8 00:32累了,剩下还有一个FullyConnectedNet各种优化方法天亮写,似乎加上batch_norm和dropout更好写,明天起来先写batch_norm然后看课程视频下一章节写了dropout再从这里继续吧,晚安~)

    写BN写了一半发现不需要也行,这个依然是多层全联通网络,不过更加灵活一点,可以用一个list传入每层的节点数量(当然层数也随意)

    写完还有个各种不同的优化器,直接抄公式就行

    大头时间花在调参上(好像也不是很多时间),一开始自己蠢了把学习率写了个1e-2,一直爆炸,改成1e-3,一发入魂

    知乎上搜的调参顺序,码住

    Andrew Ng 的个人经验和偏好是:
    
    第一梯队: 
    
    - learning rate α
    
    第二梯队: 
    
    - hidden units                  
    - mini-batch size                  
    - momentum β
    
    第三梯队: 
    - number of layers                  
    - learning rate decay                  
    - other optimizer hyperparameters
    

    (2020.2.9 00:20 BN明天写吧)

    JJ 说的调参顺序:

    1. learning_rate
    2. reg, learning_rate_decay, model_size

    Batch Normalization

    讲的比较清楚,在线性层和激活层直接的一层,让数据更稳定.弹幕里有说,补一些blog和paper再看视频才能看的比较明白

    μ=1Nk=1Nxkσ2=1Nk=1N(xkμ)2x^i=xiμσ2+ϵyi=γx^i+β egin{aligned} &oldsymbol{mu}=frac{1}{N} sum_{k=1}^{N} oldsymbol{x}_{k}\ &oldsymbol{sigma}^{2}=frac{1}{N} sum_{k=1}^{N}left(oldsymbol{x}_{k}-oldsymbol{mu} ight)^{2}\ &hat{oldsymbol{x}}_{i}=frac{oldsymbol{x}_{i}-oldsymbol{mu}}{sqrt{oldsymbol{sigma}^{2}+oldsymbol{epsilon}}}\ &oldsymbol{y}_{i}=gamma hat{oldsymbol{x}}_{i}+eta end{aligned}

    开始连的时候取20条数据练200轮,需要过拟合:排除大部分code bug ?

    出现train_acc 增长,val_acc不变或者变差的时候:overfitting,增加reg

    (2020.2.8 20:07 我开始了)

    axis看了又忘忘了又看,rua

    BN真就抄公式呗

    sample_mean = np.mean(x, axis=0)
    sample_var = np.var(x, axis=0)
    z = (x - sample_mean) / np.sqrt(sample_var + eps)
    out = gamma * z + beta
    

    至于backward,我选择死亡,找个抄一下吧死亡1, 死亡2

    还要简化版的backward,高数没学好,“现在将这三项加在一块即可得:”

    Lxi=γ(σ2+ϵ)1/2N(NLyiLγx^jLβ)frac{partial L}{partial oldsymbol{x}_{i}}=frac{gammaleft(oldsymbol{sigma}^{2}+epsilon ight)^{-1 / 2}}{N}left(N frac{partial L}{partial oldsymbol{y}_{i}}-frac{partial L}{partial gamma} cdot hat{oldsymbol{x}}_{j}-frac{partial L}{partial eta} ight)

    (2020.2.9 00:28 对8起,我还没睡)

    Batch normalization and initialization这里有确定weight_scale

    weight_scales = np.logspace(-4, 0, num=20)在这段区间里均匀取20个点,然后small_test,后面还有画图的,妙啊

    一次的batch越大,数据越稳定,当然训练acc越高,对于val_acc同理,不过因为验证集最终会趋于稳定,所以过大不会得到明显提升,太大反而会导致训练的很慢,所以,又学到了

    另外课里面讲了各种优化方法,好像上学期课上pre刚好就是讲的这些内容,随便听听吧=- =

    结论就是用Adam,另外当可以full-batch的时候用L-BFGS

    Dropout

    真就抄公式呗

    # train
    mask = (np.random.rand(*x.shape) < p)
    out = x * mask
    
    # test
    out = x
    

    Convolutional Networks

    这篇有卷积运算的详细解释

    然后cnn.py写的就很起劲

    然后卡在了overfit small_data上,我傻了

    wq: 学习率太大了,调之,好了,牛逼

    PyTorch / TensorFlow on CIFAR-10

    if you choose to use that notebook既然如此我就偷懒了,tf以后用到再说

    pytorch 共有三个level的api

    API Flexibility Convenience
    Barebone High Low
    nn.Module High Medium
    nn.Sequential Low High

    似乎平常见到的最多的是 Module level的,舒服,我会了.jpg

    最后一个是CIFAR-10 challeage, model = models.resnet18(pretrained=True)哈哈哈哈哈

  • 相关阅读:
    【转】sql 如何设计数据库表实现完整的RBAC(基于角色权限控制)
    【转】windows自带终止进程的超强命令
    【源码】 gridview 里使用checkbox
    【转】调用 开始 运行 直接执行命令
    【源码】DropDownList绑定数据
    C++ 编译器数据类型差异
    Flash 中将不透明的 Bitmap 透明化处理
    使用命令行切换IP地址
    MKV 高清视频文件分解与封装和音频编码的转换
    Visual Studio 2010 C++ 用户属性设置
  • 原文地址:https://www.cnblogs.com/cww97/p/12349305.html
Copyright © 2011-2022 走看看