深一网站建设招聘,wordpress招聘,服装网站建设竞争对手调查分析,做刷票的网站知识要点
keras 保存成hdf5文件, 1.保存模型和参数, 2.只保存参数
1.保存模型和参数 save_modelcallback ModelCheckpoint2. 只保存参数 save_weightscallback ModelCheckpoint save_weights_only True
保存模型:
案例数据: Fashion-MNIST总共有十个类别的图像model.save_w…知识要点
keras 保存成hdf5文件, 1.保存模型和参数, 2.只保存参数
1.保存模型和参数 save_modelcallback ModelCheckpoint2. 只保存参数 save_weightscallback ModelCheckpoint save_weights_only True
保存模型:
案例数据: Fashion-MNIST总共有十个类别的图像model.save_weights(os.path.join(logdir, fashion_mnist_weights_2.h5)) # 保存参数的方法加载参数: model.load_weights(os.path.join(logdir, fashion_mnist_weight.h5))保存模型: model.save(os.path.join(logdir, fashion_mnist_model.h5))加载模型: model2 keras.models.load_model(os.path.join(logdir, fashion_mnist_model.h5))把keras模型保存成savedmodel格式: tf.saved_model.save(model, ./keras_saved_model)一 模型保存和部署
TFLite是为了将深度学习模型部署在移动端和嵌入式设备的工具包可以把训练好的TF模型通过转化、部署和优化三个步骤达到提升运算速度减少内存、显存占用的效果。TFlite主要由Converter和Interpreter组成。Converter负责把TensorFlow训练好的模型转化并输出为.tflite文件FlatBuffer格式。转化的同时还完成了对网络的优化如量化。Interpreter则负责把.tflite部署到移动端嵌入式embedded linux device和microcontroller并高效地执行推理过程同时提供API接口给PythonObjective-CSwiftJava等多种语言。简单来说Converter负责打包优化模型Interpreter负责高效易用地执行推理。 Fashion-MNIST总共有十个类别的图像。每一个类别由训练数据集6000张图像和测试数据集1000张图像。所以训练集和测试集分别包含60000张和10000张。测试训练集用于评估模型的性能。 每一个输入图像的高度和宽度均为28像素。数据集由灰度图像组成。Fashion-MNIST,中包含十个类别分别是t-shirttrouser,pillover,dress,coat,sandal,shirt,sneaker,bag,ankle boot。
1.1 模型创建
导包
# 导包
from tensorflow import keras
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
时尚数据导入
# 时尚数据导入
fashion_mnist keras.datasets.fashion_mnist
(x_train_all, y_train_all), (x_test, y_test) fashion_mnist.load_data()
x_valid, x_train x_train_all[:5000], x_train_all[5000:]
y_valid, y_train y_train_all[:5000], y_train_all[5000:]
标准化
# 标准化
from sklearn.preprocessing import StandardScaler # preprocessing 预处理
scaler StandardScaler()x_train_scaled scaler.fit_transform(x_train.astype(np.float32).reshape(-1, 784))
x_valid_scaled scaler.fit_transform(x_valid.astype(np.float32).reshape(-1, 784))
x_test_scaled scaler.fit_transform(x_test.astype(np.float32).reshape(-1, 784))
创建模型
# 创建模型
model keras.models.Sequential([keras.layers.Dense(512, activation relu, input_shape (784, )),keras.layers.Dense(256, activation relu),keras.layers.Dense(128, activation relu),keras.layers.Dense(10, activation softmax)])model.compile(loss sparse_categorical_crossentropy,optimizer adam,metrics [accuracy])
1.2 保存模型
# 保存模型
import os
logdir ./graph_def_and_weights
if not os.path.exists(logdir):os.mkdir(logdir)output_model_file os.path.join(logdir, fashion_mnist_weight.h5)
callbacks [keras.callbacks.TensorBoard(logdir), # 保存地址# 保存效果最好的模型: save_best_onlykeras.callbacks.ModelCheckpoint(output_model_file, save_best_only True, save_weights_only True),keras.callbacks.EarlyStopping(patience 5, min_delta 1e-3)] history model.fit(x_train_scaled, y_train, epochs 10,validation_data (x_valid_scaled, y_valid),callbacks callbacks) 保存模型
# 保存模型
output_model_file2 os.path.join(logdir, fashion_mnist_model.h5)
model.save(output_model_file2) 保存参数
# 另一种保存参数的方法
model.save_weights(os.path.join(logdir, fashion_mnist_weights_2.h5))
模型评估
# evaluate 评估
model.evaluate(x_valid_scaled, y_valid) # [0.35909169912338257, 0.88919997215271]
模型加载
# 加载模型
model2 keras.models.load_model(output_model_file2)
model2.evaluate(x_valid_scaled, y_valid) # [0.35909169912338257, 0.88919997215271]
二 保存模型为savemodel格式
# 把keras模型保存成savedmodel格式
tf.saved_model.save(model, ./keras_saved_model) 读取模型
# 加载savedmodel模型
loaded_saved_model tf.saved_model.load(./keras_saved_model)
loaded_saved_model 2.1 另一种保存
# 保存模型
import os
logdir ./graph_def_and_weights
if not os.path.exists(logdir):os.mkdir(logdir)output_model_file os.path.join(logdir, fashion_mnist_weight.h5)
model.load_weights(output_model_file)
三 tflite_interpreter 的使用
导包
from tensorflow import keras
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
import os
with open(./tflite_models/concrete_func_tf_lite, rb) as f:concrete_func_tflite f.read()
创建interpreter
# 创建interpreter
interpreter tf.lite.Interpreter(model_content concrete_func_tflite)
# 分配内存
interpreter.allocate_tensors()
input_details interpreter.get_input_details()
output_details interpreter.get_output_details()
预测数值
input_data tf.constant(np.ones(input_details[0][shape], dtype np.float32))
# 传入预测数据
interpreter.set_tensor(input_details[0][index], input_data)# 执行预测
interpreter.invoke()# 获取输出
output_results interpreter.get_tensor(output_details[0][index])
print(output_results)
四 to_concrete_function
加载文件
# 从文件加载
loaded_keras_model keras.models.load_model(./graph_def_and_weights/fashion_mnist_model.h5)
loaded_keras_model(np.ones((1, 784))) 把keras模型转化为concrete function
# 把keras模型转化为concrete function
run_model tf.function(lambda x: loaded_keras_model(x))
keras_concrete_func run_model.get_concrete_function(tf.TensorSpec(loaded_keras_model.inputs[0].shape,loaded_keras_model.inputs[0].dtype))
# 使用
keras_concrete_func(tf.constant(np.ones((1, 784), dtype np.float32))) 五 to_quantized_tflite
5.1 keras to tflite
# 从文件加载
loaded_keras_model keras.models.load_model(./graph_def_and_weights/fashion_mnist_model.h5)
loaded_keras_model
# lite 精简版模型 # 创建转化器
keras_to_tflite_converter tf.lite.TFLiteConverter.from_keras_model(loaded_keras_model)
keras_to_tflite_converter
# 给converter添加量化的优化 # 把32位的浮点数变成8位整数
keras_to_tflite_converter.optimizations [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]# 执行转化
keras_tflite keras_to_tflite_converter.convert()
# 写入指定文件
import os
if not os.path.exists(./tflite_models):os.mkdir(./tflite_models)with open(./tflite_models/quantized_keras_tflite, wb) as f:f.write(keras_tflite)
5.2 concrete function to tflite
# 把keras模型转化成concrete function
run_model tf.function(lambda x: loaded_keras_model(x))
keras_concrete_func run_model.get_concrete_function(tf.TensorSpec(loaded_keras_model.inputs[0].shape,loaded_keras_model.inputs[0].dtype))
concrete_func_to_tflite_converter tf.lite.TFLiteConverter.from_concrete_functions([keras_concrete_func])
concrete_func_to_tflite_converter.optimizations [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
concrete_func_tflite concrete_func_to_tflite_converter.convert()
with open(./tflite_models/quantized_concrete_func_tf_lite, wb) as f:f.write(concrete_func_tflite)
5.3 saved_model to tflite
saved_model_to_tflite_converter tf.lite.TFLiteConverter.from_saved_model(./keras_saved_model/)
saved_model_to_tflite_converter.optimizations [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
saved_model_tflite saved_model_to_tflite_converter.convert()
with open(./tflite_models/quantized_saved_model_tflite, wb) as f:f.write(saved_model_tflite)