利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境

每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事。这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学习。感谢我的老板给我很大的空间去开拓新的领域,但对于不少企业这种转型需要时间,金钱的成本。我一直说,做编码就如打功夫,无论哪个门派都是一个技术栈,你寄望一套拳法可以把所有对手打倒。现阶段最好的跨平台生态已经不再是Java , 你想到的是JavaScript ,还有.NET 。或者不少人会有质疑,但现状就是这样。我今天不谈JavaScript, 重点谈谈.NET Core. 自从微软重新去把.NET 重新规划后,不少的企业或者Startup也开始试水这个既熟悉又陌生的技术环境。如果你执着地坚持着.NET , 你会为现在.NET 那七颗龙珠感到惊喜。从以往桌面/网页,到现在的移动,物联网,云计算,游戏,还有人工智能,更是一个跨平台的解决方案。

在这里插入图片描述

在技术领域,一个完整的生态,少不了有不错的开源社区。现在.NET Core的开源社区在不断壮大,在机器学习和深度学习领域除了有官方支持的ML.NET外, 还有Miguel大神的TensorFlowSharp ,更可喜的是有一个基于.NET Core的机器学习和深度学习的技术开源社区SciSharp(https://github.com/SciSharp)。SciSharp 有不少和 Python 机器学习/深度学习的融入的项目,方便.NET Core的程序员无缝融入到机器学习/深度学习的环境中去,更重要一点是你可以继续用你的C#。如果你是一个.NETer,估计也会喜欢上这个开源的项目。毕竟从Jupyter Notebook的支持,到机器学习相关的Numpy.NET / NumpySharp, Pandas.NET , SciSharp , scikit-learn , 到深度学习的Tensorflow.NET , KerasuNET , Torch.NET ,还有自然语言的BotSharp , SpaCy.NET 都做了.NET Core的移植。一个技术生态好与坏,就看你的开源项目质量了。这是一个不错的开端。

在这里插入图片描述
传统的机器学习/深度学习的工作方式,和我们写代码不一样,基于Jupyter Notebook ,通过ICSharpCore(https://github.com/SciSharp/ICSharpCore)你可以为Jupyter Notebook 添加C#的支持。如果你是传统程序员,你会喜欢IDE ,但在机器学习/深度学习的环境你更应该在Jupyter Notebook上开发。你可以通过Docker去部署这个环境(https://github.com/SciSharp/SciSharpCube之前社区好友分享过文章),但考虑到更高性能个人推荐还是在本机运行。我来补充下在本机的一些配置方法,你还是得安装Python, 建议还是装3.6.x / 3.7 , 还有别忘记通过pip去安装jupyter(pip3 install jupyter),。毕竟这个解决方案还是得要一个标准的Python做支持。接下来就是一些很.NET Core的事情了

去下载一份ICSharpCore(https://github.com/SciSharp/ICSharpCore)的源码在本地编译,会生成dll,这里得提提如果你希望你的ICSharpCore环境支持ML.NET 你需要在改项目下通过dotnet add package添加ML.NET的支持

去kernel-spec目录下修改kernel.json , 指定好刚才编译生成的ICSharpCore.dll的路径

回到ICSharpCore目录下执行 ​jupyter kernelspec install kernel-spec --name=csharpcore ​ 通过运行语句jupyter kernelspec list 检查是否成功添加

我们通过启动jupyter notebook来测试下环境,通过New 可以看到选项已经添加C#的支持(SciSharpCube这个名字不错,所以我省得再修改了,当然你觉得不够爽就自己通过修改kernel.json去修改),选中SciSharpCube就可以在Jupyter Notebook使用C#代码
在这里插入图片描述
因为ICSharpCore结合Roslyn编译器进行使用,所以你引用库时,也需要通过#r 进行使用,看两个基于ML.NET的notebook,是不是很cool呢?
在这里插入图片描述
在这里插入图片描述

回头谈一些细节,现在SciSharp对于不同框架的绑定,无非两种,第一种像TensorFlow.NET是基于TensorFlow原生的C库做绑定,这种做法的优点是对Python的依赖少,更像原生实现,第二种就直接基于pythonnet(https://github.com/pythonnet/pythonnet)这个扩展去实现,这种做法就是桥接只需要做一些简单的语言扩展就可以快速实现功能,但有一个问题就是对本机Python环境依赖极高需要为不同版本的Python版本设置不同的dll,还有就是不够原汁原味了。但这两种方法其实对环境变量的设置都有要求,如TensorFlow.NET原生 就别忘记去设置TF的C库放置的环境变量路径,还有如依赖于pythonnet的Keras.NET, Numpy.NET就别忘记指定好你本机Python版本的lib文件夹路径,否则就会出现很多问题。我可是花了不少时间的。

SciSharp在medium上有不少介绍和示例(https://medium.com/scisharp),建议大家都去看看,当然我也会中英文同步发一些原创文章给大家,也建议更多人在社区贡献代码和示例让它成为更优秀的.NET开源项目。

在这里插入图片描述

相关推荐

TensorFlow.NET 支持队列操作

ThensorFlow能够并行处理多个任务,而队列是一种强大的异步计算机制。 如果我们拥有大型数据集,则可以大大加快模型的训练过程。 当以小批量读取,预处理和提取我们的训练数据时,此功能特别方便。 能够对我们的模型进行专业且高性能的训练的秘诀是使用TensorFlow提供的排队操作。 TensorFlow已经实现了4种类型的队列:FIFOQueue,PaddingFIFOQueue,Priorit...

SciSharp Stack 995

在C#中像Python一样编写TensorFlow机器学习代码

机器学习是一个激动人心的领域,一直有新的技术突破。研究人员不断推动机器智能的提升,教机器如何看,听,读,写和听——这些曾经是我们人类专属领域的技能。机器学习的首选语言是Python,最受欢迎的库是Google的TensorFlow。几乎所有的代码示例都是用Python编写的,并且依赖于TensorFlow和NumPy库。对C#和.NET开发人员来说,我们面临着一个严峻的选择 - 要么学习Pyth...

SciSharp Stack 6032

自动化流程开源框架BotSharp

BotSharp是一款为方便构建智能对话机器人平台而开发的开源框架,最大的特点是所有模型算法都是基于.NET Core开发实现,甚至最基本的Penn Treebank分词标准,都重新用C#实现了。在机器学习python占绝对优势的时代算是不可多得的项目。该项目涉及自然语言理解,计算机视觉和音频处理技术,旨在促进智能机器人助手在信息系统中的开发和应用。目前里面的NLP部分实现的比较多一些,比如n-g...

SciSharp Stack 1954

SiaNet — 一个基于C#的高阶深度学习库

当我们谈论从头开始编码神经网络时,它总是一项艰巨的任务,需要大量的数学和衍生函数来编写。当您必须了解神经网络+代码背后的数学并确保其表现良好时,并不总是那么容易。 Python有很多库,有助于开发和训练您自己的模型,而无需具备如此深入的数学知识,您只需要知道准备数据集并了解模型的最佳神经网络架构。其中一些python库是Keras,MxNet,TensorFlow,Caffe等,它们很受欢迎。 K...

SciSharp Stack 2265

使用神经网络解决XOR问题 - C#

这篇文章的目的是让你了解如何在C#.NET中使用SiaNet库和写入来使用神经网络。我将使用XOR问题,这是最简单的问题之一,但是,Minksy和Papert(1969)表明这是20世纪60年代神经网络架构的一个大问题,称为感知器。你可以在这里阅读神经元的功能,以便更多地了解我在说什么。现在这是一个问题。让我们尝试构建和训练一个神经网络,它将产生下面的真值表,称为’异或’或’异或’(A或B,但不...

SciSharp Stack 1430

NumSharp中的Slicing [:]

借助NumSharp强大的新阵列切片功能,.NET社区距离拥有强大的开源机器学习平台又近了一步。Python是机器学习的语言,部分原因在于其优秀的库,如NumPy和TensorFlow。但是,C#开发人员非常需要ML和Data Science的强大开源库。 NumSharp是SciSharp STACK组织的NumPy最佳C#端口,最近通过完全实现slicing 向前迈出了一大步,它允许创建任意...

SciSharp Stack 752

NumSharp与Matplotlib的联动

我们为NumSharp实现了许多常用功能,现在是时候开始使用NumSharp作为科学计算库编写机器学习模型了。今天我编写了一个简单的数据生成函数,并在.NET环境中绘制了数据视图。您可以感受到用NumSharp编写的代码,几乎和NumPy一样流畅。NumSharp是C#.NET Standard中的NumPy端口Github:https//github.com/SciSharp/NumS...

SciSharp Stack 875

NumSharp ——用C#进行科学计算

NumPy是在python中处理数据的最基本和最强大的包。如果您打算从事数据分析或机器学习项目,那么对numpy的充分理解几乎是强制性的。其他用于数据分析的软件包(如pandas)是建立在numpy之上的,用于构建机器学习应用程序的scikit-learn软件包也非常适合numpy。但对于.NET开发人员来说,没有这样的工具库。虽然有像Deedle和Math.NET这样的开源库,但它们不是很容易使...

SciSharp Stack 8914

C#移植版NumSharp

难道将python机器学习代码翻译成C#吗? 因为在.Net SDK中的相应代码中找不到太多功能。 NumSharp是NumPy的C#版本,它与NumPy编程接口尽可能一致,包括函数名称和参数位置。 通过引入NumSharp工具库,您可以轻松地从python代码转换为C#代码。 这是NumSharp和NumPy之间的比较代码(左边是python,右边是C#):NumSharp实现了arange...

SciSharp Stack 2018

在C#.NET中训练自己的手写数字识别器

卷积神经网络(CNN)是用于图像分类任务的当前最先进的模型架构。 CNN将一系列滤波器应用于图像的原始像素数据,以提取和学习更高级别的特征,然后该模型可用于分类。这篇文章我们将采用一个非常常见的CNN例子来识别手写数字。 我们将在C#中训练深度学习模型,并使用该训练模型来预测手写数字。 我们将使用Keras.NET编写我们自己的模型并使用标准的MNIST数据集进行训练,该数据集包含来自美国人口...

SciSharp Stack 2268

使用Jupyter Notebook玩转C#和Tensorflow.NET(第1部分)

2019年6月4日,SchiSharp社区正式宣布用Jupyter笔记本的.NET内核程序——ICSharpCore(https://github.com/SciSharp/ICSharpCore)已经准备就绪。并且已经将开箱即用的docker镜像,加入到Docker集线器(scisharpstack / scisharpcube)。这意味着我们可以使用Jupyter笔记本播放C#和Tensor...

SciSharp Stack 1932

使用Jupyter Notebook运行TensorFlow.NET

在Jupyter Notebook中运行TensorFlow.NET很酷。通过在Jupyter Notebook上运行SciSharp的机器学习库,我们可以轻松地使用.NET开发和评估机器学习模型,而无需安装繁琐的.NET开发环境。 C#的REPL (Read-Evaluate-Print-Loop) 模式,允许开发人员像脚本语言一样使用CSharp。为了使Jupyter能够运行C#REPL模...

SciSharp Stack 574

基于TensorFlow.NET的神经网络

在本文中,我们将学习如何在C#中构建神经网络模型图。与线性分类器相比,神经网络的关键优势在于它可以分类非不可线性分布的数据。我们将实现此模型来对来自于MNIST的手写数字图像数据集的进行分类。我们要构建的神经网络的结构如下。 MNIST数据的手写数字图像有10个类(从0到9)。该网络具有2个隐藏层:第一层具有200个隐藏单元(神经元),第二层具有10个神经元(称为分类器层)。让我们一步一步地...

SciSharp Stack 3805

使用TensorFlow.NET与NumSharp进行图像识别

发布了v0.3版本,让我们尝试将其用于图像识别。使用TensorFlow.NET和[ ](https://github.com/scisharp/NumSharp)进行图像识别的示例,它将使用预先训练的初始模型来预测输出按概率排序的类别的图像。原始论文在这里。 GoogLeNet的Inception体系结构设计为即使在严格的内存和计算预算约束下也能很好地运行。 Inception的计算成本也远低...

SciSharp Stack 2265

使用C#实现线性回归

我将介绍如何在[SciSharp](https://github.com/scisharp)的TensorFlow.NET中训练线性回归模型。什么是线性回归?线性回归是一种线性方法,用于因变量与一个或多个自变量之间的关系进行建模。考虑单个感兴趣变量y和单个预测变量x的情况。预测变量由许多名称调用:因变量,输入,特征; 预测变量通常称为自变量,输出,结果。我们有一些数据$ D = {x {\...

SciSharp Stack 4381

在C#中构造TensorFlow条件语句

经过两周的努力,我们即将在C#中完成TensorFlow条件语句的构造,条件操作对数据流控制非常重要。 我们甚至修改并重新编译了用c ++编写的TensorFlow核心库,以便进行更新输入操作。 虽然代码仍然不能很好地工作,但它已经向前迈出了一大步。TensorFlow.NET生成了错误的图TensorFlow.NET生成了正确的图由于SciSharp团队的无私奉献,您的每一行代码都充满...

SciSharp Stack 461

用.NET实现卷积神经网络(CNN)

在本文中,我们将展示如何通过.NET来使用卷积神经网络(CNN)。我们将通过此模型对MNIST数据集进行分类。我们要构建的神经网络的结构如下, MNIST数据的手写数字图像有10个类(从0到9),网络有2个卷积层,最后是2个全连接层。图:神经网络架构下面让我们一起来看看怎么实施:1. 准备数据MNIST是手写数字的数据集,包含55,000个用于训练的示例,5,000个用于验证的示例和1...

SciSharp Stack 3711

不安装Python就可以在.NET环境中调用Python的方法

作者:Meinrad Recheis多亏了pythonnet项目,我们有了一种在C#和Python之间进行互操作的方法。但是,设置它是有问题的,部署也是如此,不是吗?在本文中,我将介绍Python.Included,它可以优雅地解决这个问题,对.NET开发人员来说调用Python既有趣还很容易。为了证实这一点,我将展示Numpy.NET,它是一个.NET标准库,为Python的NumPy包提...

SciSharp Stack 2210

.NET Core玩转机器学习

作者:Bean.HsiangML.NET 专门为.NET开发者提供了一套跨平台的开源的机器学习框架。ML.NET支持.NET开发者不需要过度专业的机器学习开发经验,就能轻松地训练自己的模型,并且嵌入到自己的应用中。一切尽在.NET之中。ML.NET早期是由Microsoft Research开发,近十年来逐步集成到一个大体系中被众多Microsoft产品使用,如大家熟知的Windows、Bin...

SciSharp Stack 793

用Keras.NET 做一个图像识别的训练

用Keras.NET 做一个图像识别的训练作者:kinfey.NET Core 的应用场景越来越广,开源社区也不断壮大, .NET Core在机器学习领域不断发展ML.NET外,也通过结合Tensorflow.NET去完善ML.NET在深度学习领域的功能,在ML.NET 1.3开始迈出了非常重要的一步。这不仅是微软拥抱开源的策略,也是对SciSharp社区的认可。SciSharp社区不仅有Te...

SciSharp Stack 2121
上一篇: 用Keras.NET 做一个图像识别的训练
下一篇: .NET Core玩转机器学习
SciSharp Stack
博客等级 码龄7年 111粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值