tensorflow1基础函数学习

学习准备:

所需的库:

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)

输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5r0iH7c8-1721236679529)(https://i-blog.csdnimg.cn/direct/2344f400f6d64af1bc29eb68c2c99b1a.png)]

  • 可以看到,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)]
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值