28.多输出模型

之前我们所有项目的输出都是单输出,比如我们的猫狗分类,输出的仅仅为图像中的动物是猫还是狗,我们下面来搞多输出模型,举个例子,多输出的意思是在模型判定图像是猫还是狗的同时,它也会输出比如动物的毛色等其他相关信息

我们先看一下我们的数据集,数据集名称为muti_outputs_dataset

文件夹分别有七种物品,分别是 黑牛仔裤,黑鞋子,蓝裙子,蓝牛仔裤,蓝衬衫,红裙子,红短袖,数据集中共有2525张图片

在这次的训练中,我们不仅要识别出物体的种类,也要识别出物体的颜色

目录

1  导入库

2  处理路径

2.1  获取所有图片路径

2.2  获取标签种类

2.3  获取所有图片的对应标签

3  定义加载图片函数

4  创建数据集

4.1  创建图片数据集

4.2  创建标签数据集

4.3  将图片与标签结合起来

5  处理数据集

6  创建模型

7  编译模型

8  训练模型

9  预测模型


1  导入库

2  处理路径


2.1  获取所有图片路径

首先我们获取全部图片的路径

之后我们获取照片的数量

再之后我们要对图像路径做乱序,我们这里是一定要做乱序的,因为我们后面会用到take与skip提取数据集,不做乱序就会导致测试集都是红鞋子而训练集都是黑鞋子这种情况(它看都没看过红色,然后拿出红色让它分辨是什么颜色,这样它预测的结果就非常不准),当然如果在take与skip前就做数据集的shuffle,在这里就没有必要乱序了

random.shuffle()的返回值是None,所以我们没有必要赋值

2.2  获取标签种类

之后我们获取所有标签

我们显示出来看一下

我们要同时预测颜色和种类,所以我们要分开label_names

添加进列表之后,将列表转换为set格式

我们显示出来看一下

发现有三种颜色,四种物品,下面我们将颜色与物品进行编号

我们这个编码每一次运行出来的结果有可能会不一样(上面使用set的原因),我们要记录当前的值,以便我们预测时好预测


2.3  获取所有图片的对应标签

之后再把颜色标签与物品类型标签提取出来,并转换为编号

3  定义加载图片函数

我们这里的尺寸不再使用之前的256,因为我们后面要使用到mobilenet预训练模型,mobilenet的标准输出为224*224,我们按照它原来的来会更好一点

4  创建数据集


4.1  创建图片数据集

先创建路径数据集,然后创建图片数据集

4.2  创建标签数据集

我们的标签数据集包含颜色和类型两个部分,也就是说一个图片对应两个标签

4.3  将图片与标签结合起来

我们将这个数据集显示出来看一下

5  处理数据集

首先我们定义训练集与测试集,我们定义前20%为测试集,后80%为训练集

这里我们定义循环与乱序和批次,之后定义预读取

  • 我们后面使用model.fit进行训练,在这里repeat()实际上没有必要

之后给测试集加上batch

6  创建模型

我们的模型结构是这样的

首先我们创建预训练网络 mobilenet,mobilenet是非常小的网络,所以非常适合部署在移动端

这里我们不使用其权重,只使用其网络结构

多分类问题中我们使用函数式API构建网络,函数式API之前在这篇文章中有提到 11.tf.keras函数式API_potato123232的博客-CSDN博客

我们这样进行搭建

上面的name我们后面编译的时候会用到

用这种方式我们可以使用get_shape()查看每一层的数据形状,比如我们现在看mobilenet的结果

我们看一下整体网络的情况

  • 由于修改name的原因最后两层的名字不为dense_2和dense_3

7  编译模型

由于我们在这里两个输出都是多分类问题,我们可以使用同样的损失函数,所以我们可以这样写

如果我们的项目需要使用不同的损失函数,这个时候我们就用到了之前设置的name

8  训练模型

由于给了name所以训练时的指标变多了

我们看一下曲线

  • color_acc

  • clothes_acc

  • color_loss

  • clothes_loss

  • 总loss

通过上面这四个曲线我们可以看到此时模型存在严重的过拟合现象,那么模型的结构是公认正确的,我们需要通过调小学习率与增大数据量以达到消除过拟合的情况,我在这里就不再训练了

之后我们保存模型

9  预测模型

首先导入库

我们在这里把打印出来的结果复制一下,之后进行键与值的换位

我们显示出来看一下

之后读取模型

再之后定义加载图像函数

之后我们定义预测函数

result是是一个列表,里面有两个array,分别是颜色和种类的预测结果,我们一会儿看一下就知道了,之前提到过将图像直接传入model中,就是model(img),这个和model.predict(img)的返回类型不同,但是返回结果的值是相同的

再之后我们找两张图,我们现在这个模型预测非数据集内的图片是没有意义的(val_acc太低,我们无法验证预测的过程是否正确),所以我们用训练数据来预测一下

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
灯光控制沙盘模型控制器串口控制40路继电器输出JMDM-COM40MRrar,灯光控制器 沙盘模型控制器 工业级串口控制器 40路继电器(晶体管)输出 串口控制40路继电器灯光控制/沙盘模型控制本产品研发制造商:深圳市精敏数字机器有限公司一、产品简介JMDM-COM40MR串口控制继电器(晶体管)板是深圳市精敏数字机器有限公司自主研发的一款高可靠、多功能、通用型工业级控制器,可用于串口控制多路继电器(晶体管)的输出。可以2种模式工作:实时模式:通过电脑串口发送控制命令(可以是ASCII码或字符串)给控制器,在电脑上位机界面上实时控制继电器的输出;程序模式:通过电脑串口下载控制程序到控制器,控制器保存程序,并根据程序和时间等逻辑独立控制继电器输出。1、工业级别40路继电器输出控制器,可实现串口控制40路灯光的控制;2、可独立控制或通过电脑上位机界面串口控制;3、支持多台级联近距离控制;4、支持多台RS485组网远程控制;5、支持通过电脑上位机界面实时监控40路以上多台组网控制的多路输出;6、使用PC串口控制,轻松实现多路灯光、电源、音频或视频开关、门禁开关等数字量信号的实时状态监测和控制!是灯光、沙盘模型控制的最佳方案!二、性能参数1)工作电源:JMDM-COM40MR:交流9/18V或直流12/24V;JMDM-COM40MT:交流9/18V或直流12/24V;3)主控芯片:8位高性能单片机加高速高稳定FPGA可编程阵列电路;4)程序及数据存储器:32K程序存储器,用于存放数据,30K数据存储器也可以用来保存数据,断电数据不丢失;6)输出:JMDM-COM40MR:40路光电隔离继电器输出输出电压为0~220V,最大输出电流为5A, 输出口状态可回读;JMDM- COM40MT:40路光电隔离晶体管输出,集电极开路输出形式,输出电压为24/12V,最大输出电流为4A,输出口状态可回读 7)系统稳定性:采用光电隔离和启用内部看门狗及严格的高频滤除特性,使系统工作稳定可靠,死机自启动时间在1ms之内;三、功能描述1、JMDM-RS232串口控制器用于继电器(或晶体管)的开启和关闭。2、上位机(PC机或主PLC)通过串口连接到本控制器后,向控制器发送一串ASCII代码指令即可控制某个(或全部)继电器打开或关闭,完全不必要考虑继电器的硬件电路上选择、驱动等问题。比如,串口输入O(002, 1)则第2号继电器通电吸合;串口输入“O(012, 0)”,则第12号继电器失电断开。3、串口控制器和控制主机之间距离可以通过485总线延长,最长组网可以达到一千米;4、单个串口控制器可以独立控制40路继电器(或晶体管)的开启和关闭。通过地址编码,在延时1秒许可的情况下,一个串口最多可以寻址、控制100块串口控制器,构成一个由4000个输出点的大系统。6、可提供串口通信协议以及VB通信源程序,赠送VB通过RS232串口操作控制器的演示程序或代为开发专用程序。7、控制器有四个拨动开关,可以设定从(0-16)号控制器的地址,也可用软件编程设定控制器地址和拨动开关的用途。8、控制器带有系统时钟,可以用定时控制继电器的通断。9、本继电器控制器配有工控级别外壳,美观大方,方便安装。电脑RS232串口控制或独立控制继电器输出控制板器,可控制8~40路继电器:JMDM-20DIOV2MR数字量12入8路继电器出;JMDM-28DIOMR数字量16入12路继电器出;JMDM-40DIOMR数字量20入20路继电器出;JMDM-COM40MR数字量0入40路继电器出;更多产品详细资料,欢迎垂询:电话:0755- 29769287;13427969290 陶小姐;传真:0755-29958512 E-mail:[email protected];QQ: 374157195; MSN:[email protected]; 阿里旺旺:jingminsz阿里巴巴网上店:http://china.alibaba.com/company/detail/jingminsz.html公司网址:www.jingmindm.com 中华工控网店铺:http://www.gkong.com/comm/userdetail.asp?id=66456
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。 目 录 第1部分C++ 多线程系统编程 第1章线程安全的对象生命期管理3 1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4 1.1.3一个线程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4 1.2对象的创建很简单. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5 1.3销毁太难. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7 1.3.1mutex 不是办法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7 1.3.2作为数据成员的mutex 不能保护析构.. . . . . . . . . . . . . . 8 1.4线程安全的Observer 有多难.. . . . . . . . . . . . . . . . . . . . . . . . 8 1.5原始指针有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11 1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13 1.7插曲:系统地避免各种指针错误. . . . . . . . . . . . . . . . .. . . . . . 14 1.8应用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17 1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19 1.11对象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21 1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23 1.11.2弱回调. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24 1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26 1.13心得与小结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26 1.14Observer 之谬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 第2章线程同步精要 2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.1.1只使用非递归的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33 2.1.2死锁. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35 2.2条件变量(condition variable). . . . . . . . . .

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值