Theano Multi Layer Perceptron 多层感知机

理论

机器学习技法:https://www.coursera.org/course/ntumltwo

假设上述网址不可用的话,自行度娘找别人做好的种子。或者看这篇讲义也能够:http://www.cnblogs.com/xbf9xbf/p/4712785.html

Theano代码

须要使用我上一篇博客关于逻辑回归的代码:http://blog.csdn.net/yangnanhai93/article/details/50410026

保存成ls_sgd.py 文件,置于同一个文件夹下就可以。

#!/usr/bin/env python
# -*- encoding:utf-8 -*-
‘‘‘
This is done by Vincent.Y
mainly modified from deep learning tutorial
‘‘‘
import os
import sys
import timeit
import numpy as np
import theano
import theano.tensor as T
from theano import function
from lr_sgd import LogisticRegression ,load_data,plot_decision_boundary
import matplotlib.pyplot as plt
class HiddenLayer():
    def __init__(self,rng,X,n_in,n_out,W=None,b=None,activation=T.tanh):
        self.X=X
        if W is None:
            W_value=np.asarray(
                rng.uniform(
                    low=-np.sqrt(6.0/(n_in+n_out)),
                    high=np.sqrt(6.0/(n_in+n_out)),
                    size=(n_in,n_out)
                ),
                dtype=theano.config.floatX
            )
            if activation== theano.tensor.nnet.sigmoid:
                W_value*=4

            W=theano.shared(value=W_value,name=‘W‘,borrow=True)
        if b is None:
            b_value=np.zeros((n_out,),dtype=theano.config.floatX)
            b=theano.shared(value=b_value,name=‘b‘,borrow=True)

        self.W=W
        self.b=b

        lin_output=T.dot(X,self.W)+self.b
        self.output=(lin_output if activation is None else activation(lin_output))
        self.params=[self.W,self.b]

class MLP():

    def __init__(self,rng,X,n_in,n_hidden,n_out):
        self.hiddenLayer=HiddenLayer(
            rng=rng,
            X=X,
            n_in=n_in,
            n_out=n_hidden,
            activation=T.tanh
        )

        self.logisticRegressionLayer=LogisticRegression(
            X=self.hiddenLayer.output,
            n_in=n_hidden,
            n_out=n_out
        )
        self.L1=(abs(self.hiddenLayer.W).sum()+abs(self.logisticRegressionLayer.W).sum())
        self.L2=((self.hiddenLayer.W**2).sum()+(self.logisticRegressionLayer.W**2).sum())
        self.negative_log_likelihood=self.logisticRegressionLayer.negative_log_likelihood
        self.errors=self.logisticRegressionLayer.errors #this is a function
        self.params=self.logisticRegressionLayer.params+self.hiddenLayer.params
        self.X=X
        self.y_pred=self.logisticRegressionLayer.y_pred

def test_mlp(learning_rate=0.11,L1_reg=0.00,L2_reg=0.0001,n_epochs=6000,n_hidden=10):
    datasets=load_data()
    train_set_x,train_set_y=datasets[0]
    test_set_x,test_set_y=datasets[1]
    x=T.matrix(‘x‘)
    y=T.lvector(‘y‘)
    rng=np.random.RandomState(218)

    classifier=MLP(
        rng=rng,
        X=x,
        n_in=2,
        n_out=2,
        n_hidden=n_hidden
    )

    cost=(classifier.negative_log_likelihood(y)+L1_reg*classifier.L1+L2_reg*classifier.L2)

    test_model=function(
        inputs=[x,y],
        outputs=classifier.errors(y)
    )

    gparams=[T.grad(cost,param) for param in classifier.params]

    updates=[
        (param,param-learning_rate*gparam)
        for param,gparam in zip(classifier.params,gparams)
    ]

    train_model=function(
        inputs=[x,y],
        outputs=cost,
        updates=updates
    )
    epoch=0
    while epoch < n_epochs:
        epoch=epoch+1
        avg_cost=train_model(train_set_x,train_set_y)
        test_cost=test_model(test_set_x,test_set_y)
        print "epoch is %d,train error %f, test error %f"%(epoch,avg_cost,test_cost)
    predict_model=function(
        inputs=[x],
        outputs=classifier.logisticRegressionLayer.y_pred
    )
    plot_decision_boundary(lambda x:predict_model(x),train_set_x,train_set_y)

if __name__=="__main__":
    test_mlp()

效果

迭代600次,隐层数量为2

迭代6000次。隐层数量为20

当隐层数量非常少。如2或者1的时候。添加迭代次数,分类超平面依然是一条直线;当隐层数量多,迭代次数过少的时候分类超平面也是一条直线。所以在训练的过程中。总是要依据训练的结果来调整隐层节点的数量以及迭代次数来获取最好的效果,当中迭代次数可用early stopping来控制。

时间: 2024-10-09 09:34:22

Theano Multi Layer Perceptron 多层感知机的相关文章

基于theano的多层感知机的实现

1.引言 一个多层感知机(Multi-Layer Perceptron,MLP)可以看做是,在逻辑回归分类器的中间加了非线性转换的隐层,这种转换把数据映射到一个线性可分的空间.一个单隐层的MLP就可以达到全局最优. 2.模型 一个单隐层的MLP可以表示如下: 一个隐层的MLP是一个函数:$f:R^{D}\rightarrow R^{L}$,其中 $D$ 是输入向量 $x$ 的大小,$L$是输出向量 $f(x)$ 的大小: $f(x)=G(b^{(2)}+W^{(2)}(s(b^{(1)}+W^{

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43221829 本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参考本文第一部分的算法简介. 经详细注释的代码:放在我的gith

动手学习pytorch——(3)多层感知机

多层感知机(multi perceptron,MLP).对于普通的含隐藏层的感知机,由于其全连接层只是对数据做了仿射变换,而多个仿射变换的叠加仍然是一个仿射变换,即使添加更多的隐藏层,这种设计也只能与仅含输出层的单层神经网络等价.解决问题的一个方法是引入非线性变换,对隐藏变量使用非线性变化,然后作为下一个全连接层的输入,这个非线性函数被称为激活函数. 激活函数主要有ReLu.Sigmoid.tanh.其中ReLu计算简单,且不像其他两个哪个容易造成梯度消失,使用较多. 多层感知机pytorch实

多层感知机

多层感知机 多层感知机的基本知识 使用多层感知机图像分类的从零开始的实现 使用pytorch的简洁实现 多层感知机的基本知识 深度学习主要关注多层模型.在这里,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念. 隐藏层 下图展示了一个多层感知机的神经网络图,它含有一个隐藏层,该层中有5个隐藏单元. 表达公式 具体来说,给定一个小批量样本\(\boldsymbol{X} \in \mathbb{R}^{n \times d}\),其批量大小为\(

多层感知机——2020.2.15

一.隐藏层 ????多层感知机在单层神经?络的基础上引?了?到多个隐藏层(hidden layer).隐藏层位于输?层和输出层之间.下图展示了?个多层感知机的神经?络图,它含有?个隐藏层,该层中有5个隐藏单元. ????上图所示的多层感知机中,输?和输出个数分别为4和3,中间的隐藏层中包含了5个隐藏单元(hidden unit).由于输?层不涉及计算,因此上图的多层感知机的层数为2.由上图可?,隐藏层中的神经元和输?层中各个输?完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接.因此,多

经典网络复现(0)多层感知机和lenet

对于mnist数据集,我实现了一些简单的网络,同样在20epochs训练获得的loss和acc 序号 网络结构 loss和acc 2 model = Sequential() model.add(Dense(units = 121,input_dim = 28 * 28)) model.add(Activation('relu')) model.add(Dense(units = 81)) model.add(Activation('relu')) model.add(Dense(units =

多层感知机,非权值共享型卷积神经网络,权值共享型卷积神经网络之间的关系

前言:最近学习深度学习,有感写一点总结. 我们常常所说的神经网络,一般是指原始的多层感知机,简称MLP,它是在原始感知机堆叠多层而成的,MLP完全由全连接层组成(当然也有激活函数),即Caffe里的IP层.MLP的最大的缺点在于参数众多,比如说我们的网络层为1000--1000--500--20,那么它的总的参数为:1000*1000+1000*500+500*20. 参数过多不好训练,容易产生过拟合现象. 卷积神经网络,即CNN,它大大减少的网络参数的数目,通过1. 权值共享 2. 局部连接

记一下机器学习笔记 多层感知机的反向传播算法

<神经网络与机器学习>第4章前半段笔记以及其他地方看到的东西的混杂-第2.3章的内容比较古老预算先跳过. 不得不说幸亏反向传播的部分是<神机>里边人话比较多的部分,看的时候没有消化不良. 多层感知机 书里前三章的模型的局限都很明显,对于非线性可分问题苦手,甚至简单的异或都弄不了.于是多层感知机(也就是传说中的神经网络)就被发明了出来对付这个问题. 多层感知机就是由一系列的感知机,或者说神经元组成,每个神经元都接受若干的输入(树突)并产生一个输出(轴突). 这些神经元被分成若干层,每

学习笔记TF026:多层感知机

隐含层,指除输入.输出层外,的中间层.输入.输出层对外可见.隐含层对外不可见.理论上,只要隐含层节点足够多,只有一个隐含层,神经网络可以拟合任意函数.隐含层越多,越容易拟合复杂函数.拟合复杂函数,所需隐含节点数,随隐含层数量增多指数下降. 过拟合,模型预测准确率在训练集上升,在测试集下降.泛化性不好,模型记忆当前数据特征,不具备推广能力.参数太多.Hinton教授团队,Dropout.随便丢弃部分输出数据节点.创造新随机样本,增大样本量,减少特征数量,防止过拟合.bagging方法,对特征新种采