欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Keras使用方法

时间:2023-04-23
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 modelsfrom keras import layersmodel = 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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。