当前位置: 首页 > article >正文

.Net 9下使用Tensorflow.net---DNN_Keras

.Net 9下使用Tensorflow.net---DNN_Keras

  • 1、创建应用,导入依赖
  • 2、编写代码
    • 1)添加引用
    • 2)创建基础对象
    • 3)初始化数据集
    • 4)重点步骤:创建 Keras下的DNN模型
    • 5)训练模型得到评估值
    • 6)结果输出

这个例子依然采用dnn的模型。但是依赖于 keras来实现,
整体的步骤还是如此:
一、数据加载,预处理
二、选择网络训练模型(本例使用 Eager的 DNN)
三、定义损失函数、优化函数
四、训练模型且通过优化函数优化网络权重参数
五、评估结果

1、创建应用,导入依赖

这个和 .Net 9下使用Tensorflow.net—DNN_Eager 中操作一样,不再赘述

2、编写代码

1)添加引用

using Tensorflow;
using Tensorflow.Keras.Engine;
using Tensorflow.Keras.Layers;
using Tensorflow.Operations.Initializers;
using Tensorflow.Keras.Optimizers;
//using NumSharp;
using static Tensorflow.Binding;
using static Tensorflow.KerasApi;

2)创建基础对象

IModel _model;
       
LayersApi _layers=new LayersApi();

3)初始化数据集

keras的API很简洁,能很清楚看到,初始化数据分为:
1、加载数据集
2、整理训练集(动作分为:数据集维度整理,归一化数据格式整理)
3、整理测试集

   public void FNN()
   {
		var (x_train, y_train, x_test, y_test) = keras.datasets.mnist.load_data();//下载或加载本地MNIST
		x_train = x_train.reshape((60000, 784))/255f;
		x_test = x_test.reshape((10000, 784)) / 255f;
	}

4)重点步骤:创建 Keras下的DNN模型

   public void FNN()
   {
	   var inputs = keras.Input(shape: 784);
	//第一个全连接层
		var outputs= _layers.Dense(64,activation:keras.activations.Relu).Apply(inputs);
	//第二个全连接层
		outputs = _layers.Dense(64, activation: keras.activations.Relu).Apply(outputs);
	//输出层
		outputs = _layers.Dense(10).Apply(outputs);
	//搭建keras模型
	_model = keras.Model(inputs, outputs,name:"mymnist_model");

	_model.summary();
	//将Keras DNN模型编译成 TensorFlow的静态图
	_model.compile(loss: keras.losses.SparseCategoricalCrossentropy(from_logits: true),
    optimizer: keras.optimizers.RMSprop(),
    metrics: new[] { "accuracy" });
	}

说明:
DNN模型是前馈网络神经模型,是一个多层的结构,每一个层中神经元和下一个层的神经元是全连接的。
本例中注意内容:
1、采用的 Keras的Functional API的方式来创建模型,该方式 下通过 加载数据集,指定输入 隐藏 输出层的创建模型方式。该方式的好处是 可以搭建任意结构的神经网络,本例创建的是一个两层的DNN神经网络模型。
2、主要是通过Keras的 Dense函数来 创建每层,该函数创建的是一个全连接层,其中重要参数:
a、神经元数量: 整数,表示该层的输出空间维度(即该层神经元的数量)。
b、激活函数:这个函数的作用是对处理结果进行非线性变换。是整个神经网络计算不再是单纯的线性运算(如果没有激活函数,那么整个神经网络无非就是 矩阵的相加或者相乘)。有了激活函数之后,可以将输入或者上一层的输出经过非线性变换后更加接近求解,影响反向梯度传播。
常用的激活函数包括 ‘relu’、‘sigmoid’、‘tanh’ 等,sigmod和tanh前面介绍过了,此处使用relu,表达式为:
在这里插入图片描述
其实可以看出,该函数可以有效的实现 激活函数对于 梯度及稀疏性的要求。
3、通过keras.Model的方法,可以直接创建模型

5)训练模型得到评估值

   public void FNN()
   {
   //使用输入数据和标签来训练模型
		_model.fit(x_train, y_train, batch_size: 64, epochs: 2, validation_split: 0.2f);
		
		//评估模型
		_model.evaluate(x_test, y_test,verbose:2);
		//序列化保存模型
		_model.save("mnist_model");
	}

6)结果输出

在这里插入图片描述
可以看到,终端最终的书结果 符合DNN的模型,准确率也在上升,是比较合理的训练结果


http://www.kler.cn/a/564776.html

相关文章:

  • 系统架构设计师考点——嵌入式技术
  • 常用的AI文本大语言模型汇总
  • Spring Boot问题总结
  • Flutter系列教程之(1)——环境配置、创建项目及打包apk
  • Imagination GPU 3D Graphics Wrokload
  • DeepSeek教unity------UI元素长按响应
  • Linux:目录创建命令mkdir功能及用法详解
  • 类和对象——拷贝对象时的一些编译器优化
  • 2025GDC 大会视角:服务器与 AI大模型算力发展的深度剖析
  • WordPress二次开发实现用户注册审核功能
  • 基于springboot网上农业农机设备在线租赁网站系统设计与实现
  • Moe(混合专家)架构和Dense架构对比?
  • Java 进阶笔记
  • Oracle 字符串分割革命:正则表达式与 Lateral Join 的优雅解法
  • ArcGIS Pro可见性分析:精通地形视线与视域分析
  • 设计模式--spring中用到的设计模式
  • [免费]Springboot+Vue在线文档管理系统【论文+源码+SQL脚本】
  • 批量给 Word 添加或设置页眉页脚/页码
  • 第5章 软件工程(二)
  • 在 Android 应用中使用 Hilt