0%

Python | Keras

keras

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。

安装

  • 使用PyPI安装
1
2
## Anaconda Prompt
pip install keras
  • 使用GitHub源码安装
1
2
3
git clone https://github.com/keras-team/keras.git
cd keras
python setup.py install

后端

  • Keras不处理如张量乘积、卷积等低级操作
  • 依赖于一个专门的、优化的张量操作库来完成这个操作,它可以作为 Keras 的「后端引擎」
  • Keras 有三个后端实现可用:
  • TensorFlow 后端
  • Theano 后端
  • CNTK 后端

配置见:Keras后端配置

Sequential顺序模型

  • 由多个网络层线性堆叠
1
2
3
from keras.models import Sequential

model = Sequential()

堆叠

可以使用.add()来堆叠模型:

1
2
3
4
5
from keras.models import Sequential
from keras.layers import Dense

model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))

模型需要知道它所期望的输入的尺寸——因此,模型的第一层[1]需要接收关于其输入尺寸的信息。

输入尺寸的方法:

  • 传递input_shape参数给第一层
  • input_shape是一个表示尺寸的元组[2]
  • input_shape中不包含数据的batch大小
  • 某些2D层(如Dense)支持通过参数input_dim指定输入尺寸;某些3D时序层支持input_diminput_length参数
  • 如果需要为输入指定一个固定的batch大小,可以传递参数batch_size给一个层

如:同时将batch_size=32input_shape=(6,8)传递给一个层,则每一批输入的尺寸为(32, 6, 8)

1
2
3
4
5
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
## 等价于
model = Sequential()
model.add(Dense(32, input_dim=784))

编译

构建模型之后,可以使用.compile()来配置学习过程。

  • 优化器optimizer:可以是现有优化器的字符串标识符,也可以是Optimizer类的实例。
  • 现有优化器的字符串标识符:rmspropadagrad
  • Optimizer类的实例:SGDRMSpropAdamAdadeltaAdagradAdamaxNadamFtrl
  • 损失函数loss:模型试图最小化的目标函数;可以是现有损失函数的字符串标识符,也可以是一个目标函数。
  • 现有损失函数的字符串标识符:categorical_crossentropymse
  • 目标函数:见losses
  • 评估标准metrics:可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。
  • metrics=['accuracy']
1
2
3
4
5
6
7
8
9
10
11
12
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
## 自定义评估标准函数
import keras.backend as K ## 加载后端

def mean_pred(y_true, y_pred):
return K.mean(y_pred)

model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
  • 多分类问题
1
2
3
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
  • 二分类问题
1
2
3
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
  • 回归问题
1
2
model.compile(optimizer='rmsprop',
loss='mse')

训练

然后在训练集数据上进行迭代(训练):

1
model.fit(x_train, y_train, epochs=5, batch_size=32)

评估模型性能:

1
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

进行预测

1
pred_classes = model.predict(x_test, batch_size=128)

utils

to_categorical()

进行One-Hot Encoding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from keras.utils import to_categorical
data = [1, 3, 2, 0, 3, 2, 2, 1, 0, 1]
tc = to_categorical(data)
tc
#array([[0., 1., 0., 0.],
# [0., 0., 0., 1.],
# [0., 0., 1., 0.],
# [1., 0., 0., 0.],
# [0., 0., 0., 1.],
# [0., 0., 1., 0.],
# [0., 0., 1., 0.],
# [0., 1., 0., 0.],
# [1., 0., 0., 0.],
# [0., 1., 0., 0.]], dtype=float32)

共有{0,1,2,3}四个类别,所以是四维变量。

1

1

1

参考资料


  1. 且只有第一层需要,下面的层可以自动地推断尺寸 ↩︎

  2. 一个由整数或None组成的元组,其中None表示可能为任何正整数。 ↩︎

Thank you for your approval.

欢迎关注我的其它发布渠道