- 在numpy, tensorflow, keras等诸多python库中,都定义了张量的axis
- axis理解为维度的角标
- 类似于sum, max函数,axis=n则意味着结果中的第n维消失,也就是说对第n维进行了降维操作。
- 举例:a.shape = [m,n,p,q],则: a.sum(axis = 0).shape = [1,n,p,q] a.sum(axis = 1).shape = [m,1,p,q] ...
- axis=-1表示张量的最后一个维度
- 与sort相关的axis, 分为以下情况: axis = None, 表示将张量flatten为一维的之后进行排序 axis = n, 表示沿着第n维度看去,其他维度是从小到大有序排列的
model.summary()
model.get_config():返回模型配置信息的字典
model.get_layer()
model.get_weights()
model.set_weights()
model.to_json() ←→ model_from_json()
model.to_yaml() ←→ model_from_yaml()
model.save_weights()
model.load_weights()
model = keras.models.Sequential()
model.add(...)
model.pop(): 弹出模型的最后一层
model.compile()
model.fit():validation_split的划分在shuffle之前,所以如果数据本身有序,则需要先手动shuffle,然后在validation_split;因为model.fit()的shuffle是只针对切分后所得的训练集生效的。
model.evaluate()
model.predict():输出预测的类别
model.predict_proba():输出预测类别的概率
model.train_on_batch():在一个batch的样本上进行训练
model.test_on_batch():在一个batch的样本上进行评估
model.predict_on_batch():在一个batch的样本上进行预测
model.fit_generator()
model.evaluate_generator()
model.predict_generator()
model = Model()
model.layers
model.inputs
model.outputs
model = LSTM(32) 单个输出:model.output 多个输出:model.get_output_at(1) ...
Dense(·)
Activation(·)
Dropout(·)
Flatten(·):常用于卷积层到全连接层的过渡
Reshape(·):将输入转换为特定的shape,指定shape时,可以使用-1代替其中一个维度
Permute(·):将输入张量按指定模式进行维度的重排
RepeatVector(·): 将输入重复若干次
Lambda(·):用户自定义的函数
ActivityRegularizer(·):数据不会发生任何变化,但会基于激活值更新损失函数
Masking(·):指定mask_value,当张量某一维度的数值均为该数值时,则会被屏蔽,之后的网络层都看不到mask部分的数据
Initializer():kernel_initializer, bias_initializer
Regularizer():kernel_regularizer, bias_regularizer, activity_regularizer
Constraints():kernel_constraints, bias_constraints
Conv1D:一维卷积
Conv2D:二维卷积
SeparableConv2D:可分离卷积,加上:
depthwise_(regularizer/constraint)
pointwise_(regularizer/constraint)
Conv2DTranspose:二维反卷积
Conv3D:三维卷积
Cropping1D:一维裁剪,需指定两端要裁剪的元素数
Cropping2D:二维裁剪,需指定宽和高方向上两端裁剪的元素数
Cropping3D:二维裁剪,三个维度上需要裁剪的元素数
UpSampling1D:对一维数据上采样,相当于对元素重复size次
UpSampling2D:对二维数据上采样,相当于对元素在两个方向上分别重复size[0]和size[1]次
UpSampling3D:对三维数据上采样,同上原理
ZeroPadding1D:一维填充0
ZeroPadding2D:二维填充0,可在不同维度填充不同数量的0
ZeroPadding3D:三维填充0
MaxPooling1D
MaxPooling2D
MaxPooling3D
AveragePooling1D
AveragePooling2D
AveragePooling3D
GlobalMaxPooling1D
GlobalAveragePooling1D
GlobalMaxPooling2D
GlobalAveragePooling2D
LocallyConnected1D:与Conv1D的区别在于,不进行权值共享,不同位置的滤波器是不一样的
LocallyConnected2D
Recurrent:抽象类,无法实例化任何对象
SimpleRNN:recurrent_(regularizer, initializer, constraints, dropout)
GRU:门限循环单元
LSTM:长短期记忆模型
Embedding:只能作为模型的第一层
embeddings_(initializer,regularizer,constraint)
merge.Add ------> add
merge.Multiply ------> multiply
merge.Average ------> average
merge.Maximum ------> maximum
merge.Concatenate ------> concatenate
merge.Dot ------> dot
LeakyReLU: 修正线性单元 alpha代表第三象限的斜率
PReLU: 参数线性单元 alpha是可变的(参数化的),有alpha_(initializer,regularizer,constraint)
ELU: 指数线性单元 alpha为参数
ThresholdedReLU:带有门限的ReLU theta为参数,代表门限
BatchNormalization: 在每个batch上将前一层激活值重新规范化,使得均值接近于0,标准差接近于1
超参数: momentum, epsilon
训练参数: {beta, gamma}_{initializer, regularizer}, {moving_mean, moving_variance}_initializer
GaussianNoise: 为数据加噪(加性高斯噪声),克服过拟合
去噪自动编码器,试图从加噪输入中重构无噪声信号
GaussianDropout: 正则化层,在训练时才有效
TimeDistributed: 把一个层应用到输入的每个时间步上,输入至少为3D张量
Bidirectional: 双向RNN的封装器
merge_mode:前向和后向RNN输出的结合方式,默认为concat拼接,其余还包含:
sum、mul、concat、ave、None
简单的自定义层可以使用layers.core.Lambda
复杂的自定义层需要定义类,并包含是三个方法(method):
build(input_shape), call(x), compute_output_shape(input_shape)
pad_sequences(): 指定maxlen后,可以对序列进行裁剪(truncating)或补齐(padding),补齐还可以指定补齐的value
注意函数在执行内部操作时,是先进行裁剪,然后进行补齐
skipgrams(): 提取跳字样本
make_sampling_table:生成序列抽样概率表,获得的是抽样概率表,在文本预料中出现概率越高的词,对应的采样频率应该越低
text_to_word_sequence: 将一个句子拆分成单词构成的序列
one_hot: 将一段文本编码为整数数组,每个整数编码一个词(唯一性无法保证)
Tokenizer类:用于向量化文本的类
方法
fit_on_texts: 输入用于训练文本列表
texts_to_sequences: 输入待转为序列的文本列表
texts_to_sequences_generator:上面函数的生成器版本
texts_to_matrix:输入待向量化的文本,及向量化的方式
fit_on_sequences: 输入要训练的序列列表
sequences_to_matrix: 输入待向量化的序列列表
属性
word_counts: 字典形式,每个单词对应出现的次数
word_docs: 字典形式,每个单词出现的文档数
word_index: 单词索引
document_count: 文档数目
ImageGenerator类:用于不断生成一个batch的数据
支持数据增强:均值化、白化;图像的旋转、平移、伸缩与翻转,防止过拟合
参数很多
方法
fit: 均值化、白化时需要使用此函数
flow: 不断返回batch数据
flow_from_directory: 在无限循环中产生batch数据
对于一个深度学习项目,需要系统考虑以下几个因素:
常用的损失函数
mae, mse
{binary,categorical,spare_categorical}_{crossentropy}
常用的模型评估指标 (keras.metrics)
一般分类: binary_accuracy, binary_crossentropy
categorical_accuracy, categorical_crossentropy
稀疏分类: sparse_categorical_accuracy
sparse_categorical_crossentropy
模糊评估: top_k_categorical_accuracy
SGD: 随机梯度下降
Adagrad: 自适应梯度下降
Adadelta: 对Adagrad的扩展
RMSprop: 均方根后向传播,对于RNN效果较好
Adam: 自适应动量估计,目前在各方面表现都较好
Adamax: Adam的衍生版
Nadam: Adam的衍生版
常选择:RMSprop, Adam和Nadam的某一种优化方法
一般激活函数(keras.activations): 常用softmax, ReLU, sigmoid和tanh
softmax
ReLU
ELU
softplus
Sigmoid
softsign
tanh: 收敛比sigmoid更快
linear
高级激活函数(keras.advanced_activations):
LeakyReLU
PReLU
ELU
可以使用keras.backend可以自定义激活函数
Zeros: 全0初始化,效果极差,慎用
Ones: 全1初始化
Constant: 固定值初始化
RandomNormal: 正态分布随机初始化
RandomUniform: 均匀分布随机初始化
TrunctedNormal: 截尾高斯分布初始化(限定在2σ范围以内)
VarianceScaling:方差缩放初始化
Orthogonal: 随机正交矩阵的初始化(正交矩阵的乘性系数)
Identity: 二维矩阵的初始化(乘性系数)
lecun_uniform: LeCun均匀分布初始化方法
glorot_uniform: Glorot/Xavier均匀分布初始化
glorot_normal: Glorot/Xavier正态分布初始化
He_uniform: He均匀分布初始化
he_normal: He正态分布初始化
可以使用keras.backend可以自定义初始化方法
Regularizer正则对象
l1: L1范数正则化
l2: L2范数正则化
l1_l2: L1和L2范数正则化同时
可以使用keras.backend可以自定义正则项
max_norm: 最大范数(模)约束
non_neg: 非负性约束
unit_norm: 单位范数约束,强制张量最后一个axis拥有单位范数
min_max_norm: 强制norm在一个区间内
keras使用回调观察训练过程网络内部的状态和统计信息,传递到模型的fit中
on_{train,epoch,batch}_{begin,end}:共六种调用方式
在每个epoch累加性能评估,在每个keras模型都会被自动调用
将metrics指定的监视指标输出,也会被自动调用
model.fit()的返回值,返回一些历史的汇总信息
保存模型到filepath,默认格式为科学数据常用的hdf5格式
检测值不再改善时,提前终止训练
想服务器发送事件流
参数是一个关于epoch号的函数,该函数返回值对应每个epoch设置的学习率
可视化工具,根据参数设定可视化要求后,作为model.fit/fit_generator中参数callbacks的值即可
评价指标不再提升时,减少学习率
将每次epoch训练结果保存在csv中
创建简单的callback的匿名函数
model = Model() #某个模型
model.save(filepath)
model.save_weights()
model.to_json()
model.to_yaml()
load_model(filepath)
load_weights()
model_from_json()
model_from_yaml()
keras.wrappers.scikit-learn.KerasClassifier: 分类器的接口
keras.wrappers.scikit-learn.KerasRegressor: 回归器的接口
KerasClassifier和KerasRegressor都可以使用sklearn的GridSearchCV等参数优化函数
from keras.utils import plot_model
plot_model(model, to_file = "model.png") # show_shapes, show_layer_names
form keras.utils.vis_utils import model_to_dot
model_to_dot(model).create(prog = "dot", format = "svg") # 得到的是pydot.Graph对象