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

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

环境搭建参考:

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

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

声明变量:tf.Variable

声明常量:tf.constant

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

一  数据类型学习

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

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  数据类型输入

代码如下:

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  声明二维数组变量

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  形状输出

代码如下:

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维数组)的张量表示如下:

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

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

ResourceVariable var1 = tf.Variable(new[]{1,2,3});
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获取张量的值,代码例子如下:

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();}}
}

运行结果如下:

好了,本文内容到此结束

http://www.lryc.cn/news/220516.html

相关文章:

  • Pandas指定多列组合形成新列
  • 硕鼠——视频下载利器
  • Android 13.0 Launcher3 app图标长按去掉应用信息按钮
  • 10 DETR 论文精读【论文精读】End-to-End Object Detection with Transformers
  • 高数笔记05:不定积分与定积分
  • 【代码随想录】算法训练计划13
  • Python图像处理之OpenCV模块
  • 动态规划-丑数
  • 【MogDB/openGauss的三种函数稳定性关键字】
  • java-对Integer.MAX_VALUE做加法
  • 【学习笔记】[COCI2018-2019#1] Teoretičar
  • 64位Office API声明语句第112讲
  • C++ day3作业
  • 蓝桥杯官网填空题(方格计数)
  • 【系统架构设计】计算机公共基础知识: 6 知识产权与标准化
  • 【新】致远OA从前台XXE到RCE漏洞分析
  • 宠物领养系统jsp+servlet+mysql
  • MySQL 数据库安全性练习题
  • 如何使用Node.js快速创建HTTP服务器并实现公网访问本地Server
  • zigbee路灯无线通讯机制
  • asp.net docker-compose添加kafka和redis和zookeeper
  • 2024上海国际人工智能展(CSITF)“创新驱动发展·科技引领未来”
  • 汽车标定技术(三)--XCP协议如何支持测量功能
  • [c++]你最喜爱的stringstream和snprintf性能深入剖析
  • windows 用vs创建cmake工程并编译opencv应用项目生成exe流程简述
  • QML 仪表盘小示例
  • 力扣206. 反转链表
  • 深度学习之基于Tensorflow卷积神经网络花卉识别系统
  • leetcode链表
  • Kali Linux渗透测试的艺术