Tiven Wang
Wang Tiven August 13, 2018
425 favorite favorites
bookmark bookmark
share share

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

首先安装 keras 代码库

pip install keras

然后在代码中引入 keras 库的组件,如下

from keras.layers import Input, Conv1D, Dense, Dropout, Lambda, concatenate

也可以使用嵌入 TensorFlow 的 keras

import tensorflow as tf
from tensorflow import keras

Keras 的核心数据结构是 model,一种组织网络层的方式

  • Sequential: 最简单的模型是 Sequential 顺序模型,它是由多个网络层线性堆叠的栈;
  • Functional APIs: 对于更复杂的结构,你应该使用 Keras 函数式 API,它允许构建任意的神经网络图;

我们来看一下简单的顺序模型是什么样的,首先创建一个线性模型

model = keras.Sequential()

然后往此模型里添加一个或多个网络层

model.add(keras.layers.Dense(64,input_dim=100))
model.add(keras.layers.Activation("relu"))

模型的网络结构有了,接下来配置训练模型,配置有三个重要的参数

  • 优化器
  • 损失函数
  • 模型评估标准
model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

训练

data = np.random.random((1000, 100))
labels = np.random.random((1000, 10))
model.fit(data, labels, epochs=5, batch_size=10)

epochs 和 batch_size 参数的含义及区别

  • batch_size: 整数或 None。每次提度更新的样本数。如果未指定,默认为 32.
  • epochs: 整数。训练模型迭代轮次。一个轮次是在整个 x 或 y 上的一轮迭代。请注意,与 initial_epoch 一起,epochs 被理解为 「最终轮次」。模型并不是训练了 epochs 轮,而是到第 epochs 轮停止训练。

validation 起什么作用?

完整代码

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
import numpy as np

model = Sequential()

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

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

model.summary()

data = np.random.random((1000, 100))
labels = np.random.random((1000, 10))
model.fit(data, labels, epochs=5, batch_size=10)

data_test = np.random.random((10, 100))
labels_test = np.random.random((10, 10))
loss_and_metrics = model.evaluate(data_test, labels_test, batch_size=100)

classes = model.predict(data_test, batch_size=20)

metrics

Its History.history attribute is a record of training loss values and metrics values at successive epochs, as well as validation loss values and validation metrics values (if applicable).

Convolutional Layers

1 维卷积层的函数 Conv1D 因为 Keras 库是对各种神经网络库的高级抽象层,所以对于初学者来说容易迷惑的是各个神经网络层的输入输出数据的维度。1 维时间序列卷积函数的输入数据维度表示为 (samples/batch, series/steps, channels/dimensions)。第一个维度是通用的,表示一批数据样本。第二个维度是时间序列的维度,指定时间序列的长度,可以是一个整数或者 None 代表不定长变量。第三个维度是时间序列的维度,相当于 2D 图像的 channels 代表组成每个像素的维度。虽然默认最后一个维度为 channels 但可以在参数中修改如data_format='channels_first'表示输入数据维度应该为 (batch, channels, steps) 第一个总是 batch 维,不包括在 data_format 参数含义内。

我们需要为第一层神经网络层指定输入数据的维度格式,数据格式只需要指定从第二维的即 batch 之后的维度。

from keras.layers import Input

Input(shape=(None, 2))

上面代码指定的输入数据维度信息为 (None, None, 2) 即 (不定长, 不定长, 2) 。

References

Similar Posts

Comments

Back to Top