北京大学Tensorflow2.0学习笔记 -- 入门篇

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.float64

    tf.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控制执行维度

  1. axis=0代表跨行,axis=1代表

  2. 如果不指定axis,则所有元素参与运算

    x = tf.constant([[1,2,3],[2,2,3]])
    # 计算张量沿着指定维度的平均值
    print(tf.reduce_mean(x))
    print(tf.reduce_sum(x,axis=1))
    

Tensorflow中的数学运算

  1. 对应元素的四则运算:tf.add,tf.subtract,tf.multiply,tf.divide

  2. 平方,次方与开方:tf.square,tf.pow,tf.sqrt

  3. 矩阵乘: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))# 返回每一行最大值的索引

你可能感兴趣的:(机器学习与数据挖掘,学习,tensorflow,python)