一、引言
Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow、Theano或CNTK作为后端运行。由于其用户友好的API设计、模块化和可扩展性,Keras已成为许多深度学习研究者和开发者的首选工具。本文将介绍Keras的基本用法,并通过一个简单的代码示例来展示其强大的功能。
二、Keras基础
- 模型构建
Keras提供了两种模型构建方式:序贯模型(Sequential)和函数式API(Functional API)。序贯模型适用于简单的线性堆叠层,而函数式API则适用于构建复杂的网络结构。
from keras.models import Sequential from keras.layers import Dense # 使用序贯模型构建一个简单的全连接神经网络 model = Sequential() model.add(Dense(32, input_dim=784, activation='relu')) model.add(Dense(10, activation='softmax'))
- 编译与训练
在构建完模型后,需要选择优化器、损失函数和评估指标来编译模型,然后使用训练数据对模型进行训练。
# 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 假设x_train和y_train是已经准备好的训练数据和标签 model.fit(x_train, y_train, epochs=5, batch_size=32)
- 评估与预测
训练完成后,可以使用测试数据来评估模型的性能,并使用模型进行预测。
# 评估模型 loss, accuracy = model.evaluate(x_test, y_test) print('Test accuracy:', accuracy) # 预测 predictions = model.predict(x_test)
三、代码示例:使用Keras构建和训练一个简单的卷积神经网络(CNN)
下面我们将使用Keras来构建和训练一个简单的卷积神经网络,用于MNIST手写数字分类任务。
from keras.datasets import mnist from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理:归一化并reshape以适应模型输入 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255 x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255 y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) # 构建CNN模型 model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=128, epochs=10, verbose=1, validation_data=(x_test, y_test)) # 评估模型 score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1])
四、总结
本文介绍了Keras深度学习框架的基本用法,并通过一个卷积神经网络的示例展示了其强大的功能。Keras的简洁API和模块化设计使得构建和训练复杂的神经网络模型变得简单而高效。