Keras使用方法

Keras建模流程

  • 准备数据(数据预处理)
    • 1、向量化
    • 2、值标准化
    • 3、处理缺失值
  • 构建模型
    • 1、使用Sequential类(仅类似于线性堆叠)
    • 2、使用函数式API
  • 编译模型
  • 训练模型
    • 1、model.fit()
    • 2、model.fit_generator()
  • 使用模型
    • 1、评估模型
    • 2、预测模型
  • 其他问题
    • 1、keras和tf.keras的区别
    • 2、回调模型和保存模型的区别
    • 3、steps_per_epoch、batch_size、epochs之间的关系
    • 4、离线训练,线上部署实例

准备数据(数据预处理)

数据预处理的目的是使原始数据更适用于神经网络处理,包括向量化、标准化、处理缺失值和特征提取

1、向量化

神经网络的所有输入和目标都必须是浮点数张量(在特定情况下可以是正数张量),无论处理什么数据都必须首先将其转换为张量。(比如使用one-hot编码)

2、值标准化

一般来说,将取值相对较大的数据或异质数据(一个数据的特征在0 ~ 1范围内,另一个特征在100 ~ 200)输入到神经网络是不安全的,输入数据应该具有以下特征:
(1)取值较小:大部分值都应该在0~1范围内
(2)同质性:所有特征的取值大概在相同的范围内
常用的标准化方法:
(1)将每个特征分别标准化,使其平均值为0
(2)将每个特征分别标准化,使其标准差为1

3、处理缺失值

构建模型

1、使用Sequential类(仅类似于线性堆叠)

以简单的两层网络为例

from keras import models
from keras import layers
model = model.Squential()
model.add(layers.Dense(32, activation='relu',input_shape=(784,)))
model.add(layers.Dense(10, activation='softmax'))

2、使用函数式API

用函数式API定义与上述相同模型

input_tensor = layers.Input(shape=(784,))
x = layers.Dense(32,activation = 'relu')(input_tensor)
output_tensor = layers.Dense(10,activation = 'softmax')(x)
model = models.Model(inputs=input_tensor, outputs=output_tensor )

编译模型

model.compile(optimizer = ‘’, loss = ‘’, metrics = ‘’)

训练模型

一旦模型构建完成了,使用的是Sequential还是函数式API就已经不重要了

1、model.fit()

输入为:
train_data
label_data

2、model.fit_generator()

输入为:
generator: 训练数据生成器,输出为(inputs,target)的元组
steps_per_epoch:整数,当生成器返回steps_per_epoch次数据时计一个epoch结束,执行下一个epoch
epochs:数据的迭代轮次
validation_data: 验证数据生成器,输出为(inputs,target)的元组
validation_steps=当validation_data为生成器时,本参数指定验证集的生成器返回次数
callbacks:回调函数,比如可以回调ModelCheckpoint保存模型结构和参数,边训练边保存
verbose:0 = 安静模式, 1 = 进度条, 2 = 每轮一行

使用模型

1、评估模型

model.evaluate()输入为测试数据和标签,输出为损失值和自定的指标(比如精确度acc)

2、预测模型

model.predict()输入为测试数据,输出为预测结果

其他问题

1、keras和tf.keras的区别

详细见https://www.zhihu.com/question/313111229

2、回调模型和保存模型的区别

model.save() 只能保存网络结构
model.save_weights() 只能保存网络权重
tf.keras.callbacks.ModelCheckpoint()则既能保存网络结构又能保存权重,可以在训练过程中保存模型

3、steps_per_epoch、batch_size、epochs之间的关系

batch_size:深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量。
epochs:1个epoch是所有训练样本的一轮正向传递和一轮反向传递,训练数据集总共有1000个样本。若batch_size=10,那么训练完全体样本集需要100次迭代即100步(steps_per_epoch),1次epoch。
steps_per_epoch:一轮epoch包含的步数(每一步是batch_size个数据送入)。若总共有100张训练图片,且batch_size批大小为50,则steps_per_epoch值为2。

4、离线训练,线上部署实例

下面给出的部分代码使用tf.keras离线搭建网络、编译、训练,并利用回调函数保存模型,然后在线上先加载模型进而利用测试数据集对模型进行评估。

input_bits = Input(shape=(payloadBits_per_OFDM * 2,))
temp = BatchNormalization()(input_bits)
temp = Dense(n_hidden_1, activation='relu')(input_bits)
temp = BatchNormalization()(temp)
temp = Dense(n_hidden_2, activation='relu')(temp)
temp = BatchNormalization()(temp)
temp = Dense(n_hidden_3, activation='relu')(temp)
temp = BatchNormalization()(temp)
out_put = Dense(n_output, activation='sigmoid')(temp)
model = Model(input_bits, out_put)
model.compile(optimizer='adam', loss='mse', metrics=[bit_err])
model.summary()
checkpoint = callbacks.ModelCheckpoint('./temp_trained_25.h5', monitor='val_bit_err',
                                       verbose=0, save_best_only=True, mode='min', save_weights_only=True)
model.fit_generator(
    training_gen(1000,25),      # 生成器,生成训练数据
    steps_per_epoch=50,         # 每轮步数 说明一共分为了1000/50=20个小批量
    epochs=100,
    validation_data=validation_gen(1000, 25),   # 生成器,生成验证数据
    validation_steps=1,
    callbacks=[checkpoint],     # 利用回调函数中odelCheckpoint的将模型参数存起来,路径在checkpoint中
    verbose=2)                  #  0 = 安静模式, 1 = 进度条, 2 = 每轮一行

########################## 离线  ##########################
model.load_weights('./temp_trained_25.h5')
y = model.evaluate(            
       validation_gen(1000),
        steps=1
    )
  

[1] https://blog.csdn.net/zhangphil/article/details/103438558
[2]https://blog.csdn.net/weixin_39274659/article/details/107748483
[3]Deep Learning with Python

你可能感兴趣的:(keras,深度学习,神经网络)