基于TensorFlow.NET的神经网络

在本文中,我们将学习如何在C#中构建神经网络模型图。与线性分类器相比,神经网络的关键优势在于它可以分类非不可线性分布的数据。我们将实现此模型来对来自于MNIST的手写数字图像数据集的进行分类。

我们要构建的神经网络的结构如下。 MNIST数据的手写数字图像有10个类(从0到9)。该网络具有2个隐藏层:第一层具有200个隐藏单元(神经元),第二层具有10个神经元(称为分类器层)。

在这里插入图片描述
让我们一步一步地开始实施:

1.准备数据

MNIST是手写数字的数据集,包含55,000个用于训练的示例,5,000个用于验证的示例和10,000个用于测试的示例。这些数字已经过标准化,并且以固定尺寸的图像(28 x 28像素)为中心,其值为0和1.每个图像已被展平并转换为784个特征的1-D阵列。它也是深度学习数据集的基准。

在这里插入图片描述

我们定义一些变量使以后更容易修改它们。值得注意的是,在线性模型中,我们必须将输入图像展平为矢量。

using System;
using NumSharp;
using Tensorflow;
using TensorFlowNET.Examples.Utility;
using static Tensorflow.Python;
const int img_h = 28;
const int img_w = 28;
int img_size_flat = img_h * img_w; // 784, the total number of pixels
int n_classes = 10; // Number of classes, one class per digit

我们将编写自动加载MNIST数据的函数,并以我们想要的形状和格式返回它。有一个MNIST数据助手可以让操作更轻松。
数据集mnist;

public void PrepareData()
{
    mnist = MnistDataSet.read_data_sets(“mnist”,one_hot:true);
}

除了加载图像和相应标签的功能外,我们还需要两个功能:
randomize:随机化图像及其标签的顺序。在每个epoch的开始,我们将重新随机化数据样本的顺序,以确保训练的模型对数据的顺序不敏感。

private(NDArray,NDArray)随机化(NDArray x,NDArray y)
{
    var perm = np.random.permutation(y.shape [0]);
    np.random.shuffle(烫发);
    return(mnist.train.images [perm],mnist.train.labels [perm]);
}

get_next_batch:仅选择由batch_size变量确定的少量图像(根据Stochastic Gradient Descent方法)。
private(NDArray,NDArray)get_next_batch(NDArray x,NDArray y,int start,int end)
{
var x_batch = x [ “ s

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值