keras基础知识

最近看到keras容易上手,封装比较好,学习一下

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
2
3
4
5
6
7
8
9
10
11
import keras

input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于added = keras.layers.add([x1, x2])
added = keras.layers.Add()([x1, x2])

out = keras.layers.Dense(4)(added)
model = keras.models.Model(inputs=[input1, input2], outputs=out)

1.2. 训练

1
2
3
4
5
6
7
8
9
10
11
12
model = Sequential()
model.add()
....
model.compile(optimizer='adam',loss='mean_squared_error',metric=['mse'])

model.fit(train_x,train_y,epochs=1000,batch_size=32)

#对测试集进行验证loss或metric
model.evaluate(test_x,test_y,batch_size=16)

#对测试集输出预测的结果。
model.predict(test_x)

在训练的时候,有以下3种方法:fit,train_on_batch,fit_gen

  1. fit()
    当使用fit()函数时,首先要保证2个条件:(1)训练数据可以完成的放在内存中,(2)数据已经不需要再做任何处理了,可以直接训练。
  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种方法:权重衰减和早停法。早停法就是模型在验证集上的表现开始下降时,停止训练。这样就可以避免过拟合的问题。

打赏
0%