专栏名称: 大数据实验室
宽客俱乐部旗下美国大数据实验室,大数据研究应用。
目录
相关文章推荐
51好读  ›  专栏  ›  大数据实验室

用 Keras 编写你的第一个人工神经网络

大数据实验室  · 公众号  · 大数据  · 2018-05-10 07:30

正文

请到「今天看啥」查看全文


这是一个非常难回答的问题。这是启发式的,我们通过不断地试错找出最好的网络结构、一般来说,你需要足够大的网络去明白结构对于问题是否有用。在这个例子中, 我们使用三层全连接的结构。

全连接层使用 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 个神经元的输出层用于预测类别(糖尿病有无发病)

# create model
model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

3. 编译模型


现在我们定义好模型, 那么就可以编译他了。

编译使用高效的数学库, 封装了 Theano 或者 TensorFlow(称为 backend)。后端(backend)在你的硬件上自动选择最好的方式去表现用于训练和预测的神经网络,比如 CPU、GPU 或者分布式。

编译时, 我们需要额外定义训练网络所需要的参数。记住, 训练网络意味着寻找最优的权重集去预测。

我们需要定义评估权重集的损失函数, 用于寻找不同权重的优化器以及我们希望在训练过程呈现的可选指标。

在这个例子中, 我们使用对数损失函数(logarithmic loss), 对于二分类问题, 其在 Keras 中称为“binary_crossentropy”。我们还将使用梯度下降算法‘adam’, 没有为什么, 它就是一种高效地默认方法。想了解更多这种算法可以查看论文: (Adam: A Method for Stochastic Optimization)[http://arxiv.org/abs/1412.6980]

最后, 以为这是一个分类问题, 所以我们会收集和汇报分类的准确率作为度量指标。

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

4. 训练模型


我们已经定义和编译了模型, 他是为高效地计算而准备的。

现在是时候在数据上训练模型了。

我们可以在加载的数据上训练和拟合模型,通过 fit() 函数。

训练过程会在数据集迭代一定的次数,成为 epochs, 这个可以通过 nb_epoch 参数来设定。我们也可以设定 batch_size 参数来指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降, 使目标函数优化一步。在这个例子中, 我们将迭代150次、批处理大小为10。再说一次, 这些参数可以通过试错来选择。

# Fit the model






请到「今天看啥」查看全文