美文网首页
Keras中文文档学习笔记1

Keras中文文档学习笔记1

作者: 努力科研的小树蛙 | 来源:发表于2018-06-13 18:23 被阅读0次

一 主页

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后损失函数的值以及其他度量指标

6 从sequential模型中去除一层
使用.pop去除模型最后一层,反复调用n次可以去除模型后面的n个层

model = Sequential()
model.add(Dense())
model.add(Dense())
print(len(model.layers))#打印层数,显示为2

model.pop() #去除一层
print(len(model.layers)) #打印层数,显示为1

相关文章

网友评论

      本文标题:Keras中文文档学习笔记1

      本文链接:https://www.haomeiwen.com/subject/gfijeftx.html