在 C# 中使用 Keras
转自:https://moefactory.com/3004.moe
在 C# 中使用 Keras
折腾万岁!
是什么?怎么用?
前段时间突然有了在 C# 中调用 Keras 生成的模型的奇怪需求,本来想的是干脆直接调用 Python 脚本然后传个参进去,但是这样不是很好玩,Google 了一下发现竟然有人把 Python 的几个机器学习框架都移植到了 C# 下,而 Keras.NET 就是其中一个,这下就很有趣了。
Keras.NET 是 SciSharp(是不是很熟悉,Python 中的科学计算工具包叫做 SciPy,不过我不知道这两者是不是一家)移植的用于 .NET 的 Keras 框架,其最大的特点是尽量使 C# 中的语法与 Python 原版的相似。另外 SciSharp 还移植了 NumSharp 等一系列库。关于Keras.NET,可参见:https://www.cnblogs.com/cgzl/p/11145382.html
基于上述特点,Python 代码只需做极少量的改动就能在 C# 中使用,如下所示( 代码摘自 Github 官方 repo)。
这是 Python 代码:
这是 C# 代码:
一些小问题
slice
的替代
目前我用到的功能中和 Python 有点区别的是,尽管 NumSharp 通过字符串作为参数实现了 Python 中的slice
功能,但是并不能像 Python 里一样使用x = x[:, :, :, np.newaxis]
。不过好在就算是 Python,也有另一种方法完成同样的功能,就是np.expand_dims
,对应在 C# 里则是x = np.expand_dims(x, 3);
。
系统架构
需要注意的是,使用 Keras.NET 需要安装版本匹配的 Python,并且仅支持 64 位的 Windows,这也就意味着编译 .NET 程序时不能选择“首选 32 位”。
.NET Core 上的注意事项
最开始我的程序是用 WinForms (.NET Framework 4) 写的,跑起来没什么大问题,就是只能依附于 Visual Studio 的调试模式。后来在微软发布 .NET Core 3 并支持 WPF 之后,九月份迁移项目的时候就出现了问题,一直报一个奇怪的错误,给作者提了 issue 之后也没什么太大的进展。
这学期期末的时候又想起来这个事情,试了一下在 .NET Core 3 下的 Console App 里跑起来是没问题的。于是再次提了一个 issue。最终得知是因为一些 Python 模块会使用sys.strerr
和sys.stdout
来输出一些东西,而 WinForms 和 WPF 是没有控制台的——大概这也是之前不能脱离 Visual Studio 运行的一个问题吧。
解决办法是更新到最新的 Keras.NET 并使用Keras.Keras.DisablePySysConsoleLog = true
来禁用这些输出。如果有获取这些输出的需求,可以使用以下代码:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
2013-09-03 Silverlight自定义控件系列 – TreeView (4) 缩进
2013-09-03 Silverlight自定义控件系列 – TreeView (3) 添加展开和收起事件
2013-09-03 Silverlight自定义控件系列 – TreeView (2) 基本布局和States
2013-09-03 Silverlight自定义控件系列 – TreeView (1)
2013-09-03 WPF中的ControlTemplate(控件模板)
2013-09-03 绑定任意格式的XML文档到WPF的TreeView