开发者学堂课程【深度学习框架 TensorFlow 入门:张量的修改与运算】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/773/detail/13543
张量的修改与运算
内容简介
一、ndarray 属性的修改
二、形状变化
三、张量的数学运算
一、ndarray 属性的修改
(1)类型的修改
ndarray.astype(type)
ndarray.tostring()
代码如下:
def tensor_ demo():
……
#张量的演示
……
; return:
tensor1 = tf. constant(4.0)
tensor2 = tf. constant((1, 2, 3, 4])
linear_ squares = tf. constant([[4], [9], [16], [25]], dtype=tf. int32)
print ("tensor1:\n", tensor1)
print ("tensor2:\n", tensor2)
print ("linear_ squares_before:\n", linear_ squares )
#张量类型的修改
l_ cast = tf. cast(linear_ squares, dtype=tf. float32)
print ("linear_ squares_after:\n", linear_ squares )
print("l_cast:\n", l_cast)
return None
(2)形状的修改
ndarray.reshape(shape)
加上-1表示自动计算形状
ndarray.resize(shape)
reshape 与 resize 的区别,reshape 会返回一个新的数组,而resize 是就地修改原来的 ndarray。
二、形状变化
TensorFlow 的张量具有两种形状变换,动态形状和静态形状
tf.reshape
tf.set_shape
关于动态形状和静态形状必须符合以下规则
(1)静态形状
只有在形状完全没有固定下来的情况才能更新静态形状
tensor.set_shape(shape)
转换静态形状的时候,1-D到1-D, 2-D到2-D, 不能跨阶数改变形状
对于已经固定的张量的静态形状的张量,不能再次设置静态形状
代码案例:
#更新/改变静态形状
#定义占位符
#形状没有完全固定下来的静态形状
a_p = tf.placeholder(dtype=tf. float32, shape= (None, None])
b_P = tf.placeholder(dtype=tf. float32, shape= (None, 10])
c_p = tf.placeholder(dtype=tf. float32, shape=[3, 2])
print("a_ p:\n", a_p)
print("b_ p:\n", b_p)
print("c_ p:\n", c_p)
#更新形状未确定的部分
a_p.set_shape([2,3])
b_p.set_shape([2,10])
print(“a_p:\n”,a_p)
print(“b_p:\n”,b_p)
return None
(2)动态形状
通过 tf.reshape(tensor,shape)改变动态形状
不会改变原始的 tensor,返回新的改变形状后的 tensor
tf.reshape() 动态创建新张量时,张量的元素个数必须匹配
代码案例:
a_p=tf.placeholder(dtype=tf.float32,shape=[None,None])
……
print("a_ p:\n", a_p)
……
# 动态形状修改
a_p_reshape = tf. reshape(a_p, shape=(2, 3, 1])
print("a_p:\n", a_p)
print("a_p_reshape:\n", a_p_reshape)
return None
三、张量的数学运算
算术运算符
基本数学函数
矩阵运算
reduce 操作
序列索引操作
详细请参考:
https://www.tensorflow.org/versions/r1.8/api guides/python/math ops
这些 API 使用,我们在使用的时候介绍,具体参考文档