Keras实现全连接神经网络(python)

全连接神经网络(DNN)学习了全连接神经网络的原理,然后再使用Keras来实现全连接神经网络,每一步都清晰描述。

Kears的安装过程参考:Tensorflow和Keras版本对照及环境安装

Keras中文文档请参考:Keras中文文档

这里使用Keras来实现神经网络,可能会说怎么不用tensorflow呢?

其实tensorflow没有那么好用。tensorflow跟另外一个相近的工具theano,它们非常flexible。它完全可以做deep learning以外的事情。学起来是有一些难度的。而Keras是可以在数十分钟内就精通,就可以非常熟悉它,就可以用来实现一个自己的DNN了。

一、Keras介绍

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你在以下情况下需要深度学习库,请使用 Keras:

  • 允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
  • 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  • 在 CPU 和 GPU 上无缝运行。

Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用 Keras 函数式 API,它允许构建任意的神经网络图。

二、Keras实现神经网络

Deep learning就是三步。
在这里插入图片描述

第一步就是决定你的function set,即决定你的神经网络长什么样子。

Keras里就是先宣告一个model:

model = Sequential()

接下来你就自己决定你的model长什么样子,举例来说我们想要叠一个network,它有两个隐藏层,每一个隐藏层都有500个神经元。要做这件事情,怎么做呢?

做法是在model里面用add()函数加一个全连接网络,全连接网络就是用Dense()来表示。

imput_dim = 28*28,表示输入的是一个28*28的image,我们把它拉直为28*28维的向量。

units=500就是说输出是500个神经元。

activation是说你的激活函数是什么。这里用的relu,当然也可以选别的。
在这里插入图片描述
如果,再加一个Layer,怎么办呢?同样是add()函数加一个Dense()。这里就不需要给它参数input_dim,因为下一层的输入就等于前一层的输出,Keras自己知道。
在这里插入图片描述
最后,要做10分类。所以units就设10。激活函数通常选softmax。
在这里插入图片描述
第二步,我们要评价一个function的好坏。

那怎么做呢?要用model.compile()函数。然后定义你的loss是什么。比如要用交叉熵损失,就写loss = ‘categorical crossentropy’。

也支持其他的损失函数,在不同的场合可能用到不同的损失函数,可以去查文档。

在这里插入图片描述
第三步,是training的部分:

在训练之前,你要下一些configuration,告诉它你训练的时候你打算要怎么做。

要下的第一个东西是optimizer,也就是你要找最好的function的时候,你要用什么样的方式来找最好的function。可以支持各种不同的方法。其实所有的optimizer都是基于gradient descent,不同的方法会帮你决定不同的learning rate。
在这里插入图片描述
然后使用model.fit()。当调用这一行的时候,Keras就会train你的network。

在这里插入图片描述
x_train是一个numpy array。在这个task里面,要把image 存到numpy array里面。存法是这样的:numpy array是2维的,第一个维度代表有多少张图片,有几个training examples,第二个维度要看有多少个像素(这里有28*28 = 784个像素,所以第二维有784个元素)。因此第一个数组是training examples * 784的二维数组。

y_train也是一个numpy array。同样,第一个维度表示有几个training examples.第二个维度就是10。举例来说,第一张图片是5,所以在他的y_train里面,对应到5的哪一维是1,其他的是0。因此,第二个数组是training examples * 10的数组。

在这里插入图片描述
batch_size为100,表示随机挑选100张图片作为一个batch。每个batch更新一次参数。假设有1万ge training examples,则有10000/100 = 100个batch。

epochs = 20表示一

  • 14
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值