网站首页 > 技术文章 正文
本文内容参考《深度学习计算机视觉实战》,该书内容包括深度学习与计算机视觉基础介绍、常用的OpenCV进行模型训练前处理与后处理算法、计算机视觉案例实战、Windows/Linux/Android/国产化平台的模型部署,学习路线如下:
Keras是最常见的深度学习库之一,能够帮助用户快速构建深度学习网络。Keras的张量计算依赖于处理后端,Keras中提供了Theano/Tensorflow/CNTK三种后端引擎,三种引擎的函数使用统一封装,在用户层面可以切换后端引擎,但是调用的API相同。
Keras提供了丰富的API用于模型的搭建与训练,本节介绍常用API,用户若想深入了解可以参考官方文档。
1 Keras模型
Keras中提供两种模型构建方法:构建顺序模型和使用函数式API构建的Model类模型。
顺序模型是网络层的线性叠加,使用Sequential()函数创建,可以将网络的层当做参数传入,如下所示传入了四个层,Conv2D(卷积层),Activation(激活层),Dense(全连接层),Activation(激活层)。
from keras.models import Sequential
from keras.layers import Conv2D, Dense, Activation
model = Sequential([
Conv2D(3, (3, 3), padding='same')(inputs),
Activation('Relu'),
Dense(10),
Activation('softmax'),
])
也可以创建一个空的模型,向里面添加层。
model = Sequential()
model.add(Conv2D(3, (3, 3), padding='same')(inputs))
model.add(Activation('Relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
上面两种创建顺序模型的方式是等价的,使用顺序模型可以一层层的叠加模型的层。
函数式API的Model类模型由keras.Model()创建。
inputs = keras.Input(shape=(3,))
x = keras.layers.Dense(784, activation='Relu')(inputs)
outputs = keras.layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs)
除了这两种模型之外,还可以继承Keras.Model定制化创建自己的模型,这种方式具有更大的灵活性。
2 Keras层
Keras的层由keras.layers引入,常用的层有Conv2D,Dense,Activation,Input、MaxPooling2D、BatchNormalization、AveragePooling2D、Dropout、AveragePooling2D。
Conv2D:提供二维的卷积功能。
Dense:提供w*x+b的功能,和全连接类似。
Activation:提供激活函数功能。
Input:提供输入函数。
MaxPooling2D:提供最大池化功能。
AveragePooling2D:提供平均池化功能。
BatchNormalization:提供归一化功能。
Dropout:对输入应用Dropout功能。
这些函数层都是类的形式定义,传入的参数会初始化类成员,然后调用后端对应的功能函数,以MaxPooling2D为例,调用如下。
class MaxPooling2D(_Pooling2D):
@interfaces.legacy_pooling2d_support
def __init__(self, pool_size=(2, 2), strides=None, padding='valid',
data_format=None, **kwargs):
super(MaxPooling2D, self).__init__(pool_size, strides, padding,
data_format, **kwargs)
def _pooling_function(self, inputs, pool_size, strides,
padding, data_format):
output = K.pool2d(inputs, pool_size, strides,
padding, data_format,
pool_mode='max')
return output
MaxPooling2D传入的参数就是池化核大小pool_size,步长strides,padding的类型padding,数据类型data_format。在_pooling_function中调用某一个后端的pool2d函数。
Linux系统中可以在$HOME/.keras/keras.json中找到Keras配置文件,如果是Windows则是在%USERPROFILE%/.keras/keras.json中保存配置文件,内容如下所示:
{
"floatx": "float32",
"epsilon": 1e-07,
"backend": "tensorflow",
"image_data_format": "channels_last"
}
可以在这里修改后端为"tensorflow","theano" 和 "cntk"中的一个,也可以使用用户自定义的后端,自定义后端需要定义了placeholder、variable以及function三个函数,否则会报后端无效的错误。
用户也可以通过设置环境变量KERAS_BACKEND来改变后端,设置之后会修改配置文件中的后端设置值。
3 模型编译
Keras中模型编译是通过compile方法完成的,如下所示,常用的三个参数为优化器optimizer,损失函数loss以及评价函数metrics。
model.compile(optimizer='rmsprop',
loss='mse',
metrics=['accuracy'])
开发者还可以根据需要设置其他的参数,compile的函数定义如下:
def compile(self,
optimizer, #优化器
loss=None, #损失函数
metrics=None, #评价函数
loss_weights=None, #指定不同损失函数的权重
sample_weight_mode=None, #采样权重模式
weighted_metrics=None, #加权评估标准
target_tensors=None, #指定自己的目标张量
**kwargs)
optimizer中提供了八种可选的优化器的类型:SGD、RMSprop、Adam、Adadelta、Adagrad、Adamax、Nadam、Ftrl。
loss为模型训练定义的损失函数,用户可以选择已有的损失函数,也可以自定义损失函数。使用时根据分类或者回归任务的不同选择不同的损失函数,如分类任务中常用的交叉熵损失函数keras.losses.categorical_crossentropy。如果模型具有多个输出,对应的多个损失函数可以通过字典或列表进行参数传递,这样在每个输出上使用不同的损失,最终的最小化损失是最小化所有输出损失的总和。
metrics为评价函数,用于评估当前训练模型的性能,是模型训练和测试期间的评估标准,如使用准确率作为标准可以传入metrics = ['accuracy'],对于多输出模型可以用字典传递不同的评价函数。
4 模型训练
Keras模型训练使用fit函数。
model.fit(inputs, labels, epochs=10, batch_size=32)
如上面的调用传入了输入数据inputs,标签labels,训练轮次10轮,每一次梯度更新使用的样本数量大小为32(即batch的大小)。
fit函数还可以设置其他的参数,函数的定义如下:
def fit(self,
x=None, #输入数据
y=None, #标签label
batch_size=None, #训练batch大小
epochs=1, #训练轮次
verbose=1, #日志输出的方式
callbacks=None, #回调函数
validation_split=0., #验证集的比例
validation_data=None, #验证集
shuffle=True, #是否打乱样本顺序
class_weight=None, #为不同类别设置不同的权重
sample_weight=None, #样本加权
initial_epoch=0, #从指定epoch开始训练
steps_per_epoch=None, #每个epoch的步数
validation_steps=None, #若steps_per_epoch被指定,表示验证集上step总数
validation_freq=1, #验证集验证频次
max_queue_size=10, #生成器序列的最大值
workers=1, #最大线程数
use_multiprocessing=False, #是否多线程
**kwargs)
在训练的过程中可以根据需要选择合适的参数,例如是否需要使用验证集做验证,是否打乱输入数据,以及根据训练机器的性能选择是否使用多线程和设置最大的线程数。
猜你喜欢
- 2024-10-03 个性化推荐系统源代码之基于 Wide&Deep模型的在线排序
- 2024-10-03 TensorFlow做Sparse Machine Learning
- 2024-10-03 在线学习(Online Learning)导读 在线学习网
- 2024-10-03 Tensorflow(4) tensorflow4060版本
- 2024-10-03 Kernel分类器 分类器性能
- 2024-10-03 孙玄:转转如何打造AI工程架构体系
- 2024-10-03 推荐系统工程难题:如何做好深度学习CTR模型线上Serving
- 2024-10-03 推荐系统工程难题:如何做好深度学习 CTR 模型线上 Serving
- 2024-10-03 在线学习在爱奇艺信息流推荐业务中的探索与实践
- 2024-10-03 推荐精排模型之经典排序模型 推荐精排模型之经典排序模型的理由
你 发表评论:
欢迎- 02-26Docker目录说明之 /var/lib/docker
- 02-26家用nas最常用的docker容器及部署方法
- 02-26Docker快速上手笔记
- 02-26怎样在Python中操作Docker容器?
- 02-26手把手教你搭建LLM模型知识库,开启AI智慧大门
- 02-26Docker容器是个啥?和VM有什么区别?
- 02-26Docker入门指南:从新手到容器大师
- 02-26带你一文搞懂 Docker
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)