Python keras

发布时间 2023-04-01 16:05:20作者: ImreW

(一)to_categorical

说明:

简单来说,to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。其表现为将原有的类别向量转换为独热编码的形式。

例子:

from keras.utils.np_utils import *
#类别向量定义
b = [0,1,2,3,4,5,6,7,8]
#调用to_categorical将b按照9个类别来进行转换
b = to_categorical(b, 9)
print(b)
 
执行结果如下:
[[1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1.]]

to_categorical最为keras中提供的一个工具方法,从以上代码运行可以看出,将原来类别向量中的每个值都转换为矩阵里的一个行向量,从左到右依次是0,1,2,...8个类别。2表示为[0. 0. 1. 0. 0. 0. 0. 0. 0.],只有第3个为1,作为有效位,其余全部为0。

(二)Sequential

说明:

顺序模型是多个网络层的线性堆叠。

原型:

Sequential()

例子:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

or

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

(三)Convolution2D

说明:

该层创建了一个卷积核, 该卷积核对层输入进行卷积, 以生成输出张量。 如果 use_bias 为 True, 则会创建一个偏置向量并将其添加到输出中。 最后,如果 activation 不是 None,它也会应用于输出。

当使用该层作为模型第一层时,需要提供 input_shape 参数 (整数元组,不包含样本表示的轴),例如, input_shape=(128, 128, 3) 表示 128x128 RGB 图像, 在 data_format="channels_last" 时。

原型:

keras.layers.Conv2D(
filters, #卷积核的数目(即输出的维度)
kernel_size, #卷积核的宽度和长度。
strides=(1, 1), #为卷积的步长。
padding='valid', #补0策略,为“valid”, “same” 。“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
data_format=None, #激活函数。如果不指定该参数,将不会使用任何激活函数
dilation_rate=(1, 1), #指定dilated convolution中的膨胀比例。
activation=None, #字符串,“channels_first”或“channels_last”之一,代表图像的通道维的位置。“channels_last”对应原本的“tf”,“channels_first”对应原本的“th”。以128x128的RGB图像为例,“channels_first”应将数据组织为(3,128,128),而“channels_last”应将数据组织为(128,128,3)。该参数的默认值是~/.keras/keras.json中设置的值,若从未设置过,则为“channels_last”。
use_bias=True, #布尔值,是否使用偏置项
kernel_initializer='glorot_uniform',#权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。
bias_initializer='zeros', #权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器
kernel_regularizer=None, #施加在权重上的正则项,为Regularizer对象
bias_regularizer=None, #施加在偏置向量上的正则项,为Regularizer对象
activity_regularizer=None, #施加在输出上的正则项,为Regularizer对象
kernel_constraint=None, #施加在权重上的约束项,为Constraints对象
bias_constraint=None)#施加在偏置上的约束项,为Constraints对象

例子:

model.add(Convolution2D(
input_shape = (28,28,1),#当使用该层作为模型第一层时,需要提供 input_shape 参数 (整数元组,不包含样本表示的轴),
filters = 32,#卷积核的数目(即输出的维度)
kernel_size = 5,#卷积核的宽度和长度。
strides = 1,#为卷积的步长。
padding = 'same',#“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
activation = 'relu'#激活函数。如果不指定该参数,将不会使用任何激活函数
))

(四)MaxPooling2D

说明:

对于空间数据的最大池化。

原型:

keras.layers.MaxPooling2D(
pool_size=(2, 2), #池化窗口大小
strides=None, #池化步长,默认值等于 pool_size
padding='valid', #VALID' 或 'SAME','VALID'表示无填充,'SAME'表示用0填充
data_format=None)#表示输入张量的维度顺序,默认为 [batch, height, width, channel]

例子:

model.add(MaxPooling2D(
pool_size = 2,#池化窗口大小
strides = 2,#池化步长,默认值等于 pool_size
padding = 'same',#'SAME'表示用0填充
))

(五)Flatten

说明:

将输入展平。不影响批量大小。

原型:

keras.layers.Flatten(
data_format=None)#data_format:一个字符串,其值为 channels_last(默认值)或者 channels_first。它表明输入的维度的顺序。

例子:

model = Sequential()
model.add(Conv2D(64, (3, 3),
                 input_shape=(3, 32, 32), padding='same',))
# 现在:model.output_shape == (None, 64, 32, 32)

model.add(Flatten())
# 现在:model.output_shape == (None, 65536)

(六)Dense

说明:

全连接层。

原型:

keras.layers.Dense(
units, #代表该层的输出维度或神经元个数,
activation=None, #激活函数.但是默认 liner
use_bias=True, #布尔值,该层是否使用偏置向量b
kernel_initializer='glorot_uniform', #初始化w权重 
bias_initializer='zeros', #初始化b权重 
kernel_regularizer=None, #施加在权重w上的正则项
bias_regularizer=None, #施加在偏置向量b上的正则项 
activity_regularizer=None, #施加在输出上的正则项 
kernel_constraint=None, #施加在权重w上的约束项
bias_constraint=None)#施加在偏置b上的约束项

例子:

# 作为 Sequential 模型的第一层
model = Sequential()
model.add(Dense(32, input_shape=(16,)))
# 现在模型就会以尺寸为 (*, 16) 的数组作为输入,
# 其输出数组的尺寸为 (*, 32)

# 在第一层之后,你就不再需要指定输入的尺寸了:
model.add(Dense(32))

(七)Dropout

说明:

Dropout 包括在训练中每次更新时, 将输入单元的按比率随机设置为 0, 这有助于防止过拟合。

原型:

keras.layers.Dropout(
rate, #在 0 和 1 之间浮动。需要丢弃的输入比例。
noise_shape=None, #1D 整数张量, 表示将与输入相乘的二进制 dropout 掩层的形状。
seed=None)#一个作为随机种子的 Python 整数。

例子:

model.add(Dropout(0.5))

(八)优化器Adam 

说明:

Adam 优化器。

默认参数遵循原论文中提供的值。

原型:

keras.optimizers.Adam(
lr=0.001, #学习率
beta_1=0.9, # 0到1之间,一般接近于1
beta_2=0.999, #0到1之间,一般接近于1,和beta_1一样,使用默认的就好
epsilon=None, #模糊因子,如果为空,默认为k.epsilon()
decay=0.0, #每次参数更新后学习率的衰减值(每次更新时学习率下降)
amsgrad=False)#布尔型,是否使用AMSGrad变体

例子:

adam = Adam(learning_rate=1e-4)