Python keras
(一)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)
(九)compile
说明:
用于配置训练模型。
原型:
compile( optimizer, #字符串(优化器名)或者优化器实例。 loss=None, #字符串(目标函数名)或目标函数。 metrics=None, #在训练和测试期间的模型评估标准。 通常你会使用 metrics = ['accuracy']。 loss_weights=None, #可选的指定标量系数(Python 浮点数)的列表或字典, 用以衡量损失函数对不同的模型输出的贡献。 sample_weight_mode=None, #如果你需要执行按时间步采样权重(2D 权重),请将其设置为 temporal。 weighted_metrics=None, # 在训练和测试期间,由 sample_weight 或 class_weight 评估和加权的度量标准列表。 target_tensors=None)#默认情况下,Keras 将为模型的目标创建一个占位符,在训练过程中将使用目标数据。
例子:
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])
(十)layers.Input()
说明:
用于构建网络的第一层——输入层,该层会告诉网络我们的输入的尺寸是什么
原型:
layers.Input( shape=None,#输入的形状,tuple类型。不含batch_size;tuple的元素可以为None类型数据,表示未知的或者说任意的,一般这里不用None batch_size=None,#声明输入的batch_size大小,一般会在预测时候用,训练时不需要声明,会在fit时声明,即dataset类型数据声明了batch_size name=None,#给layers起个名字,在整个网络中不能出现重名。如果name=None,则系统会自动为该层创建名字。 dtype=None,#数据类型,在大多数时候,我们需要的数据类型为tf.float32,因为在精度满足的情况下,float32运算更快。 sparse=False,#true/false ,指定数据是否为系数向量 tensor=None,#指定一个已存在的tensor 传给Input ragged=False,# **kwargs,# )
例子:
x_in = layers.Input(shape=(32, 32, 1))
(十一)summary
说明:
打印显示网络结构和参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了