提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
TensorFlow Lite是一种用于设备端推断的开源深度学习框架,可帮助开发者在移动设备、嵌入式设备和IoT设备上运行TensorFlow模型,本篇文章将简要介绍利用tensorflow搭建Alexnet网络,并进行.tflite文件导出的过程,为后续在移动设备、嵌入式设备中使用.tflite文件进行后续开发做准备。
一、搭建Alexnet网络
使用tf中的keras API进行网络的搭建,tf中的keras API与keras存在一定的区别,tf作为一种静态计算流,在训练阶段具有较高的效率,但是对于用户而言,进行网络的搭建、修改等工作时,可使用性较低,kerase最初是谷歌的一位研究人员为了方便自己的研究而开发的一款简化深度学习操作的封装,允许工作人员灵活的构建网络,可用性较强,随后tf开发了针对于kerase的高级API,两者在功能上类似,但是在使用过程中要注意区分,否则有可能引发异常。
from tensorflow.keras import layers, models, Model, Sequential
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
import os
from PIL import Image
import numpy as np
import json
import matplotlib.pyplot as plt
def AlexNet(im_height=224, im_width=224, class_num=3): #class_num需要根据实际识别类别设置,宽高固定为224
# tensorflow中的tensor通道排序是NHWC
input_image = layers.Input(shape=(im_height, im_width, 3), dtype="float32")
x = layers.ZeroPadding2D(((1, 2), (1, 2)))(input_image)
x = layers.Conv2D(48, kernel_size=11, strides=4, activation="relu")(x)
x = layers.MaxPool2D(pool_size=3, strides=2)(x)
x = layers.Conv2D(128, kernel_size=5, padding="same", activation="relu")(x)
x = layers.MaxPool2D(pool_size=3, strides=2)(x)
x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x)
x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x)
x = layers.Conv2D(128, kernel_size=3, padding="same", activation="relu")(x)
x = layers.MaxPool2D(pool_size=3, strides=2)(x)
x = layers.Flatten()(x)
x = layers.Dropout(0.2)(x)
x = layers.Dense(2048, activation="relu")(x)
x = layers.Dropout(0.2)(x)
x = layers.Dense(2048, activation="relu")(x)
x = layers.Dense(class_num)(x)
predict = layers.Softmax()(x)
model = models.Model(inputs=input_image, outputs=predict)
return model
###################################################
######## train