keras几个模块的学习记录

keras是一个开源是的python深度学习库,可以基于theano或者tenserflow,为了下步实现猫狗大战代码,现对几个要用到的模块进行学习。

一、layer(层)

keras中有许多定义好的层,我们可以直接调用,包括常用层(Core)、卷积层(Convolutional)、池化层(Pooling)、局部连接层、递归层(Recurrent)、嵌入层( Embedding)、高级激活层、规范层、噪声层、包装层。当然也可以编写自己的层。

(一)Dense层(全连接层)

全连接的核心操作就是矩阵向量乘积,本质就是由一个特征空间线性变换到另一个特征空间。因此,dense层的目的是将前面提取的特征,在dense经过非线性变化,提取这些特征之间的关联,最后映射到输出空间上。比如下图

在这里插入图片描述

我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是全连接层的输出。

Dense(output_dim, init='glorot_uniform', activation='linear', weights=None, W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True, input_dim=None)

参数:
output_dim:大于0的整数,代表该层的输出维度。

init:初始化该层权重的方法

activation:该层的激活函数

weights:numpy array的list。该list应含有一个形如(input_dim,output_dim)的权重矩阵和一个形如(output_dim,)的偏置向量

regularizer:正则项,w为权重的、b为偏执的,activity为输出的

constraints:约束项

bias:是否包含偏执向量,是布尔值

input_dim:输入数据的维度

(二)dropout层
keras.layers.core.Dropout(rate, noise_shape=None, seed=None)

Dropout层为输入数据施加Dropout,即在训练过程中每次更新参数时按一定概率(rate)随机断开输入神经元,用于防止过拟合。
rate:0~1的浮点数,控制需要断开的神经元的比例

(三)Conv2D(卷积层)

要对图像进行处理,我们要用到卷积池化操作,对于keras来说,卷积可以用到Conv2D这一函数,下面是它的参数。

tf.keras.layers.Conv2D(
    filters,
    kernel_size,
    strides=(1, 1),
    padding="valid",
    data_format=None,
    dilation_rate=(1, 1),
    groups=1,
    activation=None,
    use_bias=True,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

参数:

filters: 整数,输出空间的维数(即在卷积中输出滤波器的数量)。

kernel_size:一个整数或2个整数的元组/列表,指定二维卷积窗口的高度和宽度。

strides: 一个整数或两个整数的元组/列表,指定沿高度和宽度的卷积的步长。

padding: 卷积会导致输出图像越来越小,图像边界信息丢失,若想保持卷积后的图像大小不变,需要设置padding参数为same

dilation_rate: 一个整数或两个整数的元组/列表,指定用于扩展卷积的扩展率。

activation: 使用激活函数,如“relu”或者“sigmoid”。 如果不特别指定,将不会使用任何的激活函数。

use_bias:Boolean,该层是否使用偏置向量。

kernel_initializer:kernel权重矩阵的初始化器

bias_initializer:偏置向量的初始化器

kernel_regularizer:应用于kernel权重矩阵的正则化函数

bias_regularizer:应用于偏置向量的正则化函数

activity_regularizer:应用于图层输出的正则化函数

kernel_constraint:应用于内核矩阵的约束函数

bias_constraint:应用于偏置向量的约束函数

此外,当使用此层作为模型的第一层时,需提供关键字参数input_shape(整数元组,不包括样本轴(不需要写batch_size)),例如。
input_shape=(128, 128, 3)表示 128x128的 RGB 图像。

(四)MaxPooling2D(池化层)

池化可以用到MaxPooling2D这一函数,下面是它的参数。

MaxPooling2D(
    pool_size=(2, 2),
    strides=None,
    padding='valid', 
    data_format=None 
)

参数:

pool_size:一个整数或2个整数的元组/列表,代表在两个方向(竖直,水平)上的下采样因子,如取(2,2)将使图片在两个维度上均变为原长的一半。

strides: 一个整数或两个整数的元组/列表,指定沿高度和宽度的池化的步长。

padding:可为“same”或者“valid”。

data_format:一个字符串,表示输入中维度的顺序。可为channels_last(默认)和channels_first。以128x128的RGB图像为例,“channels_first”应将数据组织为(3,128,128),而“channels_last”应将数据组织为(128,128,3)。

(五)Flatten

Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。

二、优化器(optimizers)

优化器是编译Keras模型必要的两个参数之一。可以在调用model.compile()之前初始化一个优化器对象,然后传入该函数,也可以在调用model.compile()时传递一个预定义优化器名,如sgd表示随机梯度下降。

第一种方法如下所示

sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)

lr表示学习速率
momentum表示动量项
decay是学习速率的衰减系数(每个epoch衰减一次)
Nesterov的值是False或者True,表示使不使用Nesterov momentum

除了sgd,还可以选择的优化器有RMSprop(适合递归神经网络)、Adagrad、Adadelta、Adam、Adamax、Nadam。

三、ImageDataGenerator图片生成器

keras中的ImageDataGenerator模块能够帮助我们对图像进行读取和处理。

keras.preprocessing.image.ImageDataGenerator(
    featurewise_center=False,
    samplewise_center=False,
    featurewise_std_normalization=False,
    samplewise_std_normalization=False,
    zca_whitening=False,
    zca_epsilon=1e-6,
    rotation_range=0.,
    width_shift_range=0.,
    height_shift_range=0.,
    shear_range=0.,
    zoom_range=0.,
    channel_shift_range=0.,
    fill_mode='nearest',
    cval=0.,
    horizontal_flip=False,
    vertical_flip=False,
    rescale=None,
    preprocessing_function=None
    )

参数:

featurewise_center:布尔值,使输入数据集去中心化(均值为0), 按feature执行
samplewise_center:布尔值,使输入数据的每个样本均值为0
featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化, 按feature执行
samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差
zca_whitening:布尔值,对输入数据施加ZCA白化
zca_epsilon: ZCA使用的eposilon,默认1e-6
rotation_range:整数,数据提升时图片随机转动的角度
width_shift_range:浮点数,图片宽度的某个比例,数据提升时图片水平偏移的幅度
height_shift_range:浮点数,图片高度的某个比例,数据提升时图片竖直偏移的幅度
shear_range:浮点数,剪切强度(逆时针方向的剪切变换角度)
zoom_range:浮点数或形如[lower,upper]的列表,随机缩放的幅度,若为浮点数,则相当于[lower,upper] = [1 - zoom_range, 1+zoom_range]
channel_shift_range:浮点数,随机通道偏移的幅度
fill_mode:;‘constant’,‘nearest’,‘reflect’或‘wrap’之一,当进行变换时超出边界的点将根据本参数给定的方法进行处理。其中,constant是以指定常数填充、nearest是以离边界最近的元素填充、reflect反射复制边缘填充
cval:浮点数或整数,当fill_mode=constant时,指定要向超出边界的点填充的值
horizontal_flip:布尔值,进行随机水平翻转
vertical_flip:布尔值,进行随机竖直翻转
rescale: 重放缩因子,默认为None. 如果为None或0则不进行放缩,否则会将该数值乘到数据上(在应用其他变换之前)
preprocessing_function: 将被应用于每个输入的函数。该函数将在任何其他修改之前运行。该函数接受一个参数,为一张图片(秩为3的numpy array),并且输出一个具有相同shape的numpy array

上述的函数等同于我们要对读入的图片进行怎样的设置,接下来利用flow_from_directory 这一函数对图像进行处理。先来看看它的一些参数

flow_from_directory( 
                    directory,
                    target_size=(256, 256), color_mode='rgb',
                    classes=None, class_mode='categorical',
                    batch_size=32, shuffle=True, seed=None,
                    save_to_dir=None,
                    save_prefix='',
                    save_format='jpeg',
                    follow_links=False
)

参数:

directory: 目标文件夹路径,对于每一个类,该文件夹都要包含一个子文件夹.子文件夹中任何JPG、PNG、BNP、PPM的图片都会被生成器使用。

target_size: 一个整数或2个整数的元组/列表,默认为(256, 256). 图像将被resize成该尺寸。

color_mode: 颜色模式,为"grayscale",“rgb"之一,默认为"rgb”.代表这些图片是否会被转换为单通道或三通道的图片.

classes: 可选参数,为子文件夹的列表,如[‘dogs’,‘cats’]默认为None. 若未提供,则该类别列表将从directory下的子文件夹名称/结构自动推断。每一个子文件夹都会被认为是一个新的类。(类别的顺序将按照字母表顺序映射到标签值)。通过属性class_indices可获得文件夹名与类的序号的对应字典。

class_mode: “categorical”, “binary”, "sparse"或None之一. 默认为"categorical. 该参数决定了返回的标签数组的形式, "categorical"会返回2D的one-hot编码标签,"binary"返回1D的二值标签."sparse"返回1D的整数标签,如果为None则不返回任何标签, 生成器将仅仅生成batch数据, 这种情况在使用model.predict_generator()和model.evaluate_generator()等函数时会用到.

batch_size: batch数据的大小,默认32

shuffle: 是否打乱数据,默认为True

seed: 可选参数,打乱数据和进行变换时的随机数种子

save_to_dir: None或字符串,该参数能让你将提升后的图片保存起来,用以可视化

save_prefix:字符串,保存提升后图片时使用的前缀, 仅当设置了save_to_dir时生效

save_format:“png"或"jpeg"之一,指定保存图片的数据格式,默认"jpeg”

flollow_links: 是否访问子文件夹中的软链接

四、fit_generator

设置好了方法后,接下来就是输入数据了。使用fit_generator函数可以帮助我们处理较大的数据集,并且可以执行数据增强以避免过拟合并增加我们的模型的泛化能力。

fit_generator(generator, 
steps_per_epoch=None, 
epochs=1, 
verbose=1, 
callbacks=None, 
validation_data=None, 
validation_steps=None, 
class_weight=None, 
max_queue_size=10, 
workers=1, 
use_multiprocessing=False, 
shuffle=True, 
initial_epoch=0)

参数:

generator:生成器。

steps_per_epoch:这个是我们在每个epoch中需要执行多少次生成器来生产数据,fit_generator函数没有batch_size这个参数,是通过steps_per_epoch来实现的。

epochs:即我们训练的迭代次数。

verbose:0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条, 2 = 每轮一行

callbacks:在训练时调用的一系列回调函数。

validation_data:和我们的generator类似,只是这个使用于验证的,不参与训练。

validation_steps:和前面的steps_per_epoch类似。

class_weight:可选的将类索引(整数)映射到权重(浮点)值的字典,用于加权损失函数(仅在训练期间)。

max_queue_size:整数。生成器队列的最大尺寸。默认为10.

workers:整数。使用的最大进程数量,如果使用基于进程的多线程。 如未指定,workers 将默认为 1。如果为 0,将在主线程上执行生成器。

use_multiprocessing:布尔值。如果 True,则使用基于进程的多线程。默认为False。

shuffle:是否在每轮迭代之前打乱 batch 的顺序。 只能与Sequence(keras.utils.Sequence) 实例同用。

initial_epoch: 开始训练的轮次(有助于恢复之前的训练)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值