Tensorflow学习笔记②——Tensorflow常用函数及用法

本篇文章主要介绍Tensorflow常用函数及他们的用法。

在练习Tensorflow常用函数时,编译器先要输入如下代码

import tensorflow as tf
import numpy as np

tensorflow_version = tf.__version__
gpu_available = tf.test.is_gpu_available()

一、基本概念

tf.constant

利用tf.constant(张量内容, dtype=数据类型)来创建张量,第一个参数表示张量内容,第二个参数表示张量的数据类型。

a = tf.constant([1, 5], dtype=tf.int64)
print(a)
print(a.dtype)
print(a.shape)

在这里插入图片描述

tf.convert_to_tensor

利用tf.convert_to_tensor(数据名, dtype=数据类型)可以将numpy格式转换为Tensor格式,第一个参数表示numpy格式,第二个参数表示张量的数据类型。

a = np.arange(0, 5)
b = tf.convert_to_tensor(a, dtype=tf.int64)
print(a)
print(b)

在这里插入图片描述

tf.zeros、tf.ones、tf.fill

tf.zeros(维度)创建全为0的张量,tf.ones(维度)创建全为1的张量,tf.fill(维度, 指定值)创建全为指定值的张量

a = tf.zeros([2, 3])
b = tf.ones(4)
c = tf.fill([2, 2], 9)
print(a)
print(b)
print(c)

在这里插入图片描述

tf.random.normal

tf.random.normal(维度, mean=均值, stddev=标准差)生成正态分布的随机数,默认均值为0,标准差为1

a = tf.random.normal([2, 2], mean=0.5, stddev=1)

tf.random.truncated_normal

tf.random.truncated_normal(维度, mean=均值, stddev=标准差)生成截断式正态分布的随机数,若随机生成的数值在( μ \mu μ-2 σ \sigma σ, μ \mu μ+2 σ \sigma σ)之外则重新生成

b = tf.random.truncated_normal([2, 2], mean=0.5, stddev=1)

tf.random.uniform

tf.random.uniform(维度, minval=最小值, maxval=最大值)生成指定维度的均匀分布随机数,用minval确定随机数的最小值,用maxval确定随机数的最大值,最小、最大值是前闭后开的区间。

c = tf.random.uniform([2, 2], minval=0, maxval=1)

在这里插入图片描述

二、常用函数

tf.cast

tf.cast(张量名, dtype=数据类型)强制将Tensor转换为该数据类型

x1 = tf.constant([1., 2., 3.], dtype=tf.float64)
print(x1)
x2 = tf.cast(x1, tf.int64)
print(x2)

在这里插入图片描述

tf.reduce_min、tf.reduce_max

tf.reduce_min(张量名)计算张量维度上最小值
tf.reduce_max(张量名)计算张量维度上最大值

x1 = tf.constant([1., 2., 3.], dtype=tf.float64)
print(x1)
x2 = tf.cast(x1, tf.int64)
print(x2)
print(tf.reduce_min(x2), tf.reduce_max(x1))

在这里插入图片描述

tf.reduce_mean、tf.reduce_sum

tf.reduce_mean(张量名, axis=操作轴),axis=0表示按列求均值,axis=1表示按行求均值
tf.reduce_sum(张量名, axis=操作轴),axis=0表示按列求和,axis=1表示按行求和

x = tf.constant([[1, 2, 3], [2, 2, 3]])
print(x)
print(tf.reduce_mean(x))
print(tf.reduce_sum(x, axis=1))

在这里插入图片描述

tf.Variable

可利用tf.Variable(initial_value, trainable, validate_shape, name)函数将变量标记为“可训练”的,被他标记的变量,会在反向传播中记录自己的梯度信息。其中,initial_value默认为None,可以搭配Tensorflow随机生成函数来初始化参数;trainable默认为True,表示可以后期被算法优化,如果不想该变量被优化,可以将其改程False;validate_shape默认为True,形状不接受更改,如果需要后期进行更改,可以将其改程False;name默认为None,给变量确认名称。

w = tf.Variable(tf.random_normal([2, 2], mean=0, stddev=1))

tf.where

tf.where(
	condition, x=None, y=None, name=None
)

参数

  • condition: bool型张量.
  • x: 与y shape相同的张量.
  • y: 与x shape相同的张量.

返回:shape与x相同的张量.

print(tf.where([True, False, True, False], [1,2,3,4], [5,6,7,8]))

在这里插入图片描述

四则运算

tf.add(张量1, 张量2)实现两个张量的对应元素相加
tf.subtract(张量1, 张量2)实现两个张量的对应元素相减
tf.multiply(张量1, 张量2)实现两个张量的对应元素相乘
tf.divide(张量1, 张量2)实现两个张量的对应元素相除
注意:只有维度相同的张量才可以进行四则运算

幂次运算

tf.square(张量名)计算某个张量的平方
tf.pow(张量名, n次方数)计算某个张量的n次方
tf.sqrt(张量名)计算某个张量的开方

tf.matmul

tf,matmul(矩阵1, 矩阵2)实现两个矩阵相乘

a = tf.ones([3, 2])
b = tf.fill([2, 3], 3.)
print(tf.matmul(a, b))

在这里插入图片描述

tf.data.Dataset.from_tensor_slices

tf.data.Dataset.from_tensor_slices((输入特征, 输出特征))切分传入张量的第一维度,生成输入特征/标签对,构建数据集,此函数对Tensor格式和Numpy格式均适用,其切分的是第一维度,表征数据集中数据的数量,之后切分batch等操作都以第一维度为基础

features = tf.constant([12, 23, 10, 17])
labels = tf.constant([0, 1, 1, 0])
dataset = tf.data.Dataset.from_tensor_slices((features, labels))
print(dataset)
print("------")
for element in dataset:
    print(element)

在这里插入图片描述

tf.GradientTape

tf.GradientTape()函数搭配with结构计算损失函数在某一张量处的梯度

with tf.GradientTape() as tape:
    w = tf.Variable(tf.constant(3.))
    loss = tf.pow(w, 2)
grad = tape.gradient(loss, w)
print(grad)

在这里插入图片描述

enumerate

enumerate(列表名)枚举出每一个元素,并在元素前配上对应的索引号,常在for循环中使用。

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    print(i, element)

在这里插入图片描述

tf.one_hot

tf.one_hot(待转换数据, depth=几分类)函数实现用独热码表示标签,在分类问题中很常见,标记类别为0和1,其中1表示是,0表示非。
注意:待转换数据中各元素值应小于depth,若待转换元素值大于等于depth,则会输出为[0, 0, …, 0]

classes = 3
labels = tf.constant([0, 2, 1])
output = tf.one_hot(labels, depth=classes)
print(output)

在这里插入图片描述

classes = 3
labels = tf.constant([0, 3, 1])
output = tf.one_hot(labels, depth=classes)
print(output)

在这里插入图片描述

tf.nn.softmax

tf.nn.softmax()函数可以使前向传播的输出值符合概率分布,进而与独热码形式的标签做比较。

y = tf.constant([0.69, 0.258, 2.558])
y_pro = tf.nn.softmax(y)
print("After Softmax, y_pro is: ", y_pro)

在这里插入图片描述

assign_sub、assign_add

可利用assign_sub、assign_add对参数实现自更新。使用此函数前需要利用tf.Variable定义变量w为可训练(自更新)
注意:直接调用tf.assign_sub会报错,要用w.assign_sub

w = tf.Variable(4)
w.assign_sub(1)
print(w)
w.assign_add(2)
print(w)

在这里插入图片描述

tf.argmax、tf.argmin、tf.argsort

tf.argmax(张量名, axis=操作轴)返回一个列表,表示张量沿指定维度最大值的索引,行为1,竖为0。
tf.argmaxin(张量名, axis=操作轴)返回一个列表,表示张量沿指定维度最小值的索引,行为1,竖为0。
tf.argsort(张量名, axis=操作轴)返回和张量一样维度的张量,表示张量的各个数值占行/竖的索引,行为1,竖为0。

test = np.array([[1, 2, 3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
print(test)
print(tf.argmax(test, axis=0))
print(tf.argmax(test, axis=1))
print("-------")
print(tf.argsort(test, axis=0))
print(tf.argsort(test, axis=1))

在这里插入图片描述

Numpy常用函数

np.random.RandomState.rand()

np.random.RandomState.rand(维度):返回一个[0,1)之间的随机数

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

在这里插入图片描述

np.vstack()

np.vstack(数组1,数组2):将两个数组按垂直方向叠加

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

在这里插入图片描述

np.mgrid[ ]、.ravel( )、np.c_[ ]

np.mgrid[ ] 返回间隔数值点,可同时返回多组
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('grid:\n', grid)

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值