tensorflow2.0:
建议直接使用2.0版本,与之前1.x版本有着截然不同的风格,安装时推荐anaconda+pycharm,anaconda最大的好处是能分隔不同的虚拟环境,在pycharm中ctrl+shift+s可以调配环境。
一个端到端的开源机器学习平台
兼顾易用性和执行效率:
在程序调试阶段用动态图,快速建立模型、调试程序
在部署阶段,采用静态图机制,提高模型的性能和部署能力
创建张量:
张量由Tensor类实现,为Tensor对象
a = tf.constant(value, dtype, shape) 创建张量
dtype=tf.float32(浮点的32位要快很多)
value: 数字,numpy,list, bool ,字符串
a.numpy()转为numpy的函数
tf.cast(a,dtype=tf.float32) 改变张量数据类型
bool -> 数 1和0
数 -> bool 非0的都是True
tf.convert_to_tensor() 转为张量
tf.is_tensor()
tf.reshape(tensor,shape) -1为自动推导
isinstance(…, tf.Tensor/np.ndarray)
特殊张量:
tf.zeros(shape, dtype) 全0
tf.ones() 全1
tf.fill(dims, value) 元素全相等
tf.random.normal(shape, mean缺省0, stddev缺省1, dtype) 正态分布的随机数张量
tf.random.truncated_normal(……) 截断正态分布, 2倍标准差截断
tf.random.set_seed(8) 随机种子,对于种子相等的,则结果一样
tf.random.uniform(shape, minval前闭后开 , maxval,dtype) 均匀分布
tf.random.shuffle(张量或列表、……) 打乱第一维的张量
tf.range()
张量运算:
加减乘除:
tf.add(x,y) 加
tf.substract(x,y) 减
tf.multiply(x,y) 乘
tf.devide(x,y) 除
tf.math.mod(x,y) 取模
逐元素运算,并要求数据类型一致
幂指对数:
tf.pow(x,y) 幂次方,y可以使数字、张量
tf.square(x) 平方
tf.sqrt(x) 平方根
tf.exp(x) e的……次方
tf.math.log(x) ln,以e为底,换底公式
其他:
sign(x) 符号
abs(x) 绝对值
negative(x) 相反数
reciprocal(x) 倒数
ceil(x) 向上取整
floor(x) 向下取整
rint(x) 最接近的整数
round(x) 逐元素最接近的整数
maximum(x,y) 返回两tensor中的较大值
minimum(x,y) 较小值
cos(x),sin(x),tan(x)
acos(x)……
广播机制:
要求最后一个维度长度相等
矩阵:
tf.matmul(a,b)
或 a@b
取最后两维
统计数据:
reduce_num(tensor, axis)
reduce_mean(tensor, axis)最好转化为浮点数类型
reduce_max(tensor, axis)
reduce_min(tensor, axis)
如果不指定axis,则为全局统计值
求最值索引:
tf.argmax()
tf.argmax()
如果不指定axis,则默认为0
维度变换:
增加维度:
tf.expend_dims(input, axis) 增加维度为1
减少维度:(只能删除为1的维度)
tf.squeeze(input, axis) 减少维度,若不指定,则将为1的维度都删了
增加和删除维度,只能长度为1操作,只是改变了张量的视图,不改变张量的存储顺序
交换维度:
tf.transpose(a, perm) 二维数组则转置
改变了张量存储顺序
拼接张量:
tf.concat([tensors], axis在哪个轴上)
分割张量:
tf.split(value, num_or_size_splits(数或列表), axis=0)
拼接和分割,只能长度为1操作,只是改变了张量的视图,不改变张量的存储顺序
堆叠张量:
tf.stack(values, axis)
分解张量:
tf.stack(……)
可训练变量和自动求导:
tf.Variable(v,dtype)
改变值:v.assign()
两个参数都是布尔值,前者默认为False,为True时代表可以多次使用,但是最后要del tape
后者默认为True,为False需要手动添加监视 tape.watch(x) 这样x可以不是Variable
求二阶导数: