Tensorflow入门(四)

本文介绍了TensorFlow中的tf.where函数,其工作原理类似于C语言的三目运算符,根据条件选择输出。接着讲解了NumPy的随机数生成,包括使用np.random.RandomState设定种子以确保重复性。然后讨论了np.vstack用于按垂直方向叠加数组,要求数组同维。最后,提到了np.mgrid用于创建网格数组,np.ravel将多维数组拉直,以及np.c_用于数组配对。
TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

本小节主要进行代码扫盲

1)首先我们来学习一下tf.where()这个语句,其实有点类似C语言中的三目运算符? :
先上代码:

import tensorflow as tf

sess = tf.Session()
a = tf.constant([1, 2, 3, 1, 1])
b = tf.constant([0, 1, 3, 4, 5])
c = tf.where(tf.greater(a, b), a, b)
print("c:", sess.run(c))

运行结果如下:

c: [1 2 3 4 5]

其实从结果看也很清楚啦,如果where语句中对应位置a>b为true,则输出a,若为false,则输出b,所以最后输出结果为1,2,3,4,5也很好理解了。

2)利用np.random.RandomState.rand(维度)返回[0,1)之间的随机数
先上代码:

import numpy as np
rdm = np.random.RandomState(seed=1) #seed=常数,代表每次生成的随机数相同
a = rdm.rand() #返回一个随机标量
b = rdm.rand() #返回一个随机标量
c = rdm.rand(2, 3) #返回维度为2行3列随机数矩阵
d = rdm.rand(2, 3)
print("a:", a)
print("b:", d)
print("c:", b)
print("d:", c)

运行一次结果如下:

a: 0.417022004702574
b: [[0.39676747 0.53881673 0.41919451]
 [0.6852195  0.20445225 0.87811744]]
c: 0.7203244934421581
d: [[1.14374817e-04 3.02332573e-01 1.46755891e-01]
 [9.23385948e-02 1.86260211e-01 3.45560727e-01]]

① 生成的随机数均在[0,1)之间
② *.rand(维度),括号内维度是多少,就会生成这样维度的随机数
③ seed种子,只要将其设置为常数,不论是1或2或1234,起得作用都一样,都是保证每次生成的随机数相同,但并不是指上述代码中的a和b相同,c和d相同,而是每次运行,a、b、c、d和上一次相同,下面我们再运行第二次代码看一下效果:

a: 0.417022004702574
b: [[0.39676747 0.53881673 0.41919451]
 [0.6852195  0.20445225 0.87811744]]
c: 0.7203244934421581
d: [[1.14374817e-04 3.02332573e-01 1.46755891e-01]
 [9.23385948e-02 1.86260211e-01 3.45560727e-01]]

可见两次运行结果一致,便体现了设置seed种子的作用。

3)将几个数组按垂直方向叠加np.vstack(数组1,数组2,数组3,…)

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.array([7, 8, 9])
d = np.vstack((a, b, c))
print("d:\n", d)

运行结果d为:

d:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

注意,这里要叠加的数组必须是同维的,否则会报错,如下

ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 3 and the array at index 2 has size 4

这个报错原因写的很详细,因为维度不同,前两个数组是三维的,后一个是四维的,所以无法叠加。

4)最后来学习一下三个函数:np.mgrid[ ]、np.ravel( )、np.c_[]
① np.mgrid[起始值:结束值:步长,起始值:结束值:步长,…]
② x.ravel( ) 将x变为一维数组,“把 . 前变量拉直”
③ np.c_[ ]使返回的间隔数值点配对
np.c_[数组1,数组2,…]
还是要看具体代码和运行结果才能真正学会这三个函数:

import numpy as np
x, y = np.mgrid[1:3:1, 2:4:0.5]
grid = np.c_[x.ravel(), y.ravel()]
print("x:", x)
print("y:", y)
print("x.ravel", x.ravel())
print("y.ravel", y.ravel())
print("grid:\n", grid)

运行结果如下:

x: [[1. 1. 1. 1.]
 [2. 2. 2. 2.]]
y: [[2.  2.5 3.  3.5]
 [2.  2.5 3.  3.5]]
x.ravel [1. 1. 1. 1. 2. 2. 2. 2.]
y.ravel [2.  2.5 3.  3.5 2.  2.5 3.  3.5]
grid:
 [[1.  2. ]
 [1.  2.5]
 [1.  3. ]
 [1.  3.5]
 [2.  2. ]
 [2.  2.5]
 [2.  3. ]
 [2.  3.5]]

首先,np.mgrid生成的等差数组是左闭右开的,所以x = [1, 2],y=[2, 2.5, 3, 3.5],但因为上述代码中表达式是x, y = np.mgrid[1:3:1, 2:4:0.5],所以为了保证x和y的维度相同,最终x与y的值如上所示。
如果改成下述代码:

import numpy as np
x = np.mgrid[1:3:1]
y = np.mgrid[2:4:0.5]
print("x:", x)
print("y:", y)
print("x.ravel", x.ravel())
print("y.ravel", y.ravel())

输出即为:

x: [1 2]
y: [2.  2.5 3.  3.5]
x.ravel [1 2]
y.ravel [2.  2.5 3.  3.5]

其次,一开始不理解上面写的ravel拉直,从前面的结果也容易看出了;
最后np.c_的作用就是将数组配对成网格输出。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值