`

深度学习之四:使用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
分享到:
评论

相关推荐

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

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

    Keras:基于Python的深度学习库.pdf

    keras中文文档,Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化.

    深度学习Python库. 卷积网络,递归神经网络。运行Theano或TensorFlow之上-python

    Keras:人类深度学习 Keras 是一个用 Python 编写的深度学习 API,运行在机器学习平台 TensorFlow 之上。 阅读 Keras.io 上的文档。 多后端 Keras 和 tf.keras 多后端 Keras 已停产。 此时,我们建议使用多后端 ...

    Repo-2017:使用Keras和Theano进行机器学习,NLP,深度学习和强化学习中的Python代码

    NLP,深度学习,强化学习和人工智能中的代码 欢迎来到我的GitHub存储库。 我是一名数据科学家,并且用R,Python和Wolfram Mathematica编写代码。 在这里,您将找到我开发的一些机器学习,深度学习,自然语言处理和...

    keras入门手册

    Keras是一个高层神经网络库,Keras由纯Python编写而成并基Tensorflow或Theano。Keras 为支持快 速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计(keras具有高度...

    SnakeGame:使用神经网络训练蛇玩蛇游戏

    Keras:TensorFlow和Theano的深度学习库 Keras是用Python编写的高级神经网络库,能够在或。 它的开发着重于实现快速实验。 能够以最小的延迟将想法付诸实践是进行良好研究的关键。 如果您需要一个深度学习库,请...

    Python深度学习(Keras )_keras_keras库_神经网络keras_python_

    Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。

    GrouPy:群等变卷积神经网络

    我们主要使用Chainer实现(请参阅),但是可以使用经过单元测试的tensorflow实现,并且编写了代码,因此相对容易地移植到theano,torch或其他框架。 代码的大多数复杂性都在预计算步骤中,该步骤会生成用于转换过滤...

    keras-applications-master.zip

    Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。使用文档在这:http://keras.io/,中文文档在这:...

    源码deepbeliefnetworksjava-Deep-Learning:深度学习

    中编写深度学习算法变得容易。 在 Theano 之上构建了更多的库。 是一个极简主义、高度模块化的神经网络库,本着 Torch 的精神,用 Python 编写,它在底层使用 Theano 来优化 GPU 和 CPU 上的张量操作。 是一个包含...

    deep-learning-multipliers:用低精度乘法训练深度神经网络

    编写该代码是为了使任何人都可以轻松重现文章“使用低精度乘法器进行深度学习”的结果,该文章可从。 有问题的文章评估了是否有可能用低精度乘法器训练深度神经网络。 请注意,此代码仅模拟低精度乘法器的影响。 它...

    如何用Keras搭建深度学习模型

    但是在常用的TensorFlow,CNTK,Theano等计算环境中实现不同的深度学习模型仍然需要耗费很多时间来编写程序。KERAS的出现提供了一个高度抽象的环境来搭建深度学习模型,特别是其简单易用,跟网络结构一一对应的特点...

    ANN人工神经网络之Keras项目实战-视频教程网盘链接提取码下载 .txt

    掀起Keras的盖头来。虽然之前很多深度学习的课程种都有...Keras是由纯python编写的基于theano/tensorflow的深度学习框架。 Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果。 视频大小:4.6G

    深度学习:Keras入门(一)之基础篇

    1)简介Keras是由纯python编写的基于theano/tensorflow的深度学习框架。Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果,如果有如下需求,可以优先选择Keras:a)简易和快速的原型设计...

    ANN人工神经网络之Keras项目实战

    虽然之前很多深度学习的课程种都有提到过Keras,但是Keras作为单独的一个项目进行全面的高阶教学,应该还是第一次。Keras是由纯python编写的基于theano/tensorflow的深度学习框架。

    回调函数Callbacks - Keras中文文档.zip

    Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计...

    Keras中文手册

    Keras是一个高层神经网络库,Keras由纯Python编写而成并基Tensorflow或Theano。Keras 为支持快 速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计(keras具有高度...

Global site tag (gtag.js) - Google Analytics