神经⽹络的训练集是怎么⽤的_⽤Keras从零开始6步骤训练神
经⽹络
本⽂将简要介绍Keras的功能特点,使⽤Keras构建模型⼀般流程的6个步骤,以及使⽤Keras处理mnist分类问题的⼀个简单范例。
⼀,Keras简介
Keras 是⼀个⽤ Python 编写的⾼级神经⽹络 API,它能够以 TensorFlow,Theano 或者 CNTK, MXNet 作为后端运⾏。
Keras 具有以下优势:
简单易⽤:Keras是为⼈类⽽不是为机器设计的 API。它把⽤户体验放在⾸要和中⼼位置。Keras遵循减少认知困难的最佳实践,它提供⼀致且简单的 API,将常见⽤例所需的⽤户操作数量降⾄最低,并且在⽤户错误时提供清晰和可操作的反馈。
功能强⼤:Keras同时⽀持卷积神经⽹络和循环神经⽹络,以及两者的组合,它可以在CPU和GPU上⽆缝运⾏。Keras不仅提供了构建和训练神经⽹络模型的⾼级功能,还提供了模型结果可视化的⼯具,以及常
见的图像和⽂本数据的预处理⼯具,另外Keras中还包括⼀些常⽤的玩具数据集和⼀些著名的已经训练好的神经⽹络模型。
⾼度灵活:⽤户可以使⽤Keras的函数式API构建任意结构的神经⽹络,如多输⼊多输出结构,残差⽹络,Inception⽹络等。通过⾃定义层和⾃定义模型,⽤户可以实现⾼度定制化的功能。利⽤Keras的后端backend提供的⼀些函数⽤户甚⾄可以从底层开始实现任意模型。
总之,这⼏乎是⼀个⽆懈可击的封装,集极致的体验,强⼤的功能,⽆限的灵活性于⼀⾝。
这就是Keras,你恰好发现了她!
⽬前Keras是github排名第⼆的开源深度学习框架,也是Kaggle竞赛中使⽤⼈数最多的神经⽹络框架。
⼆,使⽤流程
使⽤Keras进⾏神经⽹络实验的⼀般流程包括以下6个步骤。其中准备数据,构建模型和训练模型是必选的3个步骤。1,准备数据:
可以从keras的dataset导⼊玩具数据集,也可以导⼊外部数据集,并使⽤图像,⽂本,序列等数据预处理⼯具进⾏数据预处理。当数据规模较⼤时,需要使⽤Sequence等⼯具构建数据管道以备在训练过程中并⾏读取。2,构建模型
可以使⽤以下3种⽅式构建模型:使⽤Sequential按层顺序构建模型,使⽤函数式API构建任意结构模型,继承Model基类构建⾃定义模型。
模型由层layer组成,keras中有许多已经定义好的层,⽤户可以使⽤backend函数定义Lambda匿名层,此外⽤户也可以继承Layer层基类构建⾃定义层。
另外,⽤户也可以将application中已经训练好的模型加载进来,对其进⾏微调或者将其部分结构作为模型的⼀部分,模型本⾝也可以被看成⼀个层。
构建完模型后,需要⽤compile⽅法来编译模型,指定优化器,⽬标函数,评估指标,以及回调函数。
可以⽤summary⽅法来查看模型的结构和参数数量。也可以⽤plot_model⽅法来可视化模型的结构图。
如果需要使⽤tensorboard来对模型结构图及训练过程进⾏可视化,可以调⽤tensorboard回调函数。3,训练模型
⼀般情况下可以⽤模型的fit⽅法训练模型,当数据集较⼤时,应当使⽤内存友好的fit_generator⽅法训练模型,如果需要细粒度的⾃定义训练过程,可以⽤train_on_batch逐批次地训练模型。
如果需要使⽤GPU训练模型,需要安装CUDA和cuDNN以⽀持相应计算,并安装tensorflow-gpu版本,则可以⽆缝切换到GPU运⾏。
如果需要使⽤多个GPU训练模型,可以使⽤keras.utils.multi_gpu_model创建⽀持多个GPU同时训练的模型。4,评估模型
在通常情况下,训练模型时候指定验证集就可以在训练过程中输出模型的在训练集和验证集的损失和评估指标。然后可以⽤matplotlib将结果可视化,也可以利⽤回调函数在tensorboard中进⾏可视化。如果需要⾃定义评估指标,可以利⽤backend接⼝进⾏编写。
在模型训练完成后,可以⽤evaluate⽅法对模型进⾏评估,当数据集较⼤时,使⽤对内存友好的evaluate_generator⽅法评估模型,如果需要细粒度的评估,可以⽤test_on_batch在⼀个批次上评估模型。5,使⽤模型
⼀般情况下使⽤模型的predict⽅法进⾏预测,当数据集较⼤时,使⽤predict_generator⽅法进⾏预测。6,保存模型
keras可以⽤模型的save⽅法保存模型的结构和权重到.h5⽂件,也可以⽤save_weight⽅法只保存模型的权重到.h5⽂件,也可以⽤
to_json或者to_yaml⽅法只保存模型的结构到json或者yaml⽂件。
三,mnist分类范例
我们以mnist⼿写数字识别数据集为例介绍分类范例。这是⼀个多分类问题。
import keras
import tensorflow as tf
from keras import backend as K
1,导⼊数据
from keras import datasets
# 从⾃带数据集载⼊数据
(x_train, y_train), (x_test, y_test) = ist.load_data()
# 将数据reshape并缩放
x_train = shape((-1, 28 * 28))
x_train = x_train.astype('float32') / 255
x_test = shape((-1,28*28))
x_test = x_test.astype('float32') / 255
from keras import utils
# 将标签转换为onehot编码
y_train = _categorical(y_train,num_classes= 10)
y_test = _categorical(y_test,num_classes= 10)
print('x_train.shape:',x_train.shape)
print('y_train.shape:',y_train.shape)
print('x_test.shape:',x_test.shape)
print('y_test.shape:',y_test.shape)
2,构建模型
from keras import models,layers
model = models.Sequential()
model.add(layers.Dense(512,activation = 'relu',input_shape=(28 * 28,))) model.add(layers.Dense(10,activation = 'softmax' ))
modelpile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
svg和h5的关系3,训练模型
history = model.fit(x_train,y_train,
epochs = 5,
batch_size = 128,
validation_data =(x_test,y_test))
4,评估模型
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
acc = history.history['acc']
val_acc = history.history['val_acc']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training accuracy') plt.plot(epochs, val_acc, 'b', label='Validation accuracy') plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
5,使⽤模型
6,保存模型
# 保存模型结构及权重
model.save('my_model.h5')
del model
# 恢复模型结构及权重
model = models.load_model('my_model.h5') model.evaluate(x_test,y_test)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。