本章向读者介绍Keras,它是一个功能强大、内容抽象的图书馆。 构建深度学习网络的基础。Keras提供的构建块使用 (前面已经介绍)以及张量流(它是用于构建计算的 图形、自动导出渐变等)。keras同时支持CPU和GPU计算,是一个 快速原型化想法的好工具。 我们将介绍Keras提供的一些关键构建块,然后构建CNN和LSTM 使用KRAS。 让我们从一个简单的单层神经网络开始。清单7-1提供了代码和图7-1 给出了计算图。应注意以下几点:
1。模型是使用顺序结构定义的,它允许用户 添加/配置层。
2。使用此功能,用户可以添加一个或多个层并构建网络。 致密层基本上是一个完全连接的层(导致矢量矩阵或 向量向量积),我们之前已经看到过。
3。当第一层 定义。在这种情况下,模型将采用维数为500的输入,并且 生成维度1的输出。
4。在这一层之后,我们添加了一个激活函数,在本例中是一个乙状结肠。
5。一旦定义了模型,就需要显式编译,此时,我们 提供损失函数、优化算法和我们需要的其他指标 计算。
6。考虑到手头的任务,需要选择适当的损失函数;在此 如果我们有一个二进制分类问题,我们选择二进制
交叉熵
7。需要选择适当的优化算法,这通常是 随机梯度下降的变化(在后面的章节中包含)。
8。编译后,我们可以通过提供数据和评估模型来适应模型。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.utils.visualize_util import plot
model = Sequential()
model.add(Dense(1, input_dim=500))
model.add(Activation(activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
data = np.random.random((1000, 500))
labels = np.random.randint(2, size=(1000, 1))
score = model.evaluate(data,labels, verbose=0)
print "Before Training:", zip(model.metrics_names, score)
model.fit(data, labels, nb_epoch=10, batch_size=32, verbose=0)
score = model.evaluate(data,labels, verbose=0)
print "After Training:", zip(model.metrics_names, score)
plot(model, to_file='s1.png', show_shapes=True)
# Before Training: [('loss', 0.76832762384414677), ('acc', 0.50700000000000001)]
# After Training: [('loss', 0.67270196056365972), ('acc', 0.56299999999999994)]
Figure 7-1. Single Layer Neural Network (Binary Classification)
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.utils.visualize_util import plot
model = Sequential()
model.add(Dense(32, input_dim=500))
model.add(Activation(activation='sigmoid'))
model.add(Dense(1))
model.add(Activation(activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
data = np.random.random((1000, 500))
labels = np.random.randint(2, size=(1000, 1))
score = model.evaluate(data,labels, verbose=0)
print "Before Training:", zip(model.metrics_names, score)
model.fit(data, labels, nb_epoch=10, batch_size=32, verbose=0)
score = model.evaluate(data,labels, verbose=0)
print "After Training:", zip(model.metrics_names, score)
plot(model, to_file='s2.png', show_shapes=True)
# Before Training: [('loss', 0.73012506151199341), ('acc', 0.51200000000000001)]
# After Training: [('loss', 0.6588478517532349), ('acc', 0.52700000000000002)]
现在让我们来看一个两层的神经网络。清单7-2提供了代码,图7-2给出了 计算图。应注意以下几点: