tensorflow1基础函数学习

news2024/9/19 10:35:56

学习准备:

所需的库:

tensorflow 1.12.0
numpy 1.19.5

基本初始化函数

1.1 理解张量

tensor:

多维数组(列表), 阶:张量的维数

维数名字栗子
0标量s = 1, 2, 3
1向量v = [1, 2, 3]
2矩阵m = [[1, 2], [3, 4]]
n张量t = [[[[(这里有n个方括号)…
张量可以是0-n阶的数组(列表)
张量数据类型:

tf.int, tf.float: 浮点型

-tf.int 32, tf.float 32, tf.float 64

tf.bool: 布尔型

  • tf.constant([True, False])

tf.string: 字符串型

  • tf.string(“hello, world”)
with tf.Session() as sess:
    a = np.arange(0, 5)
    b = tf.convert_to_tensor(a, dtype=tf.int64)
    b_value = sess.run(b)
    print(a, b)

输出结果:
在这里插入图片描述

  • 可以看到,b_value = sess.run(b)之后,b_value成了numpy格式数组。

输出结果:

[0 1 2 3 4] [0 1 2 3 4]

1.2 创建一个tensor

函数:

tf.zeros(维度),

tf.ones(维度),

tf.fill(维度, 指定值)

代码:

with tf.Session() as sess:
    a = tf.zeros([1, 2])
    b = tf.ones([1, 2])
    c = tf.fill([1, 2], 6)

    a_value = sess.run(a)
    b_value = sess.run(b)
    c_value = sess.run(c)
    print("a:", a_value, "b:", b_value, "c:", c_value)

运行结果:

a: [[0. 0.]] b: [[1. 1.]] c: [[6 6]]

函数:

正态分布:
tf.random.normal(维度, mean=均值, stddev=标准差)

截断式正态分布:
tf.random.truncated_normal(维度, mean=均值, stddev=标准差)

  • tf.random.truncated_normal随机生成的数据取值在均值加减两个标准差范围内

代码:

with tf.Session() as sess:
    a = tf.random.normal([1, 3], mean=4, stddev=2)
    b = tf.random.truncated_normal([1, 3], mean=4, stddev=2)
    a_value = sess.run(a)
    b_value = sess.run(b)
    print("a:", a_value, "b:", b_value)

输出结果:

a: [[2.6766534 3.4962902 4.4655743]] b: [[5.353275   6.081551   0.55957913]]

函数:
均匀分布随机数
tf.random.uniform(维度, minval=最小值, maxval=最大值)

代码:

with tf.Session() as sess:  # 均匀分布随机数
    a = tf.random.uniform([1, 2], minval=0, maxval=1)
    a_value = sess.run(a)
    print("a:", a_value)

输出结果:

a: [[0.94062424 0.09171367]]

类型转换与常见函数1

2.1 强制类型转换

tf.cast(张量名, dtype=数据类型)

2.2计算张量维度上元素的最小值或最大值

tf.reduce_min(张量名)
tf.reduce_max(张量名)

  • 栗子:
with tf.Session() as sess:
    x1 = tf.constant([1., 2., 3.], dtype=tf.float64)
    x2 = tf.cast(x1, tf.int32)
  
    sess.run(x1)
    sess.run(x2)
    print(x1)
    print(x2)
    print(sess.run(tf.reduce_min(x2)), sess.run(tf.reduce_max(x2)))

输出结果:

Tensor("Const:0", shape=(3,), dtype=float64)
Tensor("Cast:0", shape=(3,), dtype=int32)
1 3

2.3理解axis:

二维张量或数组中,可以通过调整axis等于0或1来控制执行维度

axis = 0,对列进行操作

axis = 1,对行进行操作

不指定axis,则所有元素参与运算

2.4 理解tf.Variable

这个函数将变量标记为可训练的,被标记的变量会在反向传播中标记自己的梯度信息

神经网络训练中,常用这个函数标记待训练的参数

with tf.Session() as sess:
    w = tf.Variable([[2, 3], [1, 4]])
    b = tf.Variable(tf.random.normal([2, 2], mean=0, stddev=1))
    print(w, b)

    init = tf.global_variables_initializer()
    sess.run(init)
    w_value = sess.run(w)
    b_value = sess.run(b)
    print(w_value, b_value)

输出结果:

<tf.Variable 'Variable:0' shape=(2, 2) dtype=int32_ref> <tf.Variable 'Variable_1:0' shape=(2, 2) dtype=float32_ref>

[[2 3]
 [1 4]] 
[[ 1.2650353   0.49283144]
 [ 0.13539286 -1.2500311 ]]

注意:

print(w, b) 打印的是变量 w 和 b 的 TensorFlow 对象的字符串表示, 而不是它们的值。
这是因为在 TensorFlow 1.x 中你需要先初始化所有变量,然后才能获取它们的值。

init = tf.global_variables_initializer()
sess.run(init)
这个操作就是初始化所有变量,
然后再用w_value = sess.run(w)来获取变量w的值

常用数学运算函数

3.1 四则运算

要求:两个张量维度相同

张量中对应元素进行四则运算

tf.add
tf.substract
tf.multiply
tf.divide
  • 栗子:
with tf.Session() as sess:
    x = tf.constant([[1, 2]])
    y = tf.constant([[3, 4]])
    a = tf.add(x, y)
    b = tf.subtract(x, y)
    c = tf.multiply(x, y)
    d = tf.divide(x, y)

    a = sess.run(a)
    b = sess.run(b)
    c = sess.run(c)
    d = sess.run(d)
    print(a, b, c, d)

输出:

[[4 6]] 
[[-2 -2]] 
[[3 8]] 
[[0.33333333 0.5       ]]

3.2 平方、次方、开方

函数:

tf.square
tf.pow
tf.sqrt

代码:

with tf.Session() as sess:  # 平方,次方与开方
    x = tf.constant([[4, 9], [1, 2]], dtype=float)
    pow = tf.pow(x, 3)
    square = tf.square(x)
    sqrt = tf.sqrt(x)

    pow = sess.run(pow)
    square = sess.run(square)
    sqrt = sess.run(sqrt)

    print(pow)
    print(square)
    print(sqrt)

输出结果:

[[ 64. 729.]
 [  1.   8.]]
[[16. 81.]
 [ 1.  4.]]
[[2.        3.       ]
 [1.        1.4142135]]

3.3 矩阵乘法

函数:

tf.matmul

代码:

with tf.Session() as sess:  # 矩阵乘法
    x = tf.constant([[4, 9], [1, 2]], dtype=float)
    y = tf.constant([[4], [1]], dtype=float)
    z = tf.matmul(x, y)
    z_value = sess.run(z)
    print(z_value)

输出结果:

[[25.]
 [ 6.]]

梯度计算与常见函数2

4.1 梯度计算

在 TensorFlow 1.x 中,梯度计算通常是通过 tf.gradients 函数来实现的

梯度计算代码:

import tensorflow as tf

w = tf.Variable([3.0, 5.0])  # 变量
loss = tf.pow(w, 2) * 2  # 函数
grad = tf.gradients(loss, w)  # 算梯度
init = tf.global_variables_initializer()  # 初始化

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(grad))

输出结果:

[array([12., 20.], dtype=float32)]

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

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

相关文章

uniapp 微信默认地图选点功能实现

效果图 配置项 微信公众平台-小程序配置 uniapp配置 上代码 <template><view class"content"><button click"toMap">请选择位置</button></view> </template><script setup lang"ts">function toMa…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时&#xff0c;每个小部件都被视为具有四个同心矩形的框&#xff1a;边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式&#xff1a; 边距超出边框。边框绘制在边…

【源码剖析】ThreadLocal 源码剖析

源码类注释 /*** This class provides thread-local variables. These variables differ from* their normal counterparts in that each thread that accesses one (via its* {code get} or {code set} method) has its own, independently initialized* copy of the variab…

鼠标录制工具怎么挑选?9款电脑鼠标录制工具分享(2024)

你知道鼠标录制工具吗&#xff1f;鼠标录制工具通过记录和回放用户的操作&#xff0c;帮助自动化重复性任务&#xff0c;提高工作效率和精确性。它可以帮助用户简化很多繁琐的操作步骤&#xff0c;非常适合运用在电脑自动化任务、游戏自动化中&#xff0c;给大家整理了2024年9款…

使用assembly插件来将外部文件夹打进jar包

目录&#xff1a; 1、pom文件的配置2、新建assembly的描述文件3、maven打包 1、pom文件的配置 <!--maven构建--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</ar…

代理模式(静态代理,动态代理,cglib代理)

文章目录 代理模式代理模式的角色静态代理案例代码抽象父类接口目标对象代理对象客户端使用输出结果 动态代理案例代码抽象父类与实现类代理工厂客户端 cglib代理引入依赖目标对象代理工厂客户端 代理模式 代理模式属于结构型的模式&#xff0c;通过代理对象来访问目标对象&am…

malloc底层实现

xv6实现的动态内存分配虽然只有不到100行代码&#xff0c;但却体现了动态内存分配的精髓&#xff0c;非常值得学习 xv6的内存布局 一谈到C语言的动态内存分配&#xff0c;就会想到堆以及malloc()和free()这两个函数。先来回顾一下XV6中的内存布局是怎样的&#xff0c;我们动态…

FPGA实训报告DAY 1(Verilog HDL)

实习日志与总结 日期&#xff1a;2024 年 7 月 10 日 星期三 姓名&#xff1a;XXX 一、实习日志 上午 9:00 - 9:30 按时到达工位&#xff0c;参加部门早会&#xff0c;了解了今天的实习任务和目标&#xff0c;即初步学习 FPGA 简介和 Verilog 基础语法知识。 9:30 - 10:30…

数据结构(5.2_1)——二叉树的基本定义和术语

二叉树的基本概念 二叉树是n(n>0)个结点的有限集合: 或者为空二叉树&#xff0c;即n0&#xff1b;或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一颗二叉树。 特点:每个结点至多只有两颗字数&#xff1b;左子树不能颠倒(二叉树…

2024牛客暑期多校第一场

H 一开始以为考后缀和&#xff0c;耽误了一会。后面直接看样例猜结论&#xff0c;数字乘位置为对答案的贡献 #include<bits/stdc.h>using namespace std;#define int long long #define PII pair<int,int>const int M1000000007;void solve() {int n;cin>>…

git 代理错误拒绝连接

git 克隆项目拒绝连接 现象 Failed to connect to 127.0.0.1 port 15732: 拒绝连接 问题描述 代理错误解决方法 取消代理 git config --global --unset http.proxy

MyBatis源码中的设计模式1

1. 建造者模式的应用 建造者模式属于创建类模式&#xff0c;通过一步一步地创建一个复杂的对象&#xff0c;能够将部件与其组装过程分开。用户只需指定复杂对象的类型&#xff0c;就可以得到该对象&#xff0c;而不需要了解其内部的具体构造细节。《Effective Java》中也提到&…

springboot的全局异常处理

主要有两个异常注解&#xff0c;RestControllerAdvice和 ExceptionHandler(Exception.class) 案例 package com.lwy.exception;import com.lwy.pojo.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotati…

类和对象的简述(c++篇)

开局之前&#xff0c;先来个小插曲&#xff0c;放松一下&#xff1a; 让我们的熊二来消灭所有bug 各位&#xff0c;在这祝我们&#xff1a; 放松过后&#xff0c;开始步入正轨吧。爱学习的铁子们&#xff1a; 目录&#xff1a; 一类的定义&#xff1a; 1.简述&#xff1a; 2…

飞睿智能UWB Tag蓝牙防丢器标签,宠物安全新升级,5cm精准定位测距不迷路

宠物早已成为许多家庭不可或缺的一员&#xff0c;它们用无条件的爱温暖着我们的心房&#xff0c;陪伴我们度过每一个平凡而温馨的日子。然而&#xff0c;随着宠物活动范围的扩大和外界环境的复杂多变&#xff0c;宠物走失的风险也随之增加。每一次出门遛弯&#xff0c;都像是心…

如何使用在线工具将手机相册中的图片转换为JPG格式

我们经常在手机相册中保存大量的图片&#xff0c;无论是家庭聚会的照片还是旅行的瞬间&#xff0c;每一幅图像都承载着珍贵的记忆。然而&#xff0c;有时候我们会遇到图片格式不兼容的问题&#xff0c;尤其是在需要将图片分享到特定平台或编辑时。 例如&#xff0c;某些社交平台…

PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用

硬件介绍 PCIE464运动控制卡是正运动推出的一款EtherCAT总线脉冲型、PCIE接口式的运动控制卡&#xff0c;可选6-64轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 PCIE464运动控制卡适合于多轴点位运动、插补运动、轨迹规…

Qt 多语言

记录Qt多语言的实现过程 目录 1.项目配置文件.pro配置 2.程序中的字符串用tr()封装 3.生成翻译文件 4.使用Qt语言家修改翻译文件 4.1使用Qt语言家打开 4.2 .更改文件配置 5. 生成qm文件 6.代码执行切换语言 6.1入口处 6.2 事件执行 0.效果 1.项目配置文件.pro配置 T…

观测云对接 Fluentd 采集业务日志最佳实践

概述 Fluentd 是一个开源数据收集器&#xff0c;专为简化日志管理和使日志数据更加易于访问、使用而设计。作为一个高度可扩展的工具&#xff0c;它能够统一数据收集和消费过程&#xff0c;使得构建实时分析的日志系统变得更加高效。 观测云目前已集成 Fluentd &#xff0c;可…

十、Java集合 ★ ✔(模块18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比较器排序、Collections、可变参数、Map】

day05 泛型,数据结构,List,Set 今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 ★ 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型…