北大慕课Tensorflow实践过程笔记1——神经网络计算过程

人工智能三学派

人工智能:让机器具备人的思维和意识。

三学派分类

1.行为主义:
基于控制论,构建感知-动作控制系统(控制论,如平衡,行走,避障等自适应控制系统)
如:让机器人单脚站立,感知摔倒的方向,控制两只手的动作。保持身体的平衡,这就构建了一个感知-动作控制系统,是典型的的行为主义

2.符号主义:
基于算术逻辑表达式,求解问题时先把问题描述为表达式,在求解表达式。(可用公式描述,实现理性思维,如 专家系统
在求解某个问题时,可以用if case这样的条件语句和若干计算公式描述出来,就是符号主义的方法。
符号主义可以认为是用公示描述的人工智能,他让计算机具备了理性思维,但是人类不仅具备理性思维,还具备无法用公示描述的感性思维。

3.连接主义:
仿生学,模仿神经元连接关系。(仿脑神经元连接,实现感性思维,如神经网络)
如:神经网络可以让计算机具备感性思维,我们可以用计算机仿出神经网络,让计算机具备感性思维。

训练流程

  • 准备数据:采集大量“特征/标签”数据
  • 搭建网络:搭建神经网络结构
  • 优化参数:训练网络获取最佳参数, 即通过反向传播,优化连接的权重,直到模型的识别准确率达到要求,得到最优的连线权重,把这个模型保存起来。
  • 应用网络:将网络保存为模型,输入从未见过的新数据,通过前向传播输出概率值,概率值最大的一个就是分类和预测的结果了。

机器学习初见

什么是机器学习

传统冯诺依曼计算机工作原理:指令和数据都被预先存储,按照指令先后顺序,逐条读取并运行。
特点:输出结果是确定的。因为先干什么后干什么都已经提前写在指令里了。

机器学习定义:如果在一个程序可在任务T上,随经验E的增加,效果P随之增加,则这个程序可以从经验中学习。
机器学习是一种统计学方法,计算机利用已有数据,得出某种模型,在利用此模型预测结果。
随着经验的增加,效果会变好。
机器学习的输入不再是写好的指令而是数据,输出是结果出现的概率。会预先读取大量数据,根据已有数据训练模型,当模型训练好了再把新的数据输入,会计算出新数据所对应的结果。
【机器学习就是先用以往的数据训练模型,再用模型预测新数据的结果】
机器学习三要素:数据;算法;算力。
在这里插入图片描述

机器学习最主要的应用

  1. 对连续数据的预测
  2. 对离散数据进行分类

人工智能VS机器学习VS深度学习

人工智能:机器模拟人的意识和思维。
机器学习:实现人工智能的一种方法,是人工智能的子集。
深度学习:是深层次神经网络,是机器学习的一种实现方法,是机器学习的子集。

神经网络的分类过程

给鸢尾花分类

0-狗尾草鸢尾
1-杂色鸢尾
2-弗吉尼亚鸢尾
在这里插入代码片人们通过经验总结出规律:通过测量花的花萼长,花萼宽,花瓣长,花瓣宽,可以得出鸢尾花的类别。
(如:花萼长>花萼宽 且 花瓣长/花瓣宽>2 则为1杂色鸢尾)

if语句 case语句——专家系统:
把专家的经验告知计算机,计算机执行逻辑判别(理性计算),给出分类`

神经网络:
采集大量(花萼长,花萼宽,花瓣长,花瓣宽,对应的类别)数据对构成数据集【特征和标签对构成数据集】
输入特征:花萼长,花萼宽,花瓣长,花瓣宽
标签(需人工标定):对应的鸢尾花类别
把数据集喂入搭建好的神经网络结构,网络通过反向传播优化参数,得到模型,模型读入新输入特征,输出识别结果

如下图:y就是三种鸢尾花各自的可能性大小
在这里插入图片描述
如下图:每一个X结点都和每一个y结点有关系,叫做全连接网络
在这里插入图片描述

损失函数

如果出现输出的类别结果和输入的标签不一样,是因为最开始的参数W和b都是随机产生的,最初训练后的结果都是蒙的。
用损失函数(loss function)定义预测值(y)和标准答案(y_)之间的差距。
损失函数可以定量地判断当前这组参数w和b的优劣。当损失函数输出值最小时,参数w,b会出现最优值。
损失函数的定义有多种方法,均方误差就是一种常用的损失函数,均方误差表征了网络前向传播推理(结果)和标准答案之间的差距。
在这里插入图片描述

梯度下降

目的:找到一组参数w和b,使得损失函数最小。
梯度:函数对各参数求偏导后的向量。函数梯度下降方向是函数减小方向
梯度下降法:沿着损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。
在这里插入图片描述
学习率(learning rate,lr):lr是梯度下降的速度,是一个超参数。如果学习率设置过小,参数更新缓慢;如果学习率设置的过大,梯度可能会在最小值附近来回震荡,跳过最小值,甚至可能无法收敛。

反向传播

在这里插入图片描述
画出损失函数 2w+2 的图像,优化参数w,就是要找到某个w,使得损失函数的梯度减小。由图可得,在w=1处。
我们优化函数的目的就是为了找到这个使损失函数loss值最小的w=-1值

代码:

import tensorflow as tf

w=tf.Variable(tf.constant(5,dtype=tf.float32))
lr=0.2
epoch=40

for epoch in range(epoch):for epoch  #定义顶层循环,表示对数据集循环epoch次
	with tf.GradientTape() as tape:  #with结构到grads框起了梯度的计算过程
		loss=tf.square(w+1)
	grads=tape.gradient(loss,w)   #.gradient函数告知谁对谁求导
    w.assing_sub(lr*grads)    #.assign_sub 对变量做自减 即:w-=lr*grads 即 w=w-lr
    print("After %s epoch,w is %f,loss is %f" %(epoch,w.numpy(),loss))

# lr初始值:0.2  请自改学习率0.001  0.999看收敛过程
# 最终目的:找到loss最小 即 w=-1的最优参数w

张量生成

张量概念和阶数

张量(tensor):多维数组(列表)
阶:张量的维数

维数名字例子
0-D0标量 scalars=123
1-D1向量 vectorv=[ 1,2,3 ]
2-D2矩阵 matrixm=[ [1,2,3] [4,5,6] [7,8,9] ]
n-Dn张量 tensort=[ [ [

ps: 0阶张量叫做标量,表示的是一个单独的数;
1阶张量叫做向量,表示的是一个一维数组;
2阶张量叫做矩阵,表示的是一个二维数组,每个元素用行号和列号共同索引号
n阶 判断张量是几阶就是最左边有多少个 [ 0个是0阶,1个是1阶,n个是n阶

数据类型

  • tf.int,tf.float…
    32位整型 tf.int 32, 32位浮点型tf.float 32, 64位浮点型 tf.float 64

  • tf.bool
    tf.constant( [True,False] )

  • tf.string
    tf.constant("hello,world! ")

如何创建一个tensor

创建tensor

在这里插入图片描述
直接打印a会输出张量的所有信息,包括张量的内容,张量的形状,和张量的数据类型。
张量的形状看shape的逗号隔开了几个数字,逗号隔开了几个数字,这个张量就是几维的,该例子中,shape中用逗号隔开了一个数字(因为只有一个数字 2),说明是一维张量;这个数字是2,说明这个张量里有两个元素,也就是这里的数值1和数值5.

将numpy的数据类型转换为tensor数据类型

很多时候数据是由numpy格式给出的,可以使用conver_to_tensorf()把它变成tensor格式
在这里插入图片描述

创建全为0,全为1,全为指定值的张量

在这里插入图片描述
ps:多维的 [ ] 里写每个维度的元素个数,中间用逗号隔开。

生成正态分布的随机数,默认均值为0,标准差为1

编写代码时常常随机生成初始化参数,要符合正态分布:

tf.random.normal(维度,mean=均值,stddev=标准差)

生成截断式正态分布的随机数

有时候希望生成的随机数更集中一些:

tf.random.truncated_normal(维度,mean=均值,stddev=标准差)

使用该函数是生成的数据在两倍标准差内,更向均值集中
在这里插入图片描述
如:
在这里插入图片描述

生成均匀分布随机数

在这里插入图片描述

常用TF函数

略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值