基于.NET下的人工智能系列专题|.NET下的人工智能系列专题|用Keras.NET 做一个图像识别的训练...

    .NET Core 的应用场景越来越广,开源社区也不断壮大, .NET Core在机器学习领域不断发展ML.NET外,也通过结合Tensorflow.NET去完善ML.NET在深度学习领域的功能,在ML.NET 1.3开始迈出了非常重要的一步。这不仅是微软拥抱开源的策略,也是对SciSharp社区的认可。SciSharp社区不仅有Tensorlow.NET优秀的产品,也有很多对基于Python机器学习/深度学习库的封装,这补充了现阶段ML.NET在发展阶段功能不全的缺陷,也让更成熟的机器学习/深度学习方案应用在.NET Core的生产环境中。今天我会介绍一下Keras.NET并通过Keras.NET做一个图像识别的深度学习训练。

01

PART

什么是Keras?

    Keras是一个用Python编写通过Tensorflow、PlaidML以及CNTK作为后端的高层神经网络API。Keras让你用最简单的方式快速完成深度学习(https://keras-cn.readthedocs.io/en/latest/) 。不少人喜欢用Keras进行模型训练。ScipySharp社区也对 Keras通过pythonnet进行了封装(https://github.com/SciSharp/Keras.NET) 。

02

PART

如何用Keras.NET

      pythonnet是一个运行基础,它作为一个Python和.NET Core的桥接存在, ScipySharp社区对pythonnet进行了封装和修改。由于开发环境各异,对于pythonnet的引用都略有不同,Windows下使用Python.Runtime.NETStandard / Linux下使用Python.Runtime.Mono / macOS下使用 Python.Runtime.OSX 。补充一点记得设置好Python的环境变量,否则你调用就会出现一堆问题。对于Keras.NET的封装,也依赖于Numpy.NET

(https://github.com/SciSharp/Numpy.NET)。这里有个比较特别的地方,需要下载源码,把Keras.NET/Numpy.NET基于不同平台对应的Python.Runtime版本的包添加重新设置编译,并在本地通过dll直接引用。还有Numpy.NET有两个版本,一个是支持Windows的Numpy , 一个是支持Linux/macOS的Numpy.Bare 使用时候不要搞混了。

03

PART

一个经典的例子

     这里做一个猫狗分类的图像分类的示例,这个示例比较经典,也算是一个Keras上的HelloWorld .让我们来看看如何通过Keras.NET来完成。

01

环境

环境,我还是依赖于 JupyterNotebook (如何用JupyterNotebook 支持C#环境, 可以看我之前的文章

(https://blog.csdn.net/kinfey/article/details/96095690),这里提醒需要把Keras.NET, Numpy.NET添加到ICSharpCore项目当中,否则没法使用Keras.NET.

02

创建JupyterNotebook

创建JupyterNotebook , 把项目必要的库进行引用.注意因为我是Linux环境,在Linux环境下是Python 3.6.8,所以我这里对应的是Python.Runtime.Mono 3.6.0(如果你是其他平台其他版本记得要切换好,否则是不能使用的), 还有通过Rosyln把本地编译好的Keras.dll,Numpy.Bare.dll引入。

03

CNN算法定义

CNN算法定义,这个就是佛系了,毕竟这是深度学习的一部分,。CNN, 全名卷积神经网络(Convolutional Neural Network,简称CNN), 是一种前馈神经网络,人工神经元可以相应周围单元,可以进行大型图像处理。

(http://cs231n.github.io/convolutional-networks/)。CNN网络层级由输入层,卷积层,激活层,池化层,全连接FC层共5个部分组成,通过Keras可以很容易完成这5个部分的层级操作。具体看以下代码。

04

数据整理

数据整理,数据分为训练数据,和测试数据,Keras有对图像分类支持的接口ImageDataGenerator。

05

训练和保存模型

训练和保存模型,通过FitGenerator对图像数据进行训练,这里你可以根据实际情况调整训练参数,训练完后可以保存以h5为后续的模型。注意,训练需要时间,如果你有GPU是最好的,否则CPU会花不少时间。

这里要提醒一点,因为ICSharpCore还在改进,训练时产生的状态只能通过去命令行中查阅,所以要看训练效果可以通过命令行看。

06

测试模型

最后展示一个完整的Jupyter Notebook

转型到机器学习/深度学习对不少人来说都需要花很多的时间,但在自己熟悉的环境下学习是提升学习效率的方法。希望SciSharp社区能帮到.NETer。          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WTM系列视频教程:WebApi

文字摘要:“今天跟大家聊聊WTM中的WebApi,WebApi直接继承Controller Base, 他实际上比普通的Controller要更简单,流程更短,因为它不需要处理关于界面的问题。”“实际上如果我们使用普通Controller返回Json&#xff0c…

《C++ Primer》2.1.3节练习

#include <iostream> using namespace std;int main() {cout << "2\x4d\012";cout << "2\tM\n";return 0; }//\x4d输出M //\012输出换行 //\t输出制表符

【复杂系统迁移 .NET Core平台系列】之静态文件

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

[Abp vNext 源码分析] - 19. 多租户

一、简介ABP vNext 原生支持多租户体系&#xff0c;可以让开发人员快速地基于框架开发 SaaS 系统。ABP vNext 实现多租户的思路也非常简单&#xff0c;通过一个 TenantId 来分割各个租户的数据&#xff0c;并且在查询的时候使用统一的全局过滤器(类似于软删除)来筛选数据。关于…

八数码问题I-bfs和map标记

解题思路&#xff1a; bfs&#xff0c;将棋盘转化成一个整数表示其状态&#xff0c;比如我们到到达的状态是815736402&#xff0c;而样例给的输入状态是264137058&#xff0c;因为这些整数过大&#xff0c;标记数组开不下&#xff0c;所以可以用map来代替数组&#xff0c;写得时…

一个迷你ASP.NET Core框架的实现(下)

【框架内幕】| 作者 / Edison Zhou这是恰童鞋骚年的第196篇原创文章上一篇我们了解了AspNetCore.Mini这个项目的背景及项目结构和流程&#xff0c;这一篇我们继续解析几个核心对象。本文整理自A大&#xff08;蒋金楠&#xff09;的主题分享&#xff0c;点击本文底部“阅读原文”…

根据后序和中序求二叉树的先序

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int in_order[N], post_order[N], lch[N], rch[N];int build(int inL, int inR, int postL, int postR) {if (inL > inR)return 0;int root post_order[postR];int k inL;while…

30多岁程序员老W,无奈选择转行!问题出在哪?

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区特邀嘉宾&#xff01;一有一天&#xff0c;一位同事跟我说&#xff1a;老w已经改行做美缝去了&#xff0c;你怎么看&#xff1f;我想了想&#xff0c;说&#xff1a;他大概终于做出了眼下最符合他…

一维前缀和

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int a[N], s[N];int main() {int n;cin >> n;for (int i 1; i < n; i) {cin >> a[i];//原数组s[i] s[i - 1] a[i];}for (int i 1; i < n; i)cout << s[…

HttpClientFactory的套路,你知多少?

背景ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory。替换的初衷还是简单摆一下&#xff1a;① using(var client new HttpClient()) 调用的 Dispose() 方法并不会立即释放底层 Socket 连接&#xff0c;新建 Socket 需要时间&a…

走迷宫-双向bfs解法

双向bfs适用于知道起点和终点的状态下使用&#xff0c;从起点和终点两个方向开始进行搜索&#xff0c;可以非常大的提高单个bfs的搜索效率同样&#xff0c;实现也是通过队列的方式&#xff0c;可以设置两个队列&#xff0c;一个队列保存从起点开始搜索的状态&#xff0c;另一个…

.NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记...

16 | 选项数据热更新&#xff1a;让服务感知配置的变化选项框架还有两个关键类型&#xff1a;1、IOptionsMonitor2、IOptionsSnapshot场景&#xff1a;1、范围作用域类型使用 IOptinsSnapshot2、单例服务使用 IOptionsMonitor通过代码更新选项&#xff1a;IPostConfigureOption…

华为任职资格_看了华为的任职资格体系,你就明白员工为啥这么拼?

提到华为的18万奋斗者&#xff0c;职场上没人不竖起大拇指。而优秀人才的背后&#xff0c;就像任正非曾说过的那样&#xff0c;华为的成功&#xff0c;很大意义上讲就是人力资源的成功。华为的人力资源管理最有代表性的&#xff0c;除了狼性文化和薪酬绩效外&#xff0c;就是任…

如何使用有序GUID提升数据库读写性能

源宝导读&#xff1a;数据库设计时&#xff0c;经常会使用GUID作为表的主键&#xff0c;但由于GUID的随机性会导致数据库在读写数据时效率严重下降&#xff0c;影响应用程序整体性能。本文将深入探讨如何通过使用有序GUID提升数据读写的性能。一、背景常见的数据库设计是使用连…

《商业洞察力30讲》学习笔记(上)

【洞察力】| 作者 / Edison Zhou这是恰童鞋骚年的第197篇原创文章学习洞察力&#xff0c;也是新时代IT人员的一门进阶必修课...1学习背景2019年下半年至今&#xff0c;在领导的推荐下学习了刘润老师的《商业洞察力30讲》&#xff0c;刷新了我对于事物的认知&#xff0c;也为我提…

[蓝桥杯][历届试题]九宫重排-双向bfs和map标记

题目描述 如下面第一个图的九宫格中&#xff0c;放着 1~8 的数字卡片&#xff0c;还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动&#xff0c;可以形成第二个图所示的局面。 我们把第一个图的局面记为&#xff1a;12345678. 把第二个图的局面记…

3月数据库排行:前10整体下行,出新技术了?

DB-Engines 数据库流行度排行榜 3 月更新已发布&#xff0c;排名前二十如下&#xff1a;排名方面没有任何变动&#xff08;仅针对前十&#xff09;&#xff0c;相信很长一段时间内也都不会变动&#xff0c;毕竟巨头的位置不是一时半刻就能动摇的。不过这个月的排行榜还是有值得…

每日一题——LeetCode160.相交链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;提示&#xff1a; 2. 思路3. 代码 1. 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的…

.NET Core的HttpClient连接池管理

译者荐语&#xff1a;使用.NET Core的HttpClient连接池管理有哪些注意事项&#xff1f;本文给出了非常中肯的建议。原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。本文来源[1]史蒂…

[蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟

题目描述 兰顿蚂蚁&#xff0c;是于1986年&#xff0c;由克里斯兰顿提出来的&#xff0c;属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。 蚂蚁的头部朝向为&#xff1a;上下左右其中一方。 蚂蚁的移动规则十分简单&#…