机器学习博士笔记分享|Keras中几个重要函数用法

Keras的核心数据结构是“模型”,模型是一种组织网络层的方式。Keras中主要的模型是Sequential模型,Sequential是一系列网络层按顺序构成的栈。你也可以查看泛型模型来学习建立更复杂的模型。

Keras中几个重要函数用法

模块需导入包:

  1. from keras.models import Sequential  

  2. from keras.layers import Dense, Dropout, Activation, Flatten  

  3. from keras.layers.convolutional import Conv2D  

  4. from keras.layers.pooling import MaxPooling2D  

  5. from keras.layers import Embedding, LSTM  

  6. from keras.utils import np_utils  

  7. from keras.datasets import mnist

激活函数有如下几种类型可选:

softmax、elu、softplus、softsign、relu、tanh、sigmoid、hard_sigmoid、linear

Dense(全连接层)

Dense层(https://keras-cn.readthedocs.io/en/latest/layers/core_layer/)

  1. keras.layers.core.Dense ( units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None  )  

units:大于0的整数,代表该层的输出维度。 activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x) usebias: 布尔值,是否使用偏置项 kernelinitializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

Keras模型保存

我们不推荐使用pickle或cPickle来保存Keras模型。

你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含:

  • 模型的结构,以便重构该模型

  • 模型的权重

  • 训练配置(损失函数,优化器等)

  • 优化器的状态,以便于从上次训练中断的地方开始

使用keras.models.load_model(filepath)来重新实例化你的模型,如果文件中存储了训练配置的话,该函数还会同时完成模型的编译

例子:

  1. from keras.models import load_model

  2. model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'

  3. del model  # deletes the existing model

  4. # returns a compiled model

  5. # identical to the previous one

  6. model = load_model('my_model.h5')

如果你只是希望保存模型的结构,而不包含其权重或配置信息,可以使用:

  1. # save as JSON

  2. json_string = model.to_json()

  3. # save as YAML

  4. yaml_string = model.to_yaml()

这项操作将把模型序列化为json或yaml文件,这些文件对人而言也是友好的,如果需要的话你甚至可以手动打开这些文件并进行编辑。

当然,你也可以从保存好的json文件或yaml文件中载入模型:

  1. # model reconstruction from JSON:

  2. from keras.models import model_from_json

  3. model = model_from_json(json_string)

  4. # model reconstruction from YAML

  5. model = model_from_yaml(yaml_string)

如果需要保存模型的权重,可通过下面的代码利用HDF5进行保存。注意,在使用前需要确保你已安装了HDF5和其Python库h5py

  1. model.save_weights('my_model_weights.h5')

  2. 如果你需要在代码中初始化一个完全相同的模型,请使用:

  3. model.load_weights('my_model_weights.h5')

如果你需要加载权重到不同的网络结构(有些层一样)中,例如fine-tune或transfer-learning,你可以通过层名字来加载模型:

  1. model.load_weights('my_model_weights.h5', by_name=True)

例如:

  1. """

  2. 假如原模型为:

  3.    model = Sequential()

  4.    model.add(Dense(2, input_dim=3, name="dense_1"))

  5.    model.add(Dense(3, name="dense_2"))

  6.    ...

  7.    model.save_weights(fname)

  8. """

  9. # new model

  10. model = Sequential()

  11. model.add(Dense(2, input_dim=3, name="dense_1"))  # will be loaded

  12. model.add(Dense(10, name="new_dense"))  # will not be loaded

  13. # load weights from first model; will only affect the first layer, dense_1.

  14. model.load_weights(fname, by_name=True)

可视化

使用方式

keras.utils.vis_utils模块提供了画出Keras模型的函数(利用graphviz)

该函数将画出模型结构图,并保存成图片:

  1. from keras.utils import plot_model

  2. plot_model(model, to_file='model.png')

具体可参考:可视化visualization(https://keras-cn.readthedocs.io/en/latest/other/visualization/)

解决办法

  • 首先,安装pip安装pygot和graphviz之后,运行上面的可视化代码仍然报错

  • 查询说是Windows下面只能采用安装包的方式进行安装,不能pip安装.....

最终,费了很大的周折之后,终于找到解决办法:

  • 首先,安装graphviz(官方下载网址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html),然后在环境变量里面配置其路径(好像也没有什么用)

  • 然后在代码里面设置如下:

  1. import os

  2. os.environ["PATH"] += os.pathsep + 'D:/install/Program Files (x86)/Graphviz2.38/bin/'

  3. plot_model(model, to_file='model.png', show_shapes=True, show_layer_names=True)

OK,终于成功了。期间还涉及到说按照graphviz->grapphviz软件本身->pydot的顺序按照软件什么的,但是问题并没有解决,还是得在程序中引入地址。

参考文献

  • Keras中文文档:https://keras-cn.readthedocs.io/en/latest/for_beginners/concepts/

作者介绍:邵洲,在读博士。研究兴趣:数据挖掘、学者迁徙研究。

(0)

相关推荐