Keras是一个为神经网络和深度学习框架提供API的库。它使得在Python中处理各种深度学习应用变得简单。Keras以其易用性和高效性著称,是初学者和专业人士的首选。Keras可以与TensorFlow、Theano和CNTK后端一起使用,支持CPU和GPU操作。
Keras API模块
Keras包含十个不同的API模块,用于建模和训练神经网络。这些模块包括模型创建、训练、评估和预测等。模型API允许通过添加和删除层来构建复杂的神经网络。模型可以是顺序的,也可以是功能性的,后者提供了更大的灵活性。
Keras模型类型
Keras模型分为两种类型:顺序模型和功能性API。顺序模型允许逐层构建模型,但不适用于具有多个输入或输出的模型。功能性API则提供了构建具有多个输入和输出的模型的能力,并且可以共享层。
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(64, input_shape=8))
model.add(Dense(32))
以上是一个简单的顺序模型示例。功能性API允许构建更复杂的模型结构,例如具有多个输入和输出的模型。
from keras.models import Model
from keras.layers import Input, Dense
input = Input(shape=(32,))
layer = Dense(32)(input)
model = Model(inputs=input, outputs=layer)
深度学习中的层
层是神经网络的基础。Keras的层API提供了构建神经网络架构的全面技术。基础层类包括创建自定义层的方法,这些层具有自定义权重和初始化器。
深度学习中的回调
回调是跟踪模型训练过程的一种方法。通过启用回调,可以在每个epoch或batch结束前后执行各种操作。
数据预处理
数据通常以原始格式组织在目录中,需要在模型拟合前进行预处理。图像数据预处理类中有许多专用函数。例如,图像数据需要转换为数值数组,这可以通过img_to_array函数实现。
深度学习中的优化器
优化器是神经网络的核心。每个神经网络都优化一个损失函数,以找到最佳的预测权重。Keras提供了多种优化器,如SGD、RMSProp、Adam等。
损失函数和度量
在编译模型时,损失函数是必需的。优化器将优化这个损失函数。损失函数有三种类型:概率损失、回归损失和铰链损失。度量用于量化模型在测试数据上的性能。
Keras应用
Keras应用类包括多个预构建模型和预训练权重。这些预训练模型在迁移学习过程中非常有用。
考虑一个基本的数据集,如MNIST,它在Keras的数据集类中可用。将创建一个简单的顺序卷积神经网络,用于分类0-9的手写数字图像。
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
以上代码加载了MNIST数据集,并对其进行了归一化处理。接下来,将构建一个简单的卷积神经网络模型。
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5,5), activation='relu', input_shape=x_train.shape[1:]))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(10, activation='softmax'))
以上代码构建了一个顺序模型,并添加了多个层。编译模型,并通过损失函数、优化器和度量来训练模型。
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(rotation_range=10, zoom_range=0.1, width_shift_range=0.1, height_shift_range=0.1)
epochs = 3
batch_size = 32
history = model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs, validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[0]//batch_size)