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

最近到整一些数据清洗小工具, 数据导入数据库工具等... 有种感觉是, 之前我做分析师的时候, 啥工具都没有, 全部我自己造, 数据表整理, 业务整理, 建库建表, 自己写 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. .NET Core 托管堆内存泄露/CPU异常的常见思路

    常见的思路 内存泄露 托管内存暴涨大多数原因都是因为对象被GC Root(stack,gchandle,finalizequeue)持有,所以一直无法释放,所以观察的重点都在对象的可疑GC Root ...

  2. keycloak~关于社区认证的总结

    keycloak关于社区认证它有统一的设计,社区认证包括了github,microsoft,wechat,qq,dingtalk等等,当然你还可以扩展很多实现了oauth2协议的第三方社区,将它们对接 ...

  3. AD 测试点覆盖率的统计

    在用Altium Designer软件设计PCB时,有时会有统计这个工程的测试点覆盖率需求.在AD 中有2种类型的测试点:Fabrication testppoint(用于PCB的下线电气测试)和As ...

  4. Java01 - Scanner对象

    简介 之前我们学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征,我们可以通过Scanner ...

  5. Forest v1.5.13 发布,声明式 HTTP 框架,已超 1.8k star

    Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...

  6. VScode美化

    RESULT:EVA-初号机 配色 主题效果 1. 需要的东西 vs code background 插件 custom CSS and JS loader 插件 一些png素材,推荐网址: http ...

  7. antd+vue 中select组件的自定义后缀图标不显示问题记录

    根据项目需求,需要使用select组件,并自定义后缀图标,但是设置了没的效果,这是我的代码和效果图 后来查看代码发现需要给select组件加上showArrow属性,然后实现了效果,看效果图 这里记录 ...

  8. Effective Java理解笔记系列-第1条-何时考虑用静态工厂方法替代构造器?

    为什么写这系列博客? 在阅读<Effective Java>这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受:同时 ...

  9. 面试题-RabbitMQ

    前言 在面试题系列文章中,笔者本着效率的原则,没有总结RabbitMQ相关的知识,但是当其他知识点都总结完毕后,我发现如果面试中针对我们实际使用的RabbitMQ进行深入原理的提问或者说说框架使用的注 ...

  10. 基于UPD的快速局域网聊天室

    UPD与TCP对比: UDP是无连接的协议,也不保证可靠交付,只在IP数据报服务之上增加了很少的功能,主要是复用和分用以及差错检测的功能.这适用于要求源主机以恒定速率发送数据,允许网络拥塞时丢失数据, ...