神经网络学习笔记(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之间的常量β,使很久之前的步长比近期发生的步长作用要小
一些误差函数:
Everest
Kikimanjerror
Reinerror
Ves-oops-vius
Eyjafvillajokull
评价模型:
准确率、精度、召回率
ROC曲线、受试者工作特性曲线
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()