`

深度学习之四:使用Theano编写神经网络

阅读更多

上一篇说到windows下面的Theano安装,在前面的文章中也介绍了几种常见的神经网络形式,今天就使用Theano来编写一个简单的神经网络

 

我把Theano形容成一个模子,这个模子提供了一些计算方法,然后我们只需要定义模子的形状和填充数据就可以了,且慢慢看:

 

首先我们定义初始数据集:

np.random.seed(0)
train_X, train_y = datasets.make_moons(300, noise=0.20)
train_X = train_X.astype(np.float32)
train_y = train_y.astype(np.int32)
num_example=len(train_X)

 train_X是随机产生的二维的数,train_y是一个随机产生一维的数(只有0和1这两个值),train_y算是一个标签,train_X和train_y的长度都是300

 

然后设置神经网络的基本参数:

#设置参数
nn_input_dim=2 #输入神经元个数
nn_output_dim=2 #输出神经元个数
nn_hdim=100
#梯度下降参数
epsilon=0.01 #learning rate
reg_lambda=0.01 #正则化长度

 也就是 2*100*2的三层神经网络,学习率是0.01,正则化因子lambda值是0.01

 

接下来是重点,因为在迭代过程中,w1,b1,w2,b2都是共享变量,这就需要使用Theano的share变量

w1=theano.shared(np.random.randn(nn_input_dim,nn_hdim),name="W1")
b1=theano.shared(np.zeros(nn_hdim),name="b1")
w2=theano.shared(np.random.randn(nn_hdim,nn_output_dim),name="W2")
b2=theano.shared(np.zeros(nn_output_dim),name="b2")

 这表明这四个参数在训练过程中是共享的

 

OK,数据的事情已经具备了,我们现在可以来“雕刻模子”了:

#前馈算法
X=T.matrix('X')  #double类型的矩阵
y=T.lvector('y') #int64类型的向量
z1=X.dot(w1)+b1   #1
a1=T.tanh(z1)     #2
z2=a1.dot(w2)+b2  #3
y_hat=T.nnet.softmax(z2) #4
#正则化项
loss_reg=1./num_example * reg_lambda/2 * (T.sum(T.square(w1))+T.sum(T.square(w2))) #5
loss=T.nnet.categorical_crossentropy(y_hat,y).mean()+loss_reg  #6
#预测结果
prediction=T.argmax(y_hat,axis=1) #7

 首先我们定义一个输入矩阵的模子,名字叫X

然后定义一个标签数据的模子,名字叫做y

#1~#4定义的是神经网络的前馈过程

#5是正则项的计算值

#6是计算交叉熵的损失值和正则项损失值的和

 

这些都是我们定义的模子,一旦我们填入数据之后就能算了,那么现在问题来了,这些模子如何和python code联系起来,下面的代码可以解决:

forword_prop=theano.function([X],y_hat)
calculate_loss=theano.function([X,y],loss)
predict=theano.function([X],prediction)

 以forword_prop=theano.function([X],y_hat)为例,我们在模子中计算了y_hat,而y_hat只需要输入数据X,因此我们在python中可以直接使用forward_prop(X)来计算,其他的都同理。

 

接下来,Theano最爽的事情来了,就是求导。不要太简单:

#求导
dw2=T.grad(loss,w2)
db2=T.grad(loss,b2)
dw1=T.grad(loss,w1)
db1=T.grad(loss,b1)

#更新值
gradient_step=theano.function(
    [X,y],
    updates=(
        (w2,w2-epsilon*dw2),
        (b2,b2-epsilon*db2),
        (w1,w1-epsilon*dw1),
        (b1,b1-epsilon*db1)

    )
)

 

 好了现在我们可以建立神经网络模型了:

def build_model(num_passes=20000,print_loss=False):

    w1.set_value(np.random.randn(nn_input_dim, nn_hdim) / np.sqrt(nn_input_dim))
    b1.set_value(np.zeros(nn_hdim))
    w2.set_value(np.random.randn(nn_hdim, nn_output_dim) / np.sqrt(nn_hdim))
    b2.set_value(np.zeros(nn_output_dim))

    for i in xrange(0,num_passes):
        gradient_step(train_X,train_y)
        if print_loss and i%1000==0:
            print "Loss after iteration %i: %f" %(i,calculate_loss(train_X,train_y))

 这段代码就是进行迭代的过程

 

看下结果:



 

正确率还是很高的。

 

 

总结:Theano提供了比较简单而实用的深度学习框架,其模型简单求导简便等很多的优势使得在处理神经网络参数时候特别有用,完整代码见下面链接。

  • 大小: 5.4 KB
2
4
分享到:
评论

相关推荐

    各种编程语言的深度学习库整理大全.docx

    - Keras:Keras是一个高模块化的神经网络库,基于Theano或TensorFlow,允许用户快速构建和实验深度学习模型。 - Pylearn2:基于Theano,提供多种深度学习模型和训练算法,包括随机梯度下降等。 - Lasagne:轻量级...

    A Brief Introduction of Theano and Keras

    Theano 是一个用 Python 编写的库,它允许用户定义、优化并评估涉及多维数组的数学表达式,尤其适用于构建深度学习模型。Theano 的主要特点包括: 1. **紧密集成 NumPy**:Theano 的设计考虑到了与 NumPy 的兼容性...

    热门深度学习工具排行:Pylearn2 居首,Caffe第三1

    Deeplearning4j(DL4J)是一个面向工业和商业应用的分布式深度学习框架,使用Java编写,这意味着它可以在广泛的平台上运行。DL4J的目标是使深度学习技术更易于在企业环境中部署,支持大规模数据处理和分布式计算。 ...

    Theano-0.7.0

    9. 应用场景:Theano常被用于神经网络的构建,尤其是在深度学习领域,例如卷积神经网络(CNN)和递归神经网络(RNN)的实现。 通过Theano-0.7.0版本,开发者可以获得一个经过精心优化的计算环境,适合处理复杂的...

    675988《图解深度学习》-超完整书签1

    《图解深度学习》这本书是针对想要深入了解深度学习的初学者所编写的一本入门指南。作者山下隆义,一位在日本深度学习领域有着丰富研究经验的专家,通过136张图表和60段代码,旨在帮助读者清晰直观地理解和掌握深度...

    神经网络与深度学习python源码PageRank算法

    ### 知识点详解 #### 一、神经网络与深度学习概述 1. **神经网络定义**:神经网络是一种模仿...未来的学习过程中,可以通过实践项目进一步巩固所学知识,比如尝试自己编写神经网络模型或者优化PageRank算法的实现。

    net:Theano 中的神经网络 (ABANDONEDDISCONTINUED) - 请参阅 dagbldr 以获取此代码的延续,其中包含一些新技巧

    标题中的"Net: Theano 中的神经网络"指的是一个基于Theano库构建的神经网络框架。Theano是一个Python库,它允许定义、优化并高效计算数学表达式,尤其适合处理多维数组。这个框架被设计用于构建和训练深度学习模型,...

    3DPoseCNNTheano:使用Python Theano编写的Regression进行3D人体姿势估计

    3DPoseCNNTheano利用了Theano的灵活性和效率,构建了一个卷积神经网络(CNN)模型,该模型通过学习从2D图像到3D姿态的映射关系来执行3D人体姿态估计。 在3DPoseCNNTheano项目中,CNN模型通常包含多个卷积层和池化层...

    带深度学习的字母识别:Keras的深度神经网络模型

    描述“深度学习中的字母识别:Keras的深度神经网络模型”进一步强调了我们将利用Keras这个高级神经网络API,它构建在TensorFlow、Theano或CNTK等后端之上,来构建和训练深度学习模型。Keras因其简洁的接口和易于使用...

    深度学习框架对比

    - **简介**:Keras是一款用Python编写的高级神经网络API,可以与TensorFlow、CNTK或Theano等其他框架无缝集成。 - **特点**:简洁、易学、易于配置,适合快速原型设计。 - **应用场景**:适用于快速实验、原型设计和...

    Keras.NET是一个高级神经网络API,使用带有Python绑定的C#编写,并且能够在TensorFlow,CNTK或Theano之上运行。-.NET开发

    Keras.NET是一个高级神经网络API,使用带有Python绑定的C#编写,并且能够在TensorFlow,CNTK或Theano之上运行。 它的开发着重于实现快速实验。 Keras.NET是一个高级神经网络API,能够使用Python绑定用C#编写,并且...

    python深度学习入门

    Keras是一个高级神经网络API,它构建在TensorFlow、Theano或CNTK等后端之上。Keras的设计理念是用户友好、模块化和快速实验,这使得初学者能够快速搭建和训练深度学习模型。Keras提供了多种预定义的模型结构,如卷积...

    基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类.zip

    Keras是一个高级的神经网络API,它运行在TensorFlow、Theano或CNTK等后端之上,使得深度学习模型的搭建变得简单而直观。以下是对该项目的详细解析: 首先,我们要了解卷积神经网络(CNN)。CNN是深度学习中一种特别...

    深度学习卷积神经网络mnist算法代码-keras

    Keras是一个高级神经网络API,它建立在TensorFlow、Theano或CNTK等后端之上,提供了简洁、高效的接口来构建和训练深度学习模型。在Keras中,CNN模型的构建通常包括以下步骤: 1. **导入必要的库**:首先,我们需要...

    Python深度学习入门:TensorFlow与Keras

    它可以作为TensorFlow、Microsoft Cognitive Toolkit或Theano之上的接口,用于快速实验和部署深度学习模型。 #### 神经网络原理 神经网络由多个层次构成,主要包括输入层、一个或多个隐藏层以及输出层。数据从输入...

    keras快速上手-基于python的深度学习实践-代码

    Keras是一个高级神经网络API,它建立在TensorFlow、Theano和CNTK等后端之上,提供了简洁、直观的接口,使得开发者能够快速进行实验。 首先,我们需要了解深度学习的基本概念。深度学习是机器学习的一个分支,模仿...

    深度学习解决(Kaggle)猫/狗分类问题

    通过使用像Caffe这样的深度学习框架和GPU优化的数学库如Theano,可以构建强大的深度神经网络来识别和分类图像。此外,IPython Notebook提供了便于实验和展示结果的环境,而特征工程的考量则强调了在设计深度学习模型...

    theano依赖,keras安装

    其中,Theano和Keras作为两个重要的开源库,被广泛应用于神经网络模型的构建与训练。本文将详细介绍如何在Python环境中搭建Keras环境,并确保其正确依赖于Theano。 #### 二、准备工作:卸载旧版本 为了确保后续安装...

    GRU神经网络 Python代码

    Keras是一个高级神经网络API,用Python编写,运行在TensorFlow、Theano和CNTK等后端之上。它提供了一个简单易用的接口来构建和训练神经网络模型,包括GRU网络。在Keras中,我们可以轻松地创建一个GRU层,并将其集成...

Global site tag (gtag.js) - Google Analytics