深度学习框架TensorFlow.NET之数据类型及张量2(C#)

环境搭建参考:

深度学习框架TensorFlow.NET环境搭建1(C#)-CSDN博客

由于本文作者水平有限,如有写得不对的地方,往指出

声明变量:tf.Variable

声明常量:tf.constant

下面通过代码的方式进行学习

一 数据类型学习

1.1 数据类型输出及运算(包括变量及常量的声明及操作)

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;
using Tensorflow;

namespace TensorFlowNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
            ResourceVariable floatVar = tf.Variable<float>(1.2f, name: "float变量");
            //字符串的值不能出现中文,不然会报错
            ResourceVariable strVar = tf.Variable<string>("Hello World", name: "字符串变量");
            ResourceVariable boolVar = tf.Variable<bool>(false, name: "bool变量");
            Tensor number1 = tf.constant(2,name:"常量2名称");
            Tensor number2 = tf.constant(3,name:"常量2名称");
            Tensor addResult = tf.add(number1, number2);
            Tensor addResult2= tf.add(intVar, number1);
            Tensor addResult3 = tf.add(intVar.numpy(), number1);    //int类型和int类型相加正常
            //Tensor addResult4 = tf.add(floatVar, number1);  float类型和int类型相加会报错
            Console.WriteLine("intVar数值为:" + intVar.numpy()+ " 变量名为:"+intVar.Name);
            
            Console.WriteLine("floatVar数值为:" + floatVar.numpy() + " 变量名为:" + floatVar.Name);
            Console.WriteLine("strVar数值为:" + strVar.numpy() + " 变量名为:" + strVar.Name);
            Console.WriteLine("boolVar数值为:" + boolVar.numpy() + " 变量名为:" + boolVar.Name);
            Console.WriteLine("addResult数值为:" + addResult.numpy());
            Console.WriteLine("addResult2数值为:" + addResult2.numpy());
            Console.WriteLine("addResult3数值为:" + addResult3.numpy());
            
            Console.Read();
        }
    }
}

通过tf.Variable<int>(10, name: "int变量")声明了一个值为10,名为'int变量'的整形变量

通过tf.Variable<string>("Hello World", name: "字符串变量")声明了一个值为Hello World,名为'字符串变量'的字符串变量,注意字符串的值不能出现中文,不然会报错

其它的数据类型的声明方式类似

通过tf.constant(2,name:"常量2名称")声明了一个值为2,名为'常量2名称'的整型常量

注意:tf.add相加函数,对应的两个参数的数据类型必须要保持一致,不然会报错。

如:tf.add(number1, number2)是对number1和number2的值相加,可以相加,都是int类型

tf.add(floatVar, number1)不能相加,因为floatVar是float类型,而number2是int类型

程序运行的结果如下图:

1.2 数据类型输入

代码如下:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;
using Tensorflow;

namespace TensorFlowNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
            ResourceVariable floatVar = tf.Variable<float>(1.2f, name: "float变量");
            //字符串的值不能出现中文,不然会报错
            ResourceVariable strVar = tf.Variable<string>("Hello World", name: "字符串变量");
            ResourceVariable boolVar = tf.Variable<bool>(false, name: "bool变量");
            Tensor number1 = tf.constant(2,name:"常量2名称");
            Tensor number2 = tf.constant(3,name:"常量2名称");
            Tensor addResult = tf.add(number1, number2);
            Tensor addResult2= tf.add(intVar, number1);
            Tensor addResult3 = tf.add(intVar.numpy(), number1);    //int类型和int类型相加正常
            //Tensor addResult4 = tf.add(floatVar, number1);  float类型和int类型相加会报错
           


            Console.WriteLine("intVar的数据类型为:" + intVar.dtype);
            Console.WriteLine("floatVar的数据类型为:" + floatVar.dtype);
            Console.WriteLine("strVar的数据类型为:" + strVar.dtype);
            Console.WriteLine("boolVar的数据类型为:" + boolVar.dtype);
            Console.WriteLine("addResult的数据类型为:" + addResult.dtype);


            //当然也可以使用print进行输出
            print("使用print函数输出intVar数值为:" + intVar.numpy() + " 变量名为:" + intVar.Name);


            Console.Read();
        }
    }
}

变量或者标量的dtype属性标识该变量或者标量的数据类型

程序运行结果如下:

1.3 声明二维数组变量

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;
using Tensorflow;

namespace TensorFlowNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //使用变量声明一维数组,2行4列的一维数组
            ResourceVariable array = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });
            Console.WriteLine("二维数组输出为:" + array.numpy());
            Console.WriteLine("二维数组的数据类型为:" + array.dtype);
            Console.Read();
        }
    }
}

代码中声明了一个2行4列的二维数组

代码运行结果如下:

1.4 形状输出

代码如下:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;
using Tensorflow;

namespace TensorFlowNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
            Tensor number1 = tf.constant(2, name: "常量2名称");
            Tensor number2 = tf.constant(3, name: "常量2名称");
            Tensor addResult = tf.add(number1, number2);
            //使用变量声明一维数组,2行4列的二维数组
            ResourceVariable array = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });

            //shape输出
            Console.WriteLine("intVar的shape输出:" + intVar.shape);
            Console.WriteLine("addResult的shape输出:" + intVar.shape);
            Console.WriteLine("二维数据的shape为:" + array.shape);
            Console.Read();
        }
    }
}

输出结果如下:

二 张量

TensorFlow中数据的基本单位为张量,前面例子中我们操作的变量或者常量都是属于张量的一种,我们可以使用张量表示标量(0维度数组)、向量(1维数组)、矩阵(2维数组)、RBG图像(3维数组)、视频(4维数组,多了时间维度)等n维数组

2.1 各个维度的张量表示方式

2.1.1 标量(0维数组)的张量表示如下:

cs 复制代码
ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
Tensor number1 = tf.constant(2, name: "常量2名称");

2.1.2 向量(1维的数组)的张量表示如下:

cs 复制代码
ResourceVariable var1 = tf.Variable(new[]{1,2,3});
Tensor var2 = tf.constant(new[] { 2,3,4 });

2.1.3 矩阵(2维数组)的张量表示如下:

cs 复制代码
ResourceVariable array = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });

2.1.4 RGB图像(3维数组)的张量表示如下:

cs 复制代码
ResourceVariable array1 = tf.Variable(new[,,] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } } , {{ 11, 22, 33, 4 }, { 55, 66, 77, 88 } } });

4维度的就偷个懒,就不写了,类似

2.2 可以通过张量的shape属性获取张量形状、dtype属性获取张量数据类型,方法numpy获取张量的值,代码例子如下:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Tensorflow.Binding;
using Tensorflow;

namespace TensorFlowNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ResourceVariable intVar0 = tf.Variable<int>(10, name: "int变量");
            ResourceVariable array1 = tf.Variable(new[] { 1, 2, 3, 4 });
            //使用变量声明一维数组,2行4列的二维数组
            ResourceVariable array2 = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });
            ResourceVariable array3 = tf.Variable(new[,,] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } } , {{ 11, 22, 33, 4 }, { 55, 66, 77, 88 } } });

            Console.WriteLine("0维张量的形状为:"+ intVar0.shape+"  数据类型为:"+ intVar0.dtype+" 值为:"+ intVar0.numpy());
            Console.WriteLine("1维张量的形状为:" + array1.shape + "  数据类型为:" + array1.dtype + " 值为:" + array1.numpy());
            Console.WriteLine("2维张量的形状为:" + array2.shape + "  数据类型为:" + array2.dtype + " 值为:" + array2.numpy());
            Console.WriteLine("3维张量的形状为:" + array3.shape + "  数据类型为:" + array3.dtype + " 值为:" + array3.numpy());


            Console.Read();
        }
    }
}

运行结果如下:

好了,本文内容到此结束

相关推荐
yngsqq6 分钟前
一键打断线(根据相交点打断)——CAD c# 二次开发
windows·microsoft·c#
B站计算机毕业设计超人16 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条20 分钟前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客25 分钟前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon28 分钟前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客52030 分钟前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神32 分钟前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
Ven%41 分钟前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
TENET信条1 小时前
day53 第十一章:图论part04
开发语言·c#·图论
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite