Keras中文文档学习笔记1

一 主页
1 Keras核心数据结构是模型,并且主要的模型是Sequential模型,它是一系列网络层按照顺序构成的栈。模型定义如下:

from keras.model import Sequential model = Sequential()

然后往这个模型里添加网络层,用add堆叠,就构成了一个模型。
frome keras.layers import Dense, Activation model.add(Dense(units=64, input_dim=100)) model.add(Activation("relu")) model.add(Dense(units=10)) #添加隐藏层 model.add(Activation("softmax")) #激活函数

注意,keras有两种建模方式,一种是序贯式,一种是函数式,上述方法是序贯式,而函数式一般如下
inputs = Input(shape=(784,)) x = Dense(64, activation='relu')(inputs) x = Dense(64, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) #直接定义输入层、以及隐藏层,上一层的输出是下一层的输入 model = Model(inputs=inputs, outputs=predictions)#完成后,使用model进行建模,序贯式方法没有建模,而是直接编译。 #接下去的模型编译和模型训练和序贯式方法一致,下面介绍

完成模型搭建后,需要编译模型。编译的时候指定损失函数loss,优化器optimmizer
model.compile(loss='categorical_crossentropy', optimizer='sgd',metrics=['accuracy'])

完成编译后,在训练数据上按照batch进行一定次数的迭代训练网络,epochs是迭代次数,batch_size是每次训练的数据集大小
model.fit(x_train, y_train, epochs=5, batch_size=32)

训练完成后,可以进行模型评估,以及使用模型进行预测
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128) #模型评估classes = model.predict(x_test, batch_size=128) #使用模型预测

keras必须选择一个后端,一般有tensorflow, theano , cntk。后端是keras依赖于完成顶层张量运算的软件包。
二 一些基本概念
1 张量
可以看作是向量、矩阵的推广。
0阶张量:即标量。
1阶张量:一些数有序排列起来,也就是一个向量。
2阶张量:一组有序向量排列起来,也就是一个矩阵。
3阶张量:把矩阵堆叠起来,比如具有三个颜色通道的彩色图片就是这样一个立方体。
...
张量维度:即阶数。
2 data_format
theano: (样本维,通道维,高,宽) --channels_first
thesorflow:(样本维,高,宽,通道维)--channels_last
样本维:表示样本的树木
通道维:表示颜色的通道数
宽、高:表示图片的宽和高
3 batch
深度学习更新参数的方法:
第一种,batch gradient descent 遍历全部数据集算一次损失函数,然后算损失函数对各个参数的梯度,更新梯度。计算速度慢,不支持在线学习。
第二种,随机梯度下降,每次看一个数据就计算一下损失函数,然后求梯度更新参数。速度快,到那时可能在最优点附近晃来晃去。
折中一下,基于mini-batch,大小为batch_size,采用小批次的梯度下降,把数据分成若干批,按批次来更新参数。一个批次中的一组数据共同决定了本次梯度的方向。
4 epochs
迭代次数,就是训练过程中数据将被“轮”多少次。
5 生成式函数,匿名函数lanbda
三 常见问题
1 当使用tensorflow作为后端的时候,机器上如果有可用gpu时,代码会自动调用GPU进行并行计算。
2 sample:数据集中的一条数据,例如图片数据集中的一张图片,语音数据中的一段音频
batch:由若干条数据构成,进行网络优化的基本单位,网络的每一轮优化需要使用一个batch。
Epoch:batch对应一次更新,Epoch对应一轮更新。一轮更新中次数可以随意,但通常一般会设置会遍历一遍数据集,因此含义是模型完整的看一遍数据集。主要作用是把模型的训练过程分成若干个阶段。
3 保存模型:该操作保存了模型的结构、权重、训练配置(损失函数,优化器)、优化器的状态
from keras.model import load_model model.save('my_model.h5') del model model = load_model('my_model.h5') #加载模型

4 获得中间层的输出
创建一个新的model,使得该model的输出是我们想要的层的输出
from keras.models import Model model = ... #创建一个模型 layer_name = 'my_layer' #指定我们想要输出的层名字 intermediate_layer_model=Model(input=model.input, output=model.get_layer(layer_name).output) #指定输入,输出,输出为原模型的输出,用来获取一个新模型 layer_output= intermediate_layer_model.predict(data) #预测

5 设置验证集
model.fit函数的参数
validation_split参数:在model.fit的时候,设置validation_spilt的值,则可以将数据分为训练集和验证集,如果该值设置为0.1,则默认将输入数据的最末百分之十作为验证集。
shuffle参数:该参数为真,训练数据会被随机洗乱。在每个epoch中被重新洗一次。
hist参数:
hist=model.fit(X,y, validation_split=0.2) print(hist.history)#返回一个epoch后损失函数的值以及其他度量指标

【Keras中文文档学习笔记1】6 从sequential模型中去除一层
使用.pop去除模型最后一层,反复调用n次可以去除模型后面的n个层
model = Sequential() model.add(Dense()) model.add(Dense()) print(len(model.layers))#打印层数,显示为2model.pop() #去除一层 print(len(model.layers)) #打印层数,显示为1

    推荐阅读