Keras(七)TF2中基础的数据类型API介绍

2024-03-26 15:48

本文主要是介绍Keras(七)TF2中基础的数据类型API介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文将介绍如下内容:

  • tf.constant
  • tf.strings
  • tf.ragged.constant
  • tf.SparseTensor
  • tf.Variable

一,tf.constant常量

1,定义tf.constant常量
t = tf.constant([[1., 2., 3.], [4., 5., 6.]])
print(t)#----output------------
tf.Tensor(
[[1. 2. 3.][4. 5. 6.]], shape=(2, 3), dtype=float32)
2,根据index索引切片

tf.constant可以使用索引进行切片操作

t = tf.constant([[1., 2., 3.], [4., 5., 6.]])
print(t[..., 1:])
print(t[:, 1])#----output------------
tf.Tensor(
[[2. 3.][5. 6.]], shape=(2, 2), dtype=float32)
tf.Tensor([2. 5.], shape=(2,), dtype=float32)
3,算子操作
t = tf.constant([[1., 2., 3.], [4., 5., 6.]])
print(t+10)
print(tf.square(t))
print(t @ tf.transpose(t))	# 矩阵与其转置相乘#----output------------
tf.Tensor(
[[11. 12. 13.][14. 15. 16.]], shape=(2, 3), dtype=float32)
tf.Tensor(
[[ 1.  4.  9.][16. 25. 36.]], shape=(2, 3), dtype=float32)
tf.Tensor(
[[14. 32.][32. 77.]], shape=(2, 2), dtype=float32)
4,与numpy之间的转换
print(t.numpy())
print(np.square(t))
np_t = np.array([[1., 2., 3.], [4., 5., 6.]])
print(tf.constant(np_t))#----output------------
[[1. 2. 3.][4. 5. 6.]]
[[ 1.  4.  9.][16. 25. 36.]]
tf.Tensor(
[[1. 2. 3.][4. 5. 6.]], shape=(2, 3), dtype=float64)
5,零维数据的定义和转换
# Scalars
t = tf.constant(2.718)
print(t.numpy())
print(t.shape)#----output------------
2.718
()

二,tf.strings字符串常量

1,纯英文字符的UTF8编码对应码
t = tf.constant("cafe")
print(t)
print(tf.strings.length(t))
print(tf.strings.length(t, unit="UTF8_CHAR"))
print(tf.strings.unicode_decode(t, "UTF8"))#----output------------
tf.Tensor(b'cafe', shape=(), dtype=string)
tf.Tensor(4, shape=(), dtype=int32)
tf.Tensor(4, shape=(), dtype=int32)
tf.Tensor([ 99  97 102 101], shape=(4,), dtype=int32)
2,含中文字符的UTF8编码对应码
t = tf.constant(["cafe", "coffee", "咖啡"])
print(tf.strings.length(t))
print(tf.strings.length(t, unit="UTF8_CHAR"))
r = tf.strings.unicode_decode(t, "UTF8")
print(r)#----output------------
tf.Tensor([4 6 6], shape=(3,), dtype=int32)
tf.Tensor([4 6 2], shape=(3,), dtype=int32)
<tf.RaggedTensor [[99, 97, 102, 101], [99, 111, 102, 102, 101, 101], [21654, 21857]]>

三,tf.ragged.constant

在定义TF常量时,如果数据类型不是标准的矩阵,可以使用tf.ragged.constant来处理

1,tf.ragged_tensor的索引切片操作
r = tf.ragged.constant([[11, 12], [21, 22, 23], [], [41]])
print(r)
print(r[1])
print(r[1:2])#------output------
<tf.RaggedTensor [[11, 12], [21, 22, 23], [], [41]]>
tf.Tensor([21 22 23], shape=(3,), dtype=int32)
<tf.RaggedTensor [[21, 22, 23]]>
2,tf.ragged_tensor的行拼接操作
r = tf.ragged.constant([[11, 12], [21, 22, 23], [], [41]])
r2 = tf.ragged.constant([[51, 52], [], [71]])
print(tf.concat([r, r2], axis = 0))#------output------
<tf.RaggedTensor [[11, 12], [21, 22, 23], [], [41], [51, 52], [], [71]]>
3,tf.ragged_tensor的列拼接操作

注意: 对于列拼接,需要行数必须相同,否则会报错!

r = tf.ragged.constant([[11, 12], [21, 22, 23], [], [41]])
r3 = tf.ragged.constant([[13, 14], [15], [], [42, 43]])
print(tf.concat([r, r3], axis = 1))#------output------
<tf.RaggedTensor [[11, 12, 13, 14], [21, 22, 23, 15], [], [41, 42, 43]]>
4,将tf.RaggedTensor 转化为 tf.Tensor(使用0来补空位)

注意: 因为tf.RaggedTensor为不规则矩阵,所以转化时会使用0来补空位,填补在真实值后。

r = tf.ragged.constant([[11, 12], [21, 22, 23], [], [41]])
print(r.to_tensor())#------output------
tf.Tensor(
[[11 12  0][21 22 23][ 0  0  0][41  0  0]], shape=(4, 3), dtype=int32)

四,tf.SparseTensor

tf.ragged.constant中的填充数只能在真实值的后面,可以使用tf.SparseTensor类型解决此问题。

1,tf.SparseTensor的定义
s = tf.SparseTensor(indices = [[0, 1], [1, 0], [2, 3]],values = [1., 2., 3.],dense_shape = [3, 4])
print(s)#------output------
SparseTensor(indices=tf.Tensor(
[[0 1][1 0][2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
2,将tf.SparseTensor转为tf.Tensor密集矩阵
s = tf.SparseTensor(indices = [[0, 1], [1, 0], [2, 3]],values = [1., 2., 3.],dense_shape = [3, 4])
print(tf.sparse.to_dense(s)) # ---output------
tf.Tensor(
[[0. 1. 0. 0.][2. 0. 0. 0.][0. 0. 0. 3.]], shape=(3, 4), dtype=float32)

注意:若indices位置颠倒,tf.SparseTensor无法转为tf.Tensor密集矩阵.可先使用tf.sparse.reorder排序。

s5 = tf.SparseTensor(indices = [[0, 2], [0, 1], [2, 3]],values = [1., 2., 3.],dense_shape = [3, 4])
print(s5)
s6 = tf.sparse.reorder(s5)
print(tf.sparse.to_dense(s6))#-----output----------
SparseTensor(indices=tf.Tensor(
[[0 2][0 1][2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
tf.Tensor(
[[0. 2. 1. 0.][0. 0. 0. 0.][0. 0. 0. 3.]], shape=(3, 4), dtype=float32)
3,tf.SparseTensor的计算
s = tf.SparseTensor(indices = [[0, 1], [1, 0], [2, 3]],values = [1., 2., 3.],dense_shape = [3, 4])
print(s)
# 将tf.SparseTensor转为tf.Tensor密集矩阵
print(tf.sparse.to_dense(s)) 
# tf.SparseTensor的计算
s2 = s * 2.0
print(s2)# tf.SparseTensor不支持加法计算
try:s3 = s + 1
except TypeError as ex:print(ex)s4 = tf.constant([[10., 20.],[30., 40.],[50., 60.],[70., 80.]])
print(tf.sparse.sparse_dense_matmul(s, s4))#---output----------
SparseTensor(indices=tf.Tensor(
[[0 1][1 0][2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
tf.Tensor(
[[0. 1. 0. 0.][2. 0. 0. 0.][0. 0. 0. 3.]], shape=(3, 4), dtype=float32)
SparseTensor(indices=tf.Tensor(
[[0 1][1 0][2 3]], shape=(3, 2), dtype=int64), values=tf.Tensor([2. 4. 6.], shape=(3,), dtype=float32), dense_shape=tf.Tensor([3 4], shape=(2,), dtype=int64))
unsupported operand type(s) for +: 'SparseTensor' and 'int'
tf.Tensor(
[[ 30.  40.][ 20.  40.][210. 240.]], shape=(3, 2), dtype=float32)

五,tf.Variable

1 ,tf.Variable的定义
v = tf.Variable([[1., 2., 3.], [4., 5., 6.]])
print(v)			# 打印变量
print(v.value()) 	# 将变量变成tensor
print(v.numpy())	# 打印具体的数值# ---output------
<tf.Variable 'Variable:0' shape=(2, 3) dtype=float32, numpy=
array([[1., 2., 3.],[4., 5., 6.]], dtype=float32)>
tf.Tensor(
[[1. 2. 3.][4. 5. 6.]], shape=(2, 3), dtype=float32)
[[1. 2. 3.][4. 5. 6.]]
2,tf.Variable的赋值
# assign value
v.assign(2*v)
print(v.numpy())
v[0, 1].assign(42)
print(v.numpy())
v[1].assign([7., 8., 9.])
print(v.numpy())# ----output-----
[[ 2.  4.  6.][ 8. 10. 12.]]
[[ 2. 42.  6.][ 8. 10. 12.]]
[[ 2. 42.  6.][ 7.  8.  9.]]

注意:变量的赋值只能用assign函数,不能使用=赋值

try:v[1] = [7., 8., 9.]
except TypeError as ex:print(ex)# ----output-----
'ResourceVariable' object does not support item assignment

这篇关于Keras(七)TF2中基础的数据类型API介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849005

相关文章

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式