汽车状态分类器代码详解(未完待续)
先是data_processing文件import pandas as pd from urllib.request import urlretrieve def load_data(downloadTrue): # download data from : http://archive.ics.uci.edu/ml/datasets/CarEvaluation if download: data_path, _ urlretrieve(http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data, car.csv) print(Downloaded to car.csv) # use pandas to view the data structure col_names [buying, maint, doors, persons, lug_boot, safety, class] data pd.read_csv(car.csv, namescol_names) return data def convert2onehot(data): # covert data to onehot representation return pd.get_dummies(data, prefixdata.columns) if __name__ __main__: data load_data(downloadTrue) new_data convert2onehot(data) print(data.head()) print(\nNum of data: , len(data), \n) # 1728 # view data values for name in data.keys(): print(name, pd.unique(data[name])) print(\n, new_data.head(2)) new_data.to_csv(car_onehot.csv, indexFalse)1.pd.read_csv功能给数据添加一行列索引也就是横在数据上面的表头返回一个诡异的数据类型data: class ‘pandas.core.frame.DataFrame’col_names [buying, maint, doors, persons, lug_boot, safety, class] data pd.read_csv(car.csv, namescol_names)2.get_dummies(data, prefixdata.columns)pandas的功能真的很强大可以直接以data.columns为标准生成独热码形式https://blog.csdn.net/qq_35290785/article/details/91415240return pd.get_dummies(data, prefixdata.columns)3.data.head()读取前五行数据https://blog.csdn.net/qq_18649781/article/details/89033749print(data.head())4.pd.unique用法自己琢磨把…for name in data.keys(): print(name, pd.unique(data[name]))5.to_csvdt.to_csv() #默认dt是DataFrame的一个实例indexFalse表示不保留行索引也就是不保留最左侧的竖列索引new_data.to_csv(car_onehot.csv, indexFalse)综上所述data_processing代码完成了one-hot的csv文件的建立接下来 我们来看model文件import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import data_processing data data_processing.load_data(downloadTrue) new_data data_processing.convert2onehot(data) # prepare training data new_data new_data.values.astype(np.float32) # change to numpy array and float32 np.random.shuffle(new_data) sep int(0.7*len(new_data)) train_data new_data[:sep] # training data (70%) test_data new_data[sep:] # test data (30%) # build network tf_input tf.placeholder(tf.float32, [None, 25], input) tfx tf_input[:, :21] tfy tf_input[:, 21:] l1 tf.layers.dense(tfx, 128, tf.nn.relu, namel1) l2 tf.layers.dense(l1, 128, tf.nn.relu, namel2) out tf.layers.dense(l2, 4, namel3) prediction tf.nn.softmax(out, namepred) loss tf.losses.softmax_cross_entropy(onehot_labelstfy, logitsout) accuracy tf.metrics.accuracy( # return (acc, update_op), and create 2 local variables labelstf.argmax(tfy, axis1), predictionstf.argmax(out, axis1))[1] opt tf.train.GradientDescentOptimizer(learning_rate0.1) train_op opt.minimize(loss) sess tf.Session() sess.run(tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())) # training plt.ion() fig, (ax1, ax2) plt.subplots(1, 2, figsize(8, 4)) accuracies, steps [], [] for t in range(4000): # training batch_index np.random.randint(len(train_data), size32) sess.run(train_op, {tf_input: train_data[batch_index]}) if t % 50 0: # testing acc_, pred_, loss_ sess.run([accuracy, prediction, loss], {tf_input: test_data}) accuracies.append(acc_) steps.append(t) print(Step: %i % t,| Accurate: %.2f % acc_,| Loss: %.2f % loss_,) # visualize testing ax1.cla() for c in range(4): bp ax1.bar(c0.1, heightsum((np.argmax(pred_, axis1) c)), width0.2, colorred) bt ax1.bar(c-0.1, heightsum((np.argmax(test_data[:, 21:], axis1) c)), width0.2, colorblue) ax1.set_xticks(range(4), [accepted, good, unaccepted, very good]) ax1.legend(handles[bp, bt], labels[prediction, target]) ax1.set_ylim((0, 400)) ax2.cla() ax2.plot(steps, accuracies, labelaccuracy) ax2.set_ylim(ymax1) ax2.set_ylabel(accuracy) plt.pause(0.01) plt.ioff() plt.show()1.tf.nn.softmax将所选择的一维数组归一化也就是把每一个元素都变成0-1之间的数字2.tf.metrics.accuracytf.metrics.accuracy返回两个值accuracy为到上一个batch为止的准确度update_op为更新本批次后的准确度。https://blog.csdn.net/lyb3b3b/article/details/83047148因为有局部变量所以要初始化局部变量sess.run(tf.local_variables_initializer())这就是为什么最后有初始化局部变量的原因3.plt.ion()打开交互模式若想动态显示图像则需要使用交互interactive模式。https://www.cnblogs.com/wmy-ncut/p/10172601.html4.plt.subplots前两个数字是子图的行列数figsize(8, 4)估计就是确定figure的大小fig, (ax1, ax2) plt.subplots(1, 2, figsize(8, 4))5.numpy.random.randint(low, highNone, sizeNone, dtype‘l’)函数的作用是返回一个随机整型数范围从低包括到高不包括即[low, high)。如果没有写参数high的值则返回[0,low)的值。size: int or tuple of ints(可选)输出随机数的尺寸比如size (m * n* k)则输出同规模即m * n* k个随机数。默认是None的仅仅返回满足要求的单一随机数。https://blog.csdn.net/u011851421/article/details/83544853即整数生成随机元素的个数或者元组数组的行和列也就是这里生成的是array([1,5,6,8,4,3…]) 共32个元素batch_index np.random.randint(len(train_data), size32)6.现在不用feed_dict{}这种形式了用sess.run(train_op, {tf_input: train_data[batch_index]})7.ax1.cla()plt.cla() # 清除axes轴即清楚当前 figure 中的活动的axes但其他axes保持不变。暂时存疑8.ax1.barhttps://blog.csdn.net/liangzuojiayi/article/details/78187704leftx轴的位置序列一般采用arange函数产生一个序列heighty轴的数值序列也就是柱形图的高度一般就是我们需要展示的数据alpha透明度width为柱形图的宽度一般这是为0.8即可color或facecolor柱形图填充的颜色edgecolor图形边缘颜色label解释每个图像代表的含义linewidth or linewidths or lw边缘or线的宽度bp ax1.bar(c0.1, heightsum((np.argmax(pred_, axis1) c)), width0.2, colorred)后面的先不写了matplotlib有点麻烦补充1.dataframe格式建立https://blog.csdn.net/qq_39161737/article/details/78866399https://blog.csdn.net/weixin_40240670/article/details/80506402加入了save并且单独摘2个测试 data_processing:import pandas as pd from urllib.request import urlretrieve import numpy as np def load_data(downloadTrue): # download data from : http://archive.ics.uci.edu/ml/datasets/CarEvaluation if download: data_path, _ urlretrieve(http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data, car.csv) print(Downloaded to car.csv) # use pandas to view the data structure col_names [buying, maint, doors, persons, lug_boot, safety, class] data pd.read_csv(car.csv, namescol_names) data_test pd.read_csv(car_test.csv, namescol_names) # print(data_test) #class pandas.core.frame.DataFrame return data, data_test def convert2onehot(data, train): # covert data to onehot representation if train True: print(type(pd.get_dummies(data, prefixdata.columns))) return pd.get_dummies(data, prefixdata.columns) else: x [[0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0],[0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0]] return pd.DataFrame(x) if __name__ __main__: data, data_test load_data(downloadTrue) new_data convert2onehot(data, trainTrue) new_data_test convert2onehot(data_test, trainFalse) # new_data_test new_data_test.values.astype(np.float32) # print(自己建立的是, new_data_test) # print(new:, new_data) print(data.head()) print(\nNum of data: , len(data), \n) # 1728 也就是1728行 # view data values for name in data.keys(): print(name, pd.unique(data[name])) print(\n, new_data.head(2)) new_data.to_csv(car_onehot.csv, indexFalse) # new_data_test.to_csv(car_onehot_test.csv, indexFalse)model:import numpy as np import tensorflow as tf import matplotlib.pyplot as plt import data_processing import os tf.app.flags.DEFINE_integer(is_train, 2, 指定是否是训练模型还是拿数据去预测) FLAGS tf.app.flags.FLAGS data, data_test data_processing.load_data(downloadTrue) new_data data_processing.convert2onehot(data, trainTrue) new_data_test data_processing.convert2onehot(data, trainFalse) # prepare training data new_data new_data.values.astype(np.float32) # change to numpy array and float32 转换为numpy数组形式并规定为浮点数 new_data_test new_data_test.values.astype(np.float32) #print(打印, new_data) np.random.shuffle(new_data) sep int(0.7*len(new_data)) train_data new_data[:sep] # training data (70%) test_data new_data[sep:] # test data (30%) realtest_data new_data_test[::] np.random.shuffle(new_data_test) # build network tf_input tf.placeholder(tf.float32, [None, 25], input) #其中最后4个是汽车状态评价 tfx tf_input[:, :21] tfy tf_input[:, 21:] # tfx_test tf_input[:, :21] # tfy_test tf_input[:, 21:] l1 tf.layers.dense(tfx, 128, tf.nn.relu, namel1) l2 tf.layers.dense(l1, 128, tf.nn.relu, namel2) out tf.layers.dense(l2, 4, namel3) prediction tf.nn.softmax(out, namepred) # print(prediction:, prediction) loss tf.losses.softmax_cross_entropy(onehot_labelstfy, logitsout) accuracy tf.metrics.accuracy( # return (acc, update_op), and create 2 local variables labelstf.argmax(tfy, axis1), predictionstf.argmax(out, axis1))[1] opt tf.train.GradientDescentOptimizer(learning_rate0.1) train_op opt.minimize(loss) #进行模型保存 # (2)收集要显示的变量 # 先收集损失和准确率 tf.summary.scalar(losses, loss) tf.summary.scalar(accuracy, accuracy) # (3)合并所有变量op merged tf.summary.merge_all() # 创建模型保存与加载 saver tf.train.Saver() with tf.Session() as sess: sess.run(tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())) # (1)创建一个events文件实例 file_writer tf.summary.FileWriter(./tmp/summary2/, graphsess.graph) # 加载模型 if os.path.exists(./tmp/modelckpt2/checkpoint): saver.restore(sess, ./tmp/modelckpt2/cnn_model) # 注意modelckpt2这个文件夹要自己建立 # 也就是说 模型保存和加载的时候 也就是saver.save或saver.restore的路径需要自己建立 否则会蓝屏 # 但是创建envents实例化的路径可以不用自己建立 # trainingtest1 if FLAGS.is_train 1: accuracies, steps [], [] for t in range(4000): # training batch_index np.random.randint(len(train_data), size32) #生成32个随机数返回array数组 sess.run(train_op, {tf_input: train_data[batch_index]}) #注意feeddict可以不用了 # 运行合变量op写入事件文件当中 summary sess.run(merged, {tf_input: train_data[batch_index]}) file_writer.add_summary(summary, t) if t % 2 0: saver.save(sess, ./tmp/modelckpt2/cnn_model) if t % 50 0: # testing acc_, pred_, loss_ sess.run([accuracy, prediction, loss], {tf_input: test_data}) accuracies.append(acc_) steps.append(t) print(Step: %i % t,| Accurate: %.2f % acc_,| Loss: %.2f % loss_,) # test2 else: for t in range(2): # training batch_index np.random.randint(len(realtest_data), size1) # sess.run(train_op, {tf_input_test: test_real[batch_index]}) acc_, pred_, loss_ sess.run([accuracy, prediction, loss], {tf_input: realtest_data[batch_index]}) print(真实值为, sess.run(tf.argmax(realtest_data[batch_index][:, 21:], axis1))) print(预测值为, sess.run(tf.argmax(pred_, axis1)))

相关新闻

Adobe GenP 3.0终极方案:跨版本激活Adobe Creative Cloud的深度解析

Adobe GenP 3.0终极方案:跨版本激活Adobe Creative Cloud的深度解析

Adobe GenP 3.0终极方案:跨版本激活Adobe Creative Cloud的深度解析 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在数字创意领域,Adobe C…

2026/9/19 13:49:24 阅读更多 →
手语翻译革命:用AI打破无声世界的沟通壁垒

手语翻译革命:用AI打破无声世界的沟通壁垒

手语翻译革命:用AI打破无声世界的沟通壁垒 【免费下载链接】Sign-Language-Interpreter-using-Deep-Learning A sign language interpreter using live video feed from the camera. 项目地址: https://gitcode.com/gh_mirrors/si/Sign-Language-Interpreter-usi…

2026/9/18 21:09:08 阅读更多 →
工程车辆识别挖掘机推土机洒水车压路机等识别分割数据集labelme格式3823张13类别

工程车辆识别挖掘机推土机洒水车压路机等识别分割数据集labelme格式3823张13类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):3823标注数量(json文件个数):3823标注类别数:13标注类别名称:["articulated_truck","backhoe_loader&…

2026/9/18 14:24:13 阅读更多 →

最新新闻

微信开发者工具安装全指南:版本选择、环境配置与高频报错解决

微信开发者工具安装全指南:版本选择、环境配置与高频报错解决

很多人来问我微信开发者工具到底怎么装,说实话这问题看起来简单,但翻车率比我预想的高得多。有人从搜索引擎点进推广链接,下了个带全家桶的“安装包”;有人装完打开提示缺Git;还有人装完发现HBuilderX里一键打开失效&a…

2026/9/19 13:49:11 阅读更多 →
ADN8835单电感拓扑实现0.01℃高精度TEC温控

ADN8835单电感拓扑实现0.01℃高精度TEC温控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 13:49:11 阅读更多 →
真人漫画风格合成实战:从明星写真到私立高校女教师系列

真人漫画风格合成实战:从明星写真到私立高校女教师系列

1. 项目缘起与整体设计思路1.1 这个项目到底在做什么先把这个项目的核心说清楚:它是一组以“私立高校女教师”为统一主题的真人漫画风格合成作品,创作手法是把公开的明星写真素材,通过图像处理与绘画化渲染,转成具有漫画质感的角色…

2026/9/19 13:49:11 阅读更多 →
测试用例设计实战:等价类、边界值与缺陷根因分析

测试用例设计实战:等价类、边界值与缺陷根因分析

简介:《软件测试技术》综合实验报告是一份针对《仓库管理系统》的测试用例设计完整文档,适合软件测试初学者、计算机相关专业学生及需要完成实验报告的读者。内容从开发目的、需求分析、可行性分析到系统总体结构与功能模块设计均有展开,重点…

2026/9/19 13:49:11 阅读更多 →
数据要素入表技术指南:资产登记、价值评估与安全合规实践

数据要素入表技术指南:资产登记、价值评估与安全合规实践

简介:这份PPT系统梳理了数据要素资产化平台与数据入表解决方案的完整框架,面向企业数字化转型负责人、数据管理及合规岗位人员,帮助理解如何将数据资源转化为可计量、可交易的数据资产。内容从数据要素市场趋势切入,重点展开数据资…

2026/9/19 13:49:11 阅读更多 →
WordPress能上传软件吗?这份保姆级建站教程救急指南

WordPress能上传软件吗?这份保姆级建站教程救急指南

WordPress能上传软件吗?这份保姆级建站教程救急指南 别再被那些花里胡哨但毫无实用性的模板网站坑了!很多老板一上来就嫌默认主题太丑,改了半天配色还是觉得不够“高大上”,最后卡在功能实现上,特别是想往网站里塞个软件包让用户下载,直接懵圈: WordPress能上传软件吗?…

2026/9/19 13:48:43 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →