译者:Jinkey(微信公众号 jinkey-love)
英文原版地址:点击跳转
教程概述
这里不需要编写太多的代码,不过我们将一步步慢慢地告诉你怎么以后怎么创建自己的模型。
教程将会涵盖以下步骤:
加载数据
定义模型
编译模型
训练模型
评估模型
结合所有步骤在一起
这个教程的前置条件:
有 python 2 或 3 的环境和编程基础
安装并配置好 Scipy 库(包括 Numpy )
你安装好 Keras 并且有一个后端(Theano or TensorFlow)
创建一个新的文件,命名为 keras_first_network.py ,然后将教程的代码一步步复制进去。
1. 加载数据
每当我们使用机器学习算法使用随机过程(如随机数),先设置随机数种子是一个好的习惯。
这样您就可以运行相同的代码一次又一次,得到相同的结果。如果你需要证明结果,使用随机数据比较算法或调试代码,这是很有用的。
你可以初始化随机数发生器及其种子,例如:
from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
现在我们可以加载我们的数据了。
在这个教程中,我们将使用皮马印第安人糖尿病数据集.这是UCI 机器学习数据库一个标准的机器学习数据集。它描述了病人医疗记录和他们是否在五年内发病。
因此,它是一个二分类问题(出现糖尿病为1, 否则为 0)。
所有描述病人的输入变量都是数值。这便于直接用于需要数值输入输出的神经网络, 适合我们第一个 Keras 神经网络。
下载数据集并且重命名为 pima-indians-diabetes.csv 放入 python 脚本所在的目录的 data/pima-indians-diabetes.csv。
你可以只直接使用 Numpy 库的 loadtxt() 方法加载数据,一共 8 个输出变量和 1 个输出变量(最后一列)。加载之后我们就可以把数据分离为 X(输出变量)和 Y(输出分类)
# load pima indians dataset
dataset = numpy.loadtxt("data/pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:, 0:8]
Y = dataset[:, 8]
我们已经初始化了我们对的随机数生成器来确保结果可复现, 也加载了数据。我们现在可以准备定义我们的神经网络模型了。
2. 定义模型
Keras 中的模型被定义为一系列的层。
我们实例化一个 Sequential 模型对象,每次添加一层知道我们对网络的拓扑结构满意。
第一件事情我们需要确保的是输出神经元的数量。这可以在模型创建的时候设置参数 input_dim 来定义,我们将这个参数设置为 8 对应 8 个输出变量。
我们怎么知道层的数量和他们的类型呢?
这是一个非常难回答的问题。这是启发式的,我们通过不断地试错找出最好的网络结构、一般来说,你需要足够大的网络去明白结构对于问题是否有用。
在这个例子中, 我们使用三层全连接的结构。
全连接层使用 Dense 定义。我们可以通过第一个参数定义层的神经元数量,第二个参数 init 定义权重的初始化方法, activation 参数定义激活函数。
在这个例子中, 我们把权重初始化成一个服从均匀分布的小随机数(init='uniform'),在0到0.05直接(这是 Keras 标准均匀分布权重初始值)。另一种传统的选择是‘normal’,会从高斯分布(正态分布)中产生一个小的随机数。
我们在前两层使用 (relu)[https://en.wikipedia.org/wiki/Rectifier_(neural_networks)] 激活函数, 在输出层使用 Sigmoid 函数。曾经 Sigmoid 和 tanh 激活函数是所有的层首选的。但时至今日, 使用 relu 激活函数可以达到更好的性能。我们在输出层使用 Sigmoid 函数来确保网络输出在 0 和 1 之间,
我们可以添加每一层将这些东西放到一起。第一层有 12 个神经元、8个输出变量。第二层有 8 个神经元和最后 1 个神经元的输出层用于预测类