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


    环境搭建参考:

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

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

    声明变量:tf.Variable

    声明常量:tf.constant

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

    一  数据类型学习

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

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using static Tensorflow.Binding;
    7. using Tensorflow;
    8. namespace TensorFlowNetDemo
    9. {
    10. class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
    15. ResourceVariable floatVar = tf.Variable<float>(1.2f, name: "float变量");
    16. //字符串的值不能出现中文,不然会报错
    17. ResourceVariable strVar = tf.Variable<string>("Hello World", name: "字符串变量");
    18. ResourceVariable boolVar = tf.Variable<bool>(false, name: "bool变量");
    19. Tensor number1 = tf.constant(2,name:"常量2名称");
    20. Tensor number2 = tf.constant(3,name:"常量2名称");
    21. Tensor addResult = tf.add(number1, number2);
    22. Tensor addResult2= tf.add(intVar, number1);
    23. Tensor addResult3 = tf.add(intVar.numpy(), number1); //int类型和int类型相加正常
    24. //Tensor addResult4 = tf.add(floatVar, number1); float类型和int类型相加会报错
    25. Console.WriteLine("intVar数值为:" + intVar.numpy()+ " 变量名为:"+intVar.Name);
    26. Console.WriteLine("floatVar数值为:" + floatVar.numpy() + " 变量名为:" + floatVar.Name);
    27. Console.WriteLine("strVar数值为:" + strVar.numpy() + " 变量名为:" + strVar.Name);
    28. Console.WriteLine("boolVar数值为:" + boolVar.numpy() + " 变量名为:" + boolVar.Name);
    29. Console.WriteLine("addResult数值为:" + addResult.numpy());
    30. Console.WriteLine("addResult2数值为:" + addResult2.numpy());
    31. Console.WriteLine("addResult3数值为:" + addResult3.numpy());
    32. Console.Read();
    33. }
    34. }
    35. }

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

    通过tf.Variable("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  数据类型输入

    代码如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using static Tensorflow.Binding;
    7. using Tensorflow;
    8. namespace TensorFlowNetDemo
    9. {
    10. class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
    15. ResourceVariable floatVar = tf.Variable<float>(1.2f, name: "float变量");
    16. //字符串的值不能出现中文,不然会报错
    17. ResourceVariable strVar = tf.Variable<string>("Hello World", name: "字符串变量");
    18. ResourceVariable boolVar = tf.Variable<bool>(false, name: "bool变量");
    19. Tensor number1 = tf.constant(2,name:"常量2名称");
    20. Tensor number2 = tf.constant(3,name:"常量2名称");
    21. Tensor addResult = tf.add(number1, number2);
    22. Tensor addResult2= tf.add(intVar, number1);
    23. Tensor addResult3 = tf.add(intVar.numpy(), number1); //int类型和int类型相加正常
    24. //Tensor addResult4 = tf.add(floatVar, number1); float类型和int类型相加会报错
    25. Console.WriteLine("intVar的数据类型为:" + intVar.dtype);
    26. Console.WriteLine("floatVar的数据类型为:" + floatVar.dtype);
    27. Console.WriteLine("strVar的数据类型为:" + strVar.dtype);
    28. Console.WriteLine("boolVar的数据类型为:" + boolVar.dtype);
    29. Console.WriteLine("addResult的数据类型为:" + addResult.dtype);
    30. //当然也可以使用print进行输出
    31. print("使用print函数输出intVar数值为:" + intVar.numpy() + " 变量名为:" + intVar.Name);
    32. Console.Read();
    33. }
    34. }
    35. }

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

    程序运行结果如下:

    1.3  声明二维数组变量

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using static Tensorflow.Binding;
    7. using Tensorflow;
    8. namespace TensorFlowNetDemo
    9. {
    10. class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. //使用变量声明一维数组,2行4列的一维数组
    15. ResourceVariable array = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });
    16. Console.WriteLine("二维数组输出为:" + array.numpy());
    17. Console.WriteLine("二维数组的数据类型为:" + array.dtype);
    18. Console.Read();
    19. }
    20. }
    21. }

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

    代码运行结果如下:

    1.4  形状输出

    代码如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using static Tensorflow.Binding;
    7. using Tensorflow;
    8. namespace TensorFlowNetDemo
    9. {
    10. class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. ResourceVariable intVar = tf.Variable<int>(10, name: "int变量");
    15. Tensor number1 = tf.constant(2, name: "常量2名称");
    16. Tensor number2 = tf.constant(3, name: "常量2名称");
    17. Tensor addResult = tf.add(number1, number2);
    18. //使用变量声明一维数组,2行4列的二维数组
    19. ResourceVariable array = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });
    20. //shape输出
    21. Console.WriteLine("intVar的shape输出:" + intVar.shape);
    22. Console.WriteLine("addResult的shape输出:" + intVar.shape);
    23. Console.WriteLine("二维数据的shape为:" + array.shape);
    24. Console.Read();
    25. }
    26. }
    27. }

    输出结果如下:

    二   张量

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

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

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

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

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

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

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

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

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

    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获取张量的值,代码例子如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using static Tensorflow.Binding;
    7. using Tensorflow;
    8. namespace TensorFlowNetDemo
    9. {
    10. class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. ResourceVariable intVar0 = tf.Variable<int>(10, name: "int变量");
    15. ResourceVariable array1 = tf.Variable(new[] { 1, 2, 3, 4 });
    16. //使用变量声明一维数组,2行4列的二维数组
    17. ResourceVariable array2 = tf.Variable(new[,] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } });
    18. ResourceVariable array3 = tf.Variable(new[,,] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } } , {{ 11, 22, 33, 4 }, { 55, 66, 77, 88 } } });
    19. Console.WriteLine("0维张量的形状为:"+ intVar0.shape+" 数据类型为:"+ intVar0.dtype+" 值为:"+ intVar0.numpy());
    20. Console.WriteLine("1维张量的形状为:" + array1.shape + " 数据类型为:" + array1.dtype + " 值为:" + array1.numpy());
    21. Console.WriteLine("2维张量的形状为:" + array2.shape + " 数据类型为:" + array2.dtype + " 值为:" + array2.numpy());
    22. Console.WriteLine("3维张量的形状为:" + array3.shape + " 数据类型为:" + array3.dtype + " 值为:" + array3.numpy());
    23. Console.Read();
    24. }
    25. }
    26. }

    运行结果如下:

    好了,本文内容到此结束

  • 相关阅读:
    【论文阅读】Semantic Models for the First-stage Retrieval- A Comprehensive Review
    HPE财报:计算存储微降,智能边缘大幅增长
    无人驾驶汽车的相关技术,无人驾驶相关技术知识
    一些工具/网站自用总结
    地塞米松-PLGA纳米粒|共载吉西他滨和辛伐他汀的PLGA聚合物纳米粒|艾地苯醌-PLGA纳米粒(齐岳)
    使用4G模块(EC200T)发送UDP数据到内网PC端(内网穿透)
    C++设计模式之——组合模式
    9.5-9.9 小知识点
    C++ 字符串格式化方法
    运算符重载(个人学习笔记黑马学习)
  • 原文地址:https://blog.csdn.net/zxy13826134783/article/details/134232338