1.1. 基础层的介绍
1.1.1. Flatten
Flatten用来将输入“压平”,把多维的输入变成一维。常用在从卷积层到全连接层的过渡,特征全都变成1维就可以输入到全连接层中。Flatten不影响batch的大小。
通过keras.layers.Flatten
来引入。
比如通过卷积层的输出形状为(batch_size,output_channel,width,height),例如(16,64,32,32),通过Flatten
层之后变换成(16,6432\32)=(16,65536),不改变batch_size的大小。
1.1.2. Dense
Dense全连接层。
如果Dense是在第一层的话,需要指定output_dim和input_dim,即Dense(output_dim=64,input_dim=44)
。在Dense中的API中,看到其实没有input_dim或者input_shape这个参数,查看源码看到,input_dim和input_shape是在**kwargs中,因为并不是所有的Dense层都需要传入输入的形状,只有第一层需要。可以输入input_dim=44
,也可以是input_shape=(44,)
。一般都是用input_shape
注意:在input_shape中不包含batch的大小
如果Dense不是在第一层,则只需要指定output_dim,而input_dim则默认为上一层的输出维度。即Dense(output_dim=64)
如果需要激活函数,则需要再指定激活函数,例如Dense(64,avtivation='relu')
1.1.3. Embedding
Embedding只能作为模型的第一层。基本上用户自然语言处理方面,用来做词嵌入。
1.1.4. LSTM
LSTM传入的参数LSTM(batch_input_dim=(batch_size,time_steps,input_size),output_dim=cell_size,return_sequences=True,stateful=True)
其中
- input_dim是(batch_size,时间步的个数,每个时间步的特征个数)
- output_dim是LSTM中隐藏层单元的个数
- return_sequences默认是False,表示一个时间步长为T的序列,只在最后一个时间步输出一个结果,True表示每个时间步都输出一个结果,保留起来。
- stateful默认是False,表示这个batch与batch之间是不是有联系的,表示这个batch和下一个batch的状态是不是要连起来。
1.1.5. Merge层
Merge层提供了用于融合两个层或两个张量的方法,如果方法以大写字母开头,例如Add()
表示融合两个层,如果以小写字母开头,例如add()
表示融合两个张量。
通过以下来调用keras.layers.Add()或keras.layers.add()
例如
1 | import keras |
1.2. 训练
1 | model = Sequential() |
在训练的时候,有以下3种方法:fit,train_on_batch,fit_gen
- fit()
当使用fit()函数时,首先要保证2个条件:(1)训练数据可以完成的放在内存中,(2)数据已经不需要再做任何处理了,可以直接训练。 - train_on_batch()
train_on_batch()函数接收一个batch的输入和标签,然后反向传播,更新参数。大部分情况下都不需要用到train_on_batch(),例如cost = train_on_batch(train_x,train_y)
,返回值是误差
1.3. 模型构建
在keras中,一些简单的组件可以直接使用def来实现,在这个输入是input,直接使用某些层,得到输出,不使用model。
在实现整个模型的框架时,使用model = Model(input=input,output=output)
,然后return model
对于有些层,这个层在keras.layers
中没有,这时候就需要自己定义一个层,这个层中的参数需要自己定义。自定义层中的参数也是需要学习的。
1.4. Callbacks
传入fit()函数中的callbacks必须是一个list,里面是一个或多个callback实例。
1.4.1. ModelCheckpoint
回调函数Callbacks
是一组在训练阶段被调用的函数集,使用回调函数来查看训练过程中网络内部的状态和统计信息。在模型上调用fit()
函数时,可以将ModelCheckpoint
传递给训练过程。
训练深度学习模型时,Checkpoint
是模型的权重。ModelCheckpoint
回调类运行定义检查模型权重的位置,文件应如何命名,
1.4.2. EarlyStopping
EarlyStopping是Callbacks的一种,用于提前停止训练。停止训练的标准是当val_loss或者val_root_mean_square_error不再减少,或者val_acc不在增加。我们在训练模型时,主要目的是获得最好的泛化性能。模型的泛化能力通常使用验证集来评估。模型在训练的时候,模型在训练集上loss一直在变小,但是在验证集上的loss却是先变小后变大。说明出现了过拟合。解决过拟合的方法有2种方法:权重衰减和早停法。早停法就是模型在验证集上的表现开始下降时,停止训练。这样就可以避免过拟合的问题。