30天从入门到精通TensorFlow1.x第一天,如何创建张量

news2024/11/25 4:34:06

文章目录

  • 一、TensorFlow基本概念
    • 1. 什么是TensorFlow
    • 2. TensorFlow的组成
    • 3. TensorFlow的三个重要模型
  • 二、TensorFlow的重要底层库
    • 1. 先简单来个 helloWord
    • 2. 张量
      • 什么是张量
      • 如何创建张量
      • 创建张量
        • (1). 通过定义常量来进行创建张量
        • (2). 通过操作张量来进行创建张量
        • (3). 通过占位符来进行创建张量
        • (4). 通过python对象来进行创建张量
    • 3. 变量

一、TensorFlow基本概念

1. 什么是TensorFlow

TensorFlow 是一个由 Google 开发的开源机器学习框架,可以用于构建各种类型的人工智能应用程序,例如图像识别、语音识别、自然语言处理等。它通过数据流图的方式描述计算任务,使得开发者可以轻松地搭建训练各种复杂的模型。TensorFlow 支持分布式计算,可以在多个CPUGPU上运行,从而加快模型的训练速度。同时,TensorFlow 社区也提供了丰富的文档和示例代码,方便开发者学习和使用。

2. TensorFlow的组成

TensorFlow 由两个主要组件组成:图(Graph)会话(Session)

  1. 图(Graph)是 TensorFlow 的核心概念,它描述各种计算任务之间的依赖关系,可以看作是一个有向无环图(DAG)。在 TensorFlow 中,每个节点(Node)表示一种操作(Operation)每条边(Edge)表示数据(Tensor)的传递。开发者通过创建图定义模型结构计算流程

  2. 会话(Session)则负责执行图中的计算任务。它可以将计算任务分配到不同的设备上,并管理计算过程中的资源分配和释放。开发者通过创建会话来运行模型并获取结果。

3. TensorFlow的三个重要模型

  1. 数据模型:TensorFlow 中的基本数据单位张量(Tensor),它可以看作是一个多维数组,支持各种数值类型。在 TensorFlow 中,所有的中间结果和参数都以张量的形式存在,开发者可以通过操作张量来定义模型的计算流程

  2. 编程模型:TensorFlow 提供了一种类似于数据流图的编程模型,开发者需要先构建一个计算图(Graph),图中的节点(Node)表示各种计算操作(Operation)边(Edge)表示数据(Tensor)的依赖关系。然后,开发者可以创建一个会话(Session),将计算任务分配到各种设备上并执行计算。TensorFlow 还提供了灵活的控制流和函数定义方式,方便开发者实现各种复杂的模型。

  3. 执行模型:TensorFlow 的计算过程主要由两个阶段组成,即构建阶段执行阶段。在构建阶段,开发者通过定义计算图描述模型的计算流程,并设置各种参数和超参数。在执行阶段,开发者创建一个会话并运行计算图,通过输入不同的数据来获取计算结果。同时,TensorFlow 还支持异步计算和分布式计算,可以加快模型的训练速度。

二、TensorFlow的重要底层库

在实际开发中,我们会经常与这些名词打交道,主要有:张量、常量、操作、占位符、变量、数据流图、计算图、多cpu或者GPU训练等。这些耳熟能详的名词概念,是我们构造更高级的TensorFlow模块的重要基石。

1. 先简单来个 helloWord

有个大致感觉

import tensorflow as tf

#TODO 创建一个会话
test = tf.Session()

#TODO 创建一个常数张量
hello = tf.constant("hello word")

#TODO 运行
print(test.run(hello))

在这里插入图片描述
在TensorFlow中有两种会话:Session()和InteractiveSession(),在上面的例子中使用方式一样,但是在实际开发中我使用Session()更多。

2. 张量

什么是张量

  1. 张量是tf进行计算的基本元素基本数据结构,基本上我们只用弄清楚这一个数据结构就能熟练使用tf。
  2. 张量是一个n维数据集合,有形状类型来标识。
    张量维数
    形状表示每个维度大小的列表;
    例如:[1,2,3,4] 形状是 (1,4)的二维张量,也就是一个包含 4 个元素的行向量(row vector)
    [1,2,3,4] 是一个一维数组,也可以称为向量(vector),因此它的秩为 1。在 TensorFlow 中,秩指的是张量(Tensor)的维数,例如标量的秩为 0向量的秩为 1矩阵的秩为 2,以此类推。
import tensorflow as tf
#一个包含 4 个元素的行向量(row vector)
x = tf.constant([[1, 2, 3, 4]])
print(x.shape)  # 输出 (1, 4)
   在例如:
   [8,] 表示一个形状为 (8,) 的一维张量,也就是一个包含 8 个元素的向量(vector)。在 TensorFlow 中,可以用以下代码创建一个形状为 (8,) 的张量:
import tensorflow as tf
x = tf.constant([8])
print(x.shape)  # 输出 (1,)

如何创建张量

一般创建张量比较常用的手段有:

  1. 通过定义常数,操作,变量的手段
  2. 构建模型是用的比较多的 占位符手段
  3. 以及一些特别的 将数组,列表等数据类型转换为张量

创建张量

(1). 通过定义常量来进行创建张量

张量是一个n维数据集合,由形状类型来标识。

tf.constant() 源代码

@tf_export(v1=["constant"])
def constant_v1(
    value, 
    dtype=None, 
    shape=None, 
    name="Const", 
    verify_shape=False):

完美贴合概念…

看下实践代码:

import tensorflow as tf

#TODO value, dtype=None, shape=None, name="Const", verify_shape=False
test1 = tf.constant(5,name='test')

print("test1:(name=test)",test1)

最后的打印结果,对照张量是一个n维数据集合,由形状类型来标识。
在这里插入图片描述如果运行结果的话:需要创建会话,然后执行运算:

import tensorflow as tf


#TODO 创建一个会话
test = tf.Session()

#TODO value, dtype=None, shape=None, name="Const", verify_shape=False
test1 = tf.constant(5,name='test')

print("test1:(name=test)",test1)

print("run test1:",test.run(test1))

在这里插入图片描述

(2). 通过操作张量来进行创建张量

#TODO 创建一个会话
test = tf.Session()

#TODO value, dtype=None, shape=None, name="Const", verify_shape=False
test1 = tf.constant(5,name='test1')

test2 = tf.constant(8,name="test1")
'''
tf中有很多运算函数,这里仅仅是一个代表。可以看tf社区
'''

op1 = tf.add(test1,test2)  #执行加法
print("op1:",op1) #打印张量信息
print("run op1:",test.run(op1)) #运算结果

打印结果:
在这里插入图片描述

(3). 通过占位符来进行创建张量

这个是很重要的,因为在实际构建模型中会经常用到这个.

tf.placeholder() #来看下源代码
@tf_export(v1=["placeholder"])
def placeholder(dtype, shape=None, name=None):
#构造的时候要定义函数中信息

例如:

import tensorflow as tf

#TODO 创建一个会话
test = tf.Session()

#TODO
test1 = tf.placeholder(tf.float32,shape=(1,),name='test1')
test2 = tf.placeholder(tf.float32,shape=(1,),name='test2')

op1 = tf.add(test1,test2)
print('tensor test1:',test1)
print('tensor test1:',test2)
print('tensor op1:',op1)
print('run tensor op1:',test.run(op1,feed_dict={test1:[5],test2:[8]}))  #占位符号运算需要传值
'''
传值使用的run()操作中的 feed_dict参数,指定字典

'''

在这里插入图片描述

(4). 通过python对象来进行创建张量

上面有说到:特别的 将数组,列表等数据类型转换为张量

主要使用的函数就是, tf.convert_to_tensor()
该函数可以将如:列表,数组等转换为张量

@tf_export(v1=["convert_to_tensor"])
def convert_to_tensor(value,
                      dtype=None,
                      name=None,
                      preferred_dtype=None,
                      dtype_hint=None):
  1. 创建0维张量
import tensorflow as tf


#TODO 创建一个会话
test = tf.Session()

#TODO value,dtype=None,name=None,preferred_dtype=None,dtype_hint=None):

test1 = tf.convert_to_tensor(9.0,dtype=tf.float32)
print('test1:',test1)
print('run test1:',test.run(test1))

在这里插入图片描述

  1. 通过列表,数组来定义1维张量
import tensorflow as tf
import numpy as np
from pprint import pprint

#TODO 创建一个会话
test = tf.Session()

#TODO value,dtype=None,name=None,preferred_dtype=None,dtype_hint=None):
data = np.array([1,5,8,9,65]) #创建数组
print('data shape:',data.shape)
test1 = tf.convert_to_tensor(data,dtype=tf.float32)
print('test1:',test1)
print('run test1:',test.run(test1))

在这里插入图片描述

  1. 通过矩阵定义2维
#TODO 创建一个会话
test = tf.Session()

#TODO value,dtype=None,name=None,preferred_dtype=None,dtype_hint=None):

data = np.array([[5,8,8,8,8],[5,6,6,6,6],[5,5,5,5,5]])
print('data shape:',data.shape)
test1 = tf.convert_to_tensor(data,dtype=tf.float32)
print('test1:',test1)
print('run test1:',test.run(test1))

在这里插入图片描述

  1. 创建3维,这个在nlp中会经常用到
import tensorflow as tf
import numpy as np
from pprint import pprint

#TODO 创建一个会话
test = tf.Session()

#TODO value,dtype=None,name=None,preferred_dtype=None,dtype_hint=None):
data = np.array([[[1,5,8,9,65],
                  [1,5,8,9,65]],
                 [[1,5,8,9,65],
                  [1,5,8,9,65]],
                 [[1,5,8,9,65],
                  [1,5,8,9,65]]]) #创建数组
print('data shape:',data.shape)
test1 = tf.convert_to_tensor(data,dtype=tf.float32)
print('test1:',test1)
print('run test1:',test.run(test1))

在这里插入图片描述

  1. 无缝转换

注意:TensorFlow可以将numpy的ndarray无缝转换为TensorFlow张量,反之亦然。

import tensorflow as tf
import numpy as np

#将 NumPy 数组转换为 TensorFlow 张量
a = np.array([1, 2, 3])
b = tf.convert_to_tensor(a)
print(b)  # 输出 Tensor("Const:0", shape=(3,), dtype=int64)

# 将 TensorFlow 张量转换为 NumPy 数组
c = b.numpy()
print(c)  # 输出 [1 2 3]

但是:NumPy 数组和 TensorFlow 张量的类型必须一致,例如都是浮点型或者整型。如果类型不一致,则需要进行类型转换。

3. 变量

下次咱们一起讨论,重要概念:变量以及通过定义变量来创建张量,以及如何过去变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习笔记21——常用API

常用API 常用APIMath类Math的常用方法 System类System类常用方法 Object类Object类常用方法 Arrays类Arrays常用方法 基本类型包装类Integer类的概述和使用int和String的相互转换自动装箱和拆箱 日期类Date类Date类的常用方法 SimpleDateFormat类SimpleDateFormat的构造方法Sim…

【计算机网络实验】静态路由协议和RIP协议仿真实验

实验内容  静态路由协议和RIP协议仿真实验 实验目的 1 路由器及路由协议基础知识 2 静态路由配置实验 (1)掌握静态路由和RIP的配置方法; (2)掌握通过静态路由和RIP方式实现网络的连通性; (3…

什么是品牌推广?品牌推广的基本概念及注意要点

品牌推广是企业进行营销活动的关键之一,而现代市场竞争激烈,如何进行有效的品牌推广也成为企业最为关心的问题之一。本文将为大家介绍品牌推广的基本概念、策略以及注意事项。 一、品牌推广的基本概念 品牌推广是指企业通过多种手段,以宣传产…

电脑软件:键盘按键修改器——keytweak使用介绍

对你的电脑键盘的布局不满意、键盘上的某个按键坏掉了等等键盘问题如何解决?有了KeyTweak这一切就可以轻松解决了,KeyTweak是一个免费软件程序,使用它可让你重新映射键盘键。如果您改变主意并想将其改回原样,只需点击一下即可容易…

如何拍摄家具

产品可视化在几乎所有企业中都至关重要,尤其是电子商务,93%的消费者认为视觉外观是购买决策的关键因素。对于家具公司也是一样的。这是您在市场上建立知名度、吸引潜在客户并让他们购买的方式之一。更不用说如今,客户的要求比以往任何时候都高…

Spring Boot中使用WebSocket

文章目录 为什么要用WebSocket?WebSocket的握手阶段Spring Boot中使用WebSocket添加WebSocket依赖服务器代码编写WebSocketSession如何获取用户信息?创建管理类管理用户与会话客户端代码 为什么要用WebSocket? 我们往往需要一些这样的场景&a…

BGP状态机

BGP协议基本概念 BGP是一种外部网管协议(EGP),与OSPF、RIP等内部网管协议(IGP)不同,其着眼点不在于自动发现网络拓扑,而在于AS之间选择最佳路由和控制路由的传播。 自治系统AS( Autonomous System) 由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。 …

使用select实现TCP并发服务器模型

文章目录 前言一、select是什么?1.1 高级IO模型1.2 select实现1.3 select缺点: 二、使用select实现TCP并发服务器模型1.引入库2.TCP服务器端3. TCP服务器端3. 运行结果 总结 前言 本期主要分享的是对于select的使用,使用select实现TCP并发服务器模型&am…

JSR-133/Java内存模型(JMM)规范

by Doug Lea, with help from members of the JMM mailing list. 原文地址 The JSR-133 Cookbook for Compiler Writers 重排序(Reorderings)Volatiles and MonitorsFinal Fields 内存屏障(Memory Barrires)屏障类别数据依赖和屏障之间的关系原子指令与屏障之间的相互作用 屏…

总结885

5月小结 数学做了1800基础部分, 英语背了7篇文章 每日必复习(5分钟) 画思维导图1~15讲 学习内容: 英语:继续 背诵《we stand on the same starting point》 数学:进步本题目,我知道为啥总会…

嵌入式调试技巧-代码自动初始化

代码自动初始化 概述 在嵌入式开发过程中,可能会遇到初始化代码自动初始化,比如RTT中就运用到这项技术。那么初始化代码是如何做到自动化调用的呢? 在嵌入式实际开发过程中,往往需要对 bsp 部分进行外设配置,以及一…

springboot+vue+java在线考试系统 试题库组卷系统

这次开发的精品在线试题库系统有管理员,教师,学生三个角色。管理员功能有个人中心,专业管理,学生管理,教师管理,试卷管理,试题管理,考试管理。教师可以管理试题和试卷,查…

基于C#制作一个贪吃蛇小游戏

基于C#制作一个贪吃蛇小游戏,简单耐玩,操作简单。 一、项目创建1.1、创建1.2、素材准备1.3、界面绘制1.4、设置定时器1.5、获取键盘事件1.6、游戏结束事件二、帮助类2.1、坐标DTO2.2、果实DTO2.3、移动DTO结语一、项目创建 1.1、创建 打开Visual Studio,右侧选择创建新项目…

AutoGPT 使用教程及上手体验(一分钟配置可用)

ChatGPT 是新一代 AI 文本助手,可以帮助解决我们在多个领域的问题。 在某些复杂问题上,ChatGPT 需要经过不断的调教与沟通,才能得到接近正确的答案。 当你是某个领域的专家时,你很容易做到这一点。 但是,在你不熟悉…

【Linux】文件的压缩和解压

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、压缩格式 2、压缩软件 3、tar 命令简介 4、tar 命令压缩 5、总结 1、压缩格式 在市面上有非常多的压缩格式,…

蓝牙技术|苹果Apple Watch新专利,可监测用户更多健康指标

根据美国商标和专利局(USPTO)近日公示的清单,苹果获得了一项 Apple Watch 相关的专利,可以在表带嵌入 NFC、RFID 和蓝牙等组件,从而实现某些特定功能。 在苹果的构想中,未来的 Apple Watch 可以“识别”表…

BR 5AP920.1505-01 模拟电阻式触摸屏

材料编号: 5AP920.1505-01 描述: 15英寸XGA彩色TFT显示屏模拟电阻式触摸屏安装深度小无风扇运行可以用显示链接卡或PPC300升级 自动化面板AP920,15英寸XGA彩色TFT显示屏,带触摸屏(电阻式),3个USB 2.0接口,用于自动化面板链接的…

万方 protobuf 反序列化

protobuf 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。 在网络传输方面,相比传统的json,有着更快、更小,且加密性好的特点。 在实际应用中,万方数据库官网发送的请求&…

03 【数据代理 事件处理】

03 【数据代理 事件处理】 1.数据代理 了解数据代理需要js的一些知识:Object.defineProperty(),属性标志,属性描述符,getter,setter。。。 1.1数据代理 建议学习文章地址: https://zh.javascript.info/p…

MathType7.4永久中文Mac+Win全平台版本

MathType7.4版是一款功能强大、专业实用、应用范围广的数学公式编辑器软件,这款软件采用了简体中文操作界面并且完美兼容office、wps等一系列常见办公工具,这样就能够很好的为相关用户省去了许多繁琐的操作步骤,用户在这里可以轻轻松松进行公…