Tensorflow2.0 学习笔记 入门篇
人工智能三大派系
人工智能是让机器具备人的思维和意识的一门科学,经过多年的发展分为三大派系,分别是行为主义,符号主义,连接主义
- 行为主义:基于控制论,构建感知/动作控制系统(控制论:如平衡,行走,避障等自适应控制系统)
- 符号主义:基于算数逻辑表达式,求解问题描述为表达式,在求解表达式(可用公式描述,实现理性思维,如专家系统)
- 连接主义:用计算机仿出神经网络连接关系,让计算机具备感性思维
深度学习前置知识
-
张量(Tensor):多维数组(列表)
-
阶:张量的维数
维数 阶 名字 例子 0 0 0 − - − D D D 0 0 0 标量 s c a l a r scalar scalar s = 1 s=1 s=1 1 1 1 − - − D D D 1 1 1 向量 v e c t o r vector vector v = [ 1 , 2 , 3 ] v=[1,2,3] v=[1,2,3] 2 2 2 − - − D D D 2 2 2 矩阵 m a t r i x matrix matrix m = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] m=[[1,2,3],[4,5,6],[7,8,9]] m=[[1,2,3],[4,5,6],[7,8,9]] n n n − - − D D D n n n 张量 t e n s o r tensor tensor t = [ [ [ . . . t=[[[... t=[[[... -
数据类型
tf.int,tf.float,tf.int32
– tf.float32,tf.float64tf.bool
– tf.constant([True,False])tf.string
– tf.constant(“Hello,world!”)
基本用法之张量
创建张量
tf.constant(张量内容,dtype=数据类型(可选))
import tensorflow as tf
a = tf.constant([1,5],dtype=tf.int64)
print(a)
print(a.dtype)
print(a.shape)
将numpy的数据类型转换成Tensorflow数据类型 tf.convert_to_tensor(数据名,dtype=数据类型)
import numpy as np
a = np.arange(0,5)
b = tf.convert_to_tensor(a,dtype=tf.int64)
print(a)
print(b)
全零 tf.zeros,全一 tf.ones,其它数字填充 tf.fill
## 维度:一维直接写个数 二维用[行,列] 多维用[n,m,j,k...]
# 创建全为0的张量 tf.zeros(维度)
a = tf.zeros([2,3])
# 创建全为1的张量 tf.ones(维度)
b = tf.ones(4)
# 创建全为指定值的张量 tf.fill(维度,指定值)
c = tf.fill([2,2],9)
print(a)
print(b)
print(c)
随机数(正态分布/阶段式正态分布)及均匀分布
# 生成正态分布的随机数,默认均值为0,标准差为1 tf.random.normal(维度,mean=均值,stddev=标准差)
d = tf.random.normal([2,2],mean=0.5,stddev=1)
print(d)
# 生成阶段式正态分布的随机数 tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
e = tf.random.truncated_normal([2,2],mean=0.5,stddev=1)
print(e)
# 生成均匀分布随机数[minval,maxval) tf.random.uniform(维度,minval,maxval)
v = tf.random.uniform([2,3],minval=0,maxval=3)
print(v)
常用函数
强制类型转换函数 tf.cast(张量名,dtype=数据类型)
# 强制tensor转换为该数据类型 tf.cast(张量名,dtype=数据类型)
x1 = tf.constant([1.,2.,3.],dtype=tf.float64)
print(x1)
计算张量维度上的最大/最小值 (最大:tf.reduce_min(张量名) 最小:tf.reduce_max(张量名))
# 计算张量维度上元素的最小值 tf.reduce_min(张量名)
x2 = tf.cast(x1,tf.int32)
print(x2)
# 计算张量维度上元素的最大值 tf.reduce_max(张量名)
print(tf.reduce_min(x2))
print(tf.reduce_max(x2))
理解axis在一个二维数组或数组中,可以通过调整axis等于0或1控制执行维度
-
axis=0代表跨行,axis=1代表
-
如果不指定axis,则所有元素参与运算
x = tf.constant([[1,2,3],[2,2,3]]) # 计算张量沿着指定维度的平均值 print(tf.reduce_mean(x)) print(tf.reduce_sum(x,axis=1))
Tensorflow中的数学运算
-
对应元素的四则运算:tf.add,tf.subtract,tf.multiply,tf.divide
-
平方,次方与开方:tf.square,tf.pow,tf.sqrt
-
矩阵乘:tf.matmul
# tf.Variable()将变量标记为"可训练",被标记的变量会在反向传播中记录梯度信息。神经网络中,常用该函数标记待训练参数 # tf.Variable(初始值) w = tf.Variable(tf.random.normal([2,2],mean=0,stddev=1)) print(w) a = tf.ones([1,3]) b = tf.fill([1,3],3.) print(a) print(b)
实现两个张量的对应元素相加 tf.add(张量1,张量2)
print(tf.add(a,b))
实现两个张量的对应元素相减 tf.subtract(张量1,张量2)
print(tf.subtract(a,b))
实现两个张量的对应元素相乘 tf.multiply(张量1,张量2)
print(tf.multiply(a,b))
实现两个张量的对应元素相除 tf.divide(张量1,张量2)
print(tf.divide(a,b))
a = tf.fill([1,2],3.)
print(a)
# 计算某个张量的平方 tf.square(张量名)
print(tf.pow(a,3))
# 计算某个张量的n次方 tf.pow(张量名,n次方数)
print(tf.square(a))
# 计算某个张量的开方 tf.sqrt(张量名)
print(tf.sqrt(a))
# 实现两个矩阵的相乘 tf.matmul(矩阵1,矩阵2)
a = tf.ones([3,2])
b = tf.fill([2,3],3.)
print(tf.matmul(a,b))
制作数据集,将数据集输入输出绑定 data = tf.data.Dataset.from_tensor_slices((输入标签,标签))
# 切分传入张量的第一维度,生成输入特征/标签对,构建数据集
# data = tf.data.Dataset.from_tensor_slices((输入标签,标签))
# 注意: Numpy和Tensor格式都可用该语句读入数据
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)
for element in dataset:
print(element)
tf.GradientTape,with结构记录计算过程,gradient求出张量的梯度
with tf.GradientTape() as tape:
w = tf.Variable(tf.constant(3.0))
loss = tf.pow(w,2)
grad = tape.gradient(loss,w)
print(grad)
枚举 enumerate(列表名) 是python的内建函数,它可以用来遍历每个元素(如:列表,元组或字符串),组合:【索引,元素】,常在for循环中使用
seq = ['one','two','three']
for i,element in enumerate(seq):
print(i,element)
独热编码 tf.one_hot(带转换数据,depth=类别数):在分类问题中常用独热编码做标签,标记类别:1表示是,0表示非
例子:
动物类别 | 猫 | 狗 | 虎 |
---|---|---|---|
猫 | 1 1 1 | 0 0 0 | 0 0 0 |
狗 | 0 0 0 | 1 1 1 | 0 0 0 |
虎 | 0 0 0 | 0 0 0 | 1 1 1 |
classes = 3
labels = tf.constant([1,0,2])# 输入的元素值最小为0,最大为2
output = tf.one_hot(labels,depth=classes)
print(output)
归一化函数 tf.softmax 函数
y = tf.constant([1.01,2.01,-0.66])
y_pro = tf.nn.softmax(y)
print("After softmax,y_pro is",y_pro)
递减函数tf.assign_sub(递减的数),常用于随机梯度下降法更新模型参数
w = tf.Variable(4)
w.assign_sub(1)
print(w)
张量沿指定维度最大值的索引 tf.argmax(张量名,axis=操作轴)
import numpy as np
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))# 返回每一行最大值的索引