项目再忙碌, 还是要抽出时间来学习的.

最近到整一些数据清洗小工具, 数据导入数据库工具等... 有种感觉是, 之前我做分析师的时候, 啥工具都没有, 全部我自己造, 数据表整理, 业务整理, 建库建表, 自己写 web , 前端(数据展示) ... 反而是我都自己干完了, 而且配置也不全; 而现在, 配置全了, 有后台前台展示工具 BI , 后台有 ETL 团队, 我自己也能开发... 结果现在反而效率降低了... 总是各种问题...真是感到, 还不是自己弄...所有的东西都掌握到自己的手里, 不至于这样东搞西搞, 难受的一批...

继续学习一波, 不管了. 这篇来练习 张量 tensor 的创建.

从Array, List 对象创建 Tensor

Python 的这些 "容器" 或者数据结构, 用的最多的必然是 List 了, 各种骚操作哇. 然后做数据分析处理, Pandas 啥的, 用的基本的都是 Numpy 的 ndarray 数组. 因此, 二者直接转为 Tensor 是非常自然的.

通过 tf.convert_to_tensor ( ) 即可将 array 和 list 转为 张量.

import numpy as np
import tensorflow as tf lst = [1, 2, 3, 4]
print(tf.convert_to_tensor(lst)) arr = np.array([[1, 2, 3.14], [4, 5, 6]])
print(tf.convert_to_tensor(arr))
tf.Tensor([1 2 3 4], shape=(4,), dtype=int32)

tf.Tensor(
[[1. 2. 3.14]
[4. 5. 6. ]], shape=(2, 3), dtype=float64)

Numpy 浮点数, 默认使用 float 64 精度来存储数据, 即转为 Tensor 类型为 tf.float64. 可以通过 tf.cast( ) 转换为 tf.float32 等.

可以发现, tf.constant( ) 和 tf.convert_to_tensor( ) 都能讲 array 或 list 转为 tensor. 版本问题吧, 就是取名的差别.

创建 全 0 或 全 1 张量

通过 tf.zeros( ) 和 tf.ones( ) 来创建.

这种场景几乎都是参数初始化. 比如线性变换 \(y = Wx + b\) ,将 权值矩阵 W 初始化全 1 的矩阵, 偏置 b 全为 0 向量.

tf.zeros([]), tf.ones([])
(<tf.Tensor: id=3, shape=(), dtype=float32, numpy=0.0>,
<tf.Tensor: id=4, shape=(), dtype=float32, numpy=1.0>)

创建全为 0, 全1 的向量, 参数 [ ] 用来指定 shape.

print(tf.zeros([1]))
print(tf.ones([1]))

创建全 0 或 1 的矩阵.

# 2x3 的矩阵, 值全为 0
print(tf.zeros([2,3])) # 2x3 的矩阵, 值全为 1
print(tf.ones([2,3]))
tf.Tensor(
[[0. 0. 0.]
[0. 0. 0.]], shape=(2, 3), dtype=float32) tf.Tensor(
[[1. 1. 1.]
[1. 1. 1.]], shape=(2, 3), dtype=float32)

创建自定义数值张量

通过 tf.fill(shape, value) 可以创建自定义 value 的张量.

# 创建 shape 为 0, 值为 -1 的 tensor (标量)
print(tf.fill([], -1)) # 创建 shape 为 5, 值为 -1 的 tensor (向量)
print(tf.fill([1], -1)) # 创建 shape 为 (3, 3) 值为 666 的 tensor (矩阵)
print(tf.fill([3,3], 666)) # 创建 shape 为 (3, 2, 2) 值为 999 的 tensor (3维张量)
print(tf.fill([3, 2, 2], 999))
tf.Tensor(-1, shape=(), dtype=int32)

tf.Tensor([-1], shape=(1,), dtype=int32)

tf.Tensor(
[[666 666 666]
[666 666 666]
[666 666 666]], shape=(3, 3), dtype=int32) tf.Tensor(
[[[999 999]
[999 999]] [[999 999]
[999 999]] [[999 999]
[999 999]]], shape=(3, 2, 2), dtype=int32)

创建概率分布的 Tensor

通过 tf.random.normal( ) 和 tf.random.uniform () 来生成最为常见的 高斯分布 和 均匀分布.

场景一般是用来做测试和辅助网络训练. 如在卷积神经网络中, 卷积核张量 \(W\) 初始化为高斯分布, 则非常有网络参数的训练. 再如在 GAN (对抗性生成网络) 中, 隐变量 z 一般采样自 均匀分布.

tf.random.normal (shape, mean=0.0, stddev=1.0) 即 \(N(\mu, \sigma)\)

tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32) 均匀分布哇.

# 生成 2 x 3 标准(0,1) 高斯分布的矩阵
print(tf.random.normal([2,3])) # 生成 2 x 3 均值为 1, 标准差为 2 的高斯分布
print(tf.random.normal([2,3], 1, 2)) # 生成 1 x 3 的 [1, 10] 均匀分布向量
print(tf.random.uniform([1,3], 1, 10)) # 生成 2 x 2 的 [1, 100] 整形, 且为均匀分布 的矩阵
print(tf.random.uniform([2,2], 1, 100, dtype=tf.int32))
tf.Tensor(
[[ 0.2804165 -0.08695418 -0.243429 ]
[ 1.5735217 0.91768235 1.2737458 ]], shape=(2, 3), dtype=float32) tf.Tensor(
[[-0.5737424 -0.19066274 -0.9355514 ]
[ 4.6325927 0.62451375 -0.69557965]], shape=(2, 3), dtype=float32) tf.Tensor([[7.61883 2.2297285 6.51745 ]], shape=(1, 3), dtype=float32) tf.Tensor(
[[20 23]
[67 11]], shape=(2, 2), dtype=int32)

创建序列张量

通过 tf.range() 来实现序列. 其中 tf.range(limit, delta=1)

# 跟 Python 的 range() 函数是一样的
print(tf.range(10)) print(tf.range(5, 10)) print(tf.range(1, 10, 2))
tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
tf.Tensor([5 6 7 8 9], shape=(5,), dtype=int32)
tf.Tensor([1 3 5 7 9], shape=(5,), dtype=int32)

小结

  • tf.constant() 和 tf.convert_to_tensor() 方法可将 array 和 list 转为 tensor
  • tf.zeros() 和 tf.ones() 可用来生成自定义 shap , 值全为 0 或 1 的张量
  • 自定义值的张量, 则可以通过 tf.fill() 来实现
  • tf.random.normal( ) 和 tf.random.uniform () 来生成最为常见的 高斯分布 和 均匀分布.
  • tf.range() 来生成序列的张量, 跟Python是一样的用法哦.

时间有限, 先到这了, 即便碎片化学习, 也是要贵在坚持, 持之以恒, 每天进步一点点.

TensorFlow 基础 (03)的更多相关文章

  1. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  2. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

  3. TensorFlow基础

    TensorFlow基础 SkySeraph  2017 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com Over ...

  4. TensorFlow基础笔记(0) 参考资源学习文档

    1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...

  5. TensorFlow基础笔记(3) cifar10 分类学习

    TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...

  6. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  7. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使 用节点表示抽象的数学计算,并使用 OP 表达计算的逻 ...

  8. day33-线程基础03

    线程基础03 6.用户线程和守护线程 用户线程:也叫工作线程,当线程的任务执行完或者通知方法结束.平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程 守护线程(Daem ...

  9. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

  10. tensorflow基础篇-1

    1.使用占位符和变量 import tensorflow as tf import numpy as np #-----创建变量并初始化----------- def first(): my_var= ...

随机推荐

  1. 动态编译 Java 的神器 Liquor v1.3.10 发布

    Liquor 是一个开源的轻量级 Java 动态编译器(零依赖,40KB),它可以在运行时编译 Java 字符串代码片段.类.方法等. 源码地址:https://gitee.com/noear/liq ...

  2. EasyExcel合并行处理并优化

    业务场景 由于业务需要导出如下图中订单数据和订单项信息,而一个订单对应多个订单项,所以会涉及到自定义合并行 1.简单处理项目使用的EasyExcel,经查找发现Excel种有个AbstractMerg ...

  3. Thymeleaf Split

    <th:block th:each="image : ${#strings.listSplit(goods.images, ';')}"> <img th:src ...

  4. docker - [01] docker入门

    弱小和无知不是生存的障碍,傲慢才是. -- <三体> 一.相关链接 Docker官网:https://www.docker.com/ 文档地址:https://docs.docker.co ...

  5. SSM - 狂神的项目示例

    出于对狂神的崇拜,总结SSM项目. 基本介绍 项目分层 基本介绍 项目名称:ssmbuild 介绍:通过书籍管理系统实现一个简单的SSM项目,可以作为其他Java Web项目的借鉴. 主要功能模块:查 ...

  6. 在鹅厂做java开发是什么体验

    离职已有好几个月,准备写一篇关于之前在腾讯做Java开发的经历,现在来谈谈在Java领域里,在腾讯做Java开发的体验.随便写写别较真. 首先,介绍一下腾讯里与Java相关的部门.主要有CDG(云与智 ...

  7. 【BUG】axios 长数字精度丢失问题

    问题原因 出现改问题是于javascript 整数范围问题 java 中 Long 类型 -2的63次方 - 2的63次方减去1 但是javascript整数范围确没有那么大,导致Long数字过大前端 ...

  8. nginx服务和uwsgi服务如何设置开机自启动

    上次学到了在云服务器下如何部署Django项目,用到了nginx服务和uwsgi服务,需要手工启动这2个服务的命令. 现在考虑如何设置开机自启动,为什么要这样考虑?因为服务器万一出问题,意外重启了,那 ...

  9. 密码编码学与网络安全 原理与实践(第七版)William Stallings---读书笔记(1.1-1.5)

    密码编码学与网络安全 原理与实践(第七版)William Stallings---读书笔记 第一部分 概览 第1章 计算机与网络安全概念 密码算法与协议又可分为4个主要领域: 对称加密 加密任意大小的 ...

  10. JOKER可视化开发工具迎来重大更新

    为紧跟行业前沿趋势,满足开发者日益增长的需求,我们于2025年3月13日对平台开展了全方位升级.此次更新聚焦前端交互的便捷性.服务端功能的强大性以及通用操作的流畅性,在多方面进行了深度优化.尤为值得一 ...