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


这个例子依然采用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的模型,准确率也在上升,是比较合理的训练结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值