• 深度神经网络编程细节


    0. 参数的指定

    • learning_rate:η=0.01
    • λ22:0.0001
      • λ11:0.00(这种其实仅要求的是 2 约束)
    • n_epochs(迭代的次数):1000
    • batch_size = 20
    • n_hidden = 500(n_in = 28*28=784)

    1. 面向对象类设计

    LogisticRegression(基于 softmax 的输出)

    class LogisticRegression(object):
        def __init__(self, inpt, n_in, n_out):

    对于神经网络的一个隐层(HiddenLayer)而言,如果需将其封装为一个类的话,需要在构造函数中传递进哪些参数。

    • 连接层间的权值矩阵(当然也有 bias vector)必不可少,W,b
      • 权值矩阵(bias vector)的初始化方式,需要这也需要有一个随机数生成器(rng);
        • 当然针对不同的激励函数,也存在不同的启发式的权值矩阵的初始化方式;
      • 初始化矩阵显然最直接需要的就是,矩阵的 size,因此也需要传递 n_in, n_out 的大小,n_out 也对应着 b 的规模;
    • 激励函数的种类(activation function)
    class HiddenLayer(object):
        def __init__(self, rng, inpt, n_in, n_out, W=None, b=None, activation=T.tanh):

    有了 LogisticRegression(作为输出层)以及隐层的定义,我们便可以来定义 MLP 了,

    class MLP(object):
        # 只有两层的网络
        def __init__(self, rng, inpt, n_in, n_hidden, n_out):
            self.HiddenLayer(rng=rng, inpt=inpt, n_in=n_in, n_out=n_hidden, activation=T.tang)
            self.logRegressLayer(rng=rng, inpt=self.HiddenLayer.output, n_in=n_hidden, n_out=n_out)

    2. Teano 下的 L1/L2 正则

    比如对于一个双层的神经网络而言(自然也就存在两个权值矩阵)

    self.L1 = abs(self.W1).sum() + abs(self.W2).sum()
    self.L2_sqr = (self.W1**2).sum() + (self.W2**2).sum()

    3. MLP 模型的训练

    index = T.lscalar()         # 指定 minibatch 的 index
    X = T.matrix('X')
    y = T.ivector('y')
    cost = clf.nll(y) + l1_reg*clf.L1 + l2_reg*clf.L2_sqr
    test_model = theano.function(
        inputs=[index],
        output=clf.errors(y),
        givens={
            X: testset_x[index*batch_size:(index+1)*batch_size],
            y: testset_y[index*batch_size:(index+1)*batch_size]
        }
    )
    valid_mode = theano.function(
        inputs=[index],
        output=clf.errors(y),
        givens={
            X: validset_x[index*batch_size:(index+1)*batch_size],
            y: validset_y[index*batch_size:(index+1)*batch_size]
        }
    )
    
    gparams = [T.grad(cost=cost, wrt=para) for para in clf.params]
    updates = [param-learning_rate*g_param for param, g_param in zip(clf.params, params)]
    
    train_model = theano.function(
        inputs=[index],
        output=cost,
        updates=updates,
        givens={
            X: trainset_x[index*batch_size:(index+1)*batch_size],
            y: trainset_y[index*batch_size:(index+1)*batch_size]
        }
    )
  • 相关阅读:
    quartz TRIGGER_STATE变为ERROR解决方法
    云原生爱好者周刊:KubeKey v2.1.0 alpha 版发布!
    Fluent Operator:云原生日志管理的一把瑞士军刀
    k8s 安全策略最佳实践
    在 KubeSphere 中监控集群外部 Etcd
    云原生爱好者周刊:寻找 Netlify 开源替代品
    报名开启|QKE 容器引擎托管版暨容器生态发布会!
    KubeSphere 社区征稿说明
    使用 KubeEye 为你的 K8s 集群安全保驾护航
    批处理清理vc++共工程
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9422998.html
Copyright © 2020-2023  润新知