【tensorflow&flutter】自己写个机器学习模型用在项目上?

2024-01-08 17:32:28

背景

????????拍摄APP项目上线有一阵了,每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工,如果能有对未来的数据量的预测就好了 。

目标?

? ? ? 在端侧展示拍摄数据可视化趋势图等、并能推断数据(选择预测日期)?简单实现个demo

gif背景有点问题

先写总结?

? ?现在来看、出来的东西很简单,但是整个流程时串通起来了。至于什么是tensorflow lite?初识TensorFlow Lite -CSDN博客

? ? 总体流程图是这样的 从左侧的数据来源开始、到tensorflow 模型训练 到云上、动态下发、再到预测数据。生产数据的 再次收集数据运行的全流程正循环。 模型训练在本篇下方 其他后续写

一.数据处理

? ? 数据来源

? ? ?目前只有日志数据 以单个数据为维度的: 2023年x月x日 张某 所属部门 拍摄时间 等数据

? ?数据预处理?

? ? 通过pyhton 统计当日共拍摄多少套、都属于哪个部门

? ?数据清洗

? ? 去除前三天刚上线数据(不准)、和当日的数据(未统计完全)等特殊数据

? ?数据分析、抽取

? ? 根据数据判断? 不光跟当日部门数、时间、还有星期有关 比如 周五周六周天相对较高? 将星期也为参数。

? 输出关系图

sns.pairplot(train_dataset[["拍摄数量","事业部数量","weekday","index"]], diag_kind="kde")

? ? ? ? 拆分训练数据集和测试数据集

? ?拆除80%的数据进行训练、20%进行测试

train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)

从标签中分离特征

? ????????把预测值分离出来

????????train_labels = train_dataset.pop("拍摄数量")
????????test_labels = test_dataset.pop("拍摄数量")

?数据规范化

使用不同的尺度和范围对特征归一化是好的实践。尽管模型可能?在没有特征归一化的情况下收敛,它会使得模型训练更加复杂,并会造成生成的模型依赖输入所使用的单位选择。

就是将数据统一差不多的大小??

def norm(x):
  return (x - train_stats['mean']) / train_stats['std']
normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)

结果类似于

????????输入 :部门数 35? 星期? 3 日期?202

????????输出 :1.98? 0.0 1.768

???????但是要注意 之后预测数据时 也要统一化??????

二.构建模型

? ?构建

? ? 我们将会使用一个“顺序”模型,其中包含两个紧密相连的隐藏层,以及返回单个、连续值得输出层。

def build_model():
? model = keras.Sequential([
? ? layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())]),
? ? layers.Dense(64, activation='relu'),
? ? layers.Dense(1)
? ])

? optimizer = tf.keras.optimizers.RMSprop(0.001)

? model.compile(loss='mse',
? ? ? ? ? ? ? ? optimizer=optimizer,
? ? ? ? ? ? ? ? metrics=['mae', 'mse'])
? return model

????????训练?

# 通过为每个完成的时期打印一个点来显示训练进度
class PrintDot(keras.callbacks.Callback):
? def on_epoch_end(self, epoch, logs):
? ? if epoch % 100 == 0: print('')
? ? print('.', end='')

EPOCHS = 1000

history = model.fit(
? normed_train_data, train_labels,
? epochs=EPOCHS, validation_split = 0.2, verbose=0,
? callbacks=[PrintDot()])

预测值对比

????????最后进行预测值对比

error = test_predictions - test_labels
plt.hist(error, bins = 25)
plt.xlabel("Prediction Error [MPG]")
_ = plt.ylabel("Count")

第一篇完

????????tensorflow模型构建到此结束? 想看详细教程 ?官网链接icon-default.png?t=N7T8https://www.tensorflow.org/tutorials/keras/regression

后续写转tensorflow lite/部署方案、动态下发、端侧推断部分?

文章来源:https://blog.csdn.net/qq_36544007/article/details/135404222
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。