神经网络学习笔记(3):Keras

Keras 中的其他**函数:

model.add(Activation('sigmoid'))

model.add(Activation('softmax'))

model.add(Activation('relu'))

model.add(Activation('tanh'))

 

梯度下降->随机梯度下降:

如果每次都用所有的数据下降一个步长,很费内存

如果数据分布合理,每次使用一部分数据就可以告诉我们梯度

在 Keras 中很容易实现随机梯度下降。我们只需按以下命令在训练流程中指定批次大小,这里,我们将数据分成 100 批。

model.fit(X_train, y_train, epochs=1000, batch_size=100, verbose=0)

 

学习速率:

学习速率大,step大

学习速率小,step小

经验:如果模型不行,降低学习速率

 

解决局部最低点:

使用动量,动量是在0到1之间的常量β,使很久之前的步长比近期发生的步长作用要小

神经网络学习笔记(3):Keras

 

一些误差函数:

Everest

Kikimanjerror

Reinerror

Ves-oops-vius

Eyjafvillajokull

 

评价模型:

准确率、精度、召回率

ROC曲线、受试者工作特性曲线

神经网络学习笔记(3):Keras

ROC曲线下的面积越接近1,模型越好

 

用 Keras 构建神经网络:

 

序列模型:

from keras.models import Sequential

#Create the Sequential model

model = Sequential()

keras.models.Sequential 类是神经网络模型的封装容器。它会提供常见的函数,例如 fit()、evaluate() 和 compile()。我们将介绍这些函数(在碰到这些函数的时候)。我们开始研究模型的层吧。

 

层:

Keras 层就像神经网络层。有全连接层、最大池化层和**层。你可以使用模型的 add() 函数添加层。例如,简单的模型可以如下所示:

from keras.models import Sequential

from keras.layers.core import Dense, Activation, Flatten

#创建序列模型

model = Sequential()

 

#第一层 - 添加有128个节点的全连接层以及32个节点的输入层。

model.add(Dense(128, input_dim=32))

第一层将维度设为 32(表示数据来自 32 维空间)。

 

#第二层 - 添加 softmax **层。

model.add(Activation('softmax'))

第二层级获取第一层级的输出,并将输出维度设为 128 个节点。这种将输出传递给下一层级的链继续下去,直到最后一个层级(即模型的输出)。可以看出输出维度是 10。

 

#第三层 - 添加全连接层。

model.add(Dense(10))

 

#第四层 - 添加 Sigmoid **层

model.add(Activation('sigmoid'))

 

Keras 将根据第一层自动推断后续所有层的形状。这意味着,你只需为第一层设置输入维度。

 

构建好模型后,我们就可以用以下命令对其进行编译。我们将损失函数指定为我们一直处理的 categorical_crossentropy(交叉熵)。我们还可以指定优化程序,稍后我们将了解这一概念,暂时将使用 adam。最后,我们可以指定评估模型用到的指标。我们将使用准确率。

model.compile(loss="categorical_crossentropy",optimizer="adam", metrics = ['accuracy'])

我们可以使用以下命令来查看模型架构:

model.summary()

然后使用以下命令对其进行拟合,指定 epoch 次数和我们希望在屏幕上显示的信息详细程度。

然后使用fit命令训练模型并通过 epoch 参数来指定训练轮数(周期),每 epoch 完成对整数据集的一次遍历。 verbose 参数可以指定显示训练过程信息类型,这里定义为 0 表示不显示信息。

model.fit(X, y, nb_epoch=1000, verbose=0)

注意:在 Keras 1 中,nb_epoch 会设置 epoch 次数,但是在 Keras 2 中,变成了 epochs。

最后,我们可以使用以下命令来评估模型:

model.evaluate()