深度学习框架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.hqwc.cn/news/162251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.UML面向对象类图和关系

文章目录 4种静态结构图类图类的表示类与类之间的关系依赖关系(Dependency)关联关系(Association)聚合(Aggregation)组合(Composition)实现(Realization)继承/泛化(Inheritance/Generalization)常用的UML工具reference欢迎访问个人网络日志🌹🌹知行空间🌹🌹 4种静态结构…

MySQL索引优化与查询优化

1. 索引失效案例 MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了访问高效数据的方法&#xff0c;并且加快查询的速度&#xff0c;因此索引对查询的速度有着至关重要的影响。 使用索引可以快速地定位表中的某条记录&#xff0c;从而提高数据库查询的速…

mybatis在springboot当中的使用

1.当使用Mybatis实现数据访问时&#xff0c;主要&#xff1a; - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法&#xff1a; - 必须定义在某个接口中&#xff0c;这样的接口通常使用Mapper作为名称的后缀&#xff0c;例如AdminMapper - Mybatis框架底…

Swift语言配合HTTP写的一个爬虫程序

下段代码使用Embassy库编写一个Swift爬虫程序来爬取jshk的内容。我会使用proxy_host为duoip&#xff0c;proxy_port为8000的爬虫IP服务器。 使用Embassy库编写一个Swift爬虫程序可以实现从网页上抓取数据的功能。下面是一个简单的步骤&#xff1a; 1、首先&#xff0c;需要在X…

RabbitMQ 消息应答与发布

目录 一、消息应答 1、自动应答&#xff08;默认&#xff09; 2、手动消息应答的方法 ​编辑 3、消息重新入队 4、手动应答案列与效果演示 二、RabbitMQ持久化 1、队列持久化 2、消息持久化 三、不公平分发&#xff08;能者多劳&#xff0c;弱者少劳&#xff09; 1、…

PHP语言、B/S手术麻醉临床信息管理系统源码

手术麻醉临床信息管理系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程&#xff0c;实现麻醉手术过程的信息数字化&#xff0c;自动生…

Blender vs 3ds Max:谁才是3D软件的未来

在不断发展的3D建模和动画领域&#xff0c;两大软件巨头Blender和3ds Max一直在争夺顶级地位。 随着技术的进步和用户需求的演变&#xff0c;一个重要问题逐渐浮出水面&#xff1a;Blender是否最终会取代3ds Max&#xff1f;本文将深入探讨二者各自的优势和劣势、当前状况&…

Flink SQL时间属性和窗口介绍

&#xff08;1&#xff09;概述 时间属性&#xff08;time attributes&#xff09;&#xff0c;其实就是每个表模式结构&#xff08;schema&#xff09;的一部分。它可以在创建表的 DDL 里直接定义为一个字段&#xff0c;也可以在 DataStream 转换成表时定义。 一旦定义了时间…

数票通批量开票小妙招,双11开票不用愁

每年双十一都是电商企业和财务“疯狂”的日子&#xff0c;随着疫情的回暖&#xff0c;消费者的消费能力蹭蹭上涨&#xff0c;商家的口袋盆满钵满&#xff0c;而财务的加班永无休止&#xff0c;批量开票成为财务人摆脱双十一加班的必备技能。 面对双十一狂欢&#xff0c;相信不少…

高校双十一快递爆仓警告,做快递代取能不能赚钱

今年双11期间的快递数量预计将超过往年。今年以来&#xff0c;快递行业竞争日益激烈&#xff0c;特别是价格战的竞争更是白热化。电商平台也针对低价展开了一系列促销活动&#xff0c;这种策略有望刺激快递单量增长。低价吸引力激发了用户的购物欲望&#xff0c;将导致高校快递…

【数据结构】树与二叉树(二):树的表示C语言:树形表示法、嵌套集合表示法、嵌套括号表示法 、凹入表示法

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语5.1.4 树的表示1&#xff0e;树形表示法2&#xff0e;嵌套集合表示法结构体创建树主函数 3&#xff0e;嵌套括号表示法结构体创建树嵌套括号表示法主函数 4&#xff0e;凹入表示法结构体创建树凹入表示法…

【Mybatis小白从0到90%精讲】15: Mybatis配置打印SQL日志

文章目录 前言配置日志实现前言 日志(Log)是每个程序都不可或缺的一部分,它可以帮助开发人员诊断和调试问题。Mybatis,作为一款备受赞誉的ORM框架,自然也提供了强大的日志功能。 它不仅提供了内置的标准实现,还支持集成各种主流的日志框架,让我们可以轻松地查看最终执行…