Tensorflow笔记

本文详细介绍了Tensorflow在神经网络计算方面的应用,包括神经网络设计过程、张量生成、常用函数、优化方法以及卷积神经网络的构建。通过实例展示了如何使用Tensorflow实现鸢尾花分类,探讨了各种优化器、损失函数、激活函数的选择及其作用。此外,还讨论了如何缓解过拟合、搭建神经网络结构,以及数据集的使用,如MNIST和FASHION数据集。文章最后介绍了卷积神经网络的计算过程和相关概念,如感受野、全零填充等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tensorflow笔记

第一章 神经网络的计算

1.1 人工智能三个学派

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

  • 行为主义:基于控制论,构建感知-动作控制系统。(控制论、如:平衡、行走、避障等自适应控制系统)
  • 符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式。(可用公式描述、实现理性思维、如专家系统)
  • 连接主义:仿生学、模仿神经元连接关系。(防脑神经元连接、实现感性思维、如神经网络)
    理解:基于连结主意的神经网络设计过程。
    用计算机仿出神经网络连接关系,让计算机具备感性思维。
    (1)准备数据:采集大量“特征/标签”数据
    (2)搭建网络:搭建神经网络结构。
    (3)优化参数:训练网络获取最佳参数(反传)
    (4)应用网络:将网络保存为模型,输入新数据,输出分类或预测的结果(前传)
1.2神经网络设计过程

给鸢尾花分类
信息:0-狗尾鸢尾花 1-杂色鸢尾花 2-弗吉尼亚鸢尾花 问题:这个图片是哪个鸢尾花?
人们通过经验总结出了规律:通过测量花的花萼长、花萼宽、花瓣长、花瓣宽可以得出鸢尾花的类别。
(如:花萼长>花萼宽 且 花瓣长/花瓣宽>2 则为1杂色鸢尾花)
用if语句 case语句———专家系统:把专家的经验告知计算机,计算机执行逻辑判别(理性计算)给出分类。
神经网络
采集大量(花萼长、花萼宽、花瓣长、花瓣宽——输入特征,对应的类别——标签(需人工标定))数据对构成数据集。
把数据集喂入搭建好的神经网络结构——网络优化参数得到模型——模型读入新输入特征——输出识别结果

在这里插入图片描述

麦卡洛克与皮茨建立MP模型
在这里插入图片描述
在这里插入图片描述

用神经网络实现鸢尾花分类
在这里插入图片描述
注:此网络为全连接网络
输入特征为:5.8 4.0 1.2 0.2 以及对应的标签0-狗尾鸢尾花。
为什么0类鸢尾花的得分不是最高?
损失函数
损失函数:预测值(y)与标准答案(y-)的差距。
损失函数可以定量判断w、b的优劣、当损失函数输出最小时,参数w、b会出现最优值
损失函数的定义方法-均方误差
在这里插入图片描述
目的: 想找一组参数w和b,使损失函数最小
梯度: 函数对个参数求偏导后的向量。函数梯度下降的方向是函数减小的方向。
梯度下降法: 沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。

在这里插入图片描述
学习率(Ir): 当学习率设置过小时,收敛过程将变得十分缓慢。而当学习率设置的过大时,梯度可能会在最小值附近来回震荡,甚至可能无法收敛。
反向传播: 从后向前,逐层求损失函数对每层神经元参数的偏导数,迭代更新所有参数。
在这里插入图片描述
在这里插入图片描述

1.3张量的生成

张量(Tensor): 多维数组(列表)。
阶: 张量的维度。

维度 名字 例子
0-D 0 标量 scalar s=1 2 3
1-D 1 向量 vector v=[1,2,3]
2-D 2 矩阵 matrix m=[[1,2,3],[4,5,6],[7,8,9]
n-D n 张量 tensor t=[[[…

张量可以表示0阶到n阶的数组(列表)
数据类型
tf.int,tf.float tf.int 32 ,tf.float 32,tf.float 64
tf.bool:tf.constant([True,False])
tf.string:tf.constant(“Hello ,world!”)
创建一个Tensor
创建一个张量:tf.constant(张量内容,dtype=数据类型(可选))
例:

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

在这里插入图片描述
创建一个n维张量

  • 创建全为0的张量tf.zeros(维度)
  • 创建全为1的张量tf.ones(维度)
  • 创建全为n的张量tf.fill(维度,指定值)
    注:一维度-直接写个数、二维度-用[行,列]、多维-用[n,m,j,k…]
    例:
a=tf.zeros([2,3])
b=tf.ones(4)
c=tf.fill([2,2],9)
printf(a)
printf(b)
printf(c)

在这里插入图片描述

数据类型转化
将numpy的数据类型转换为Tensor数据类型:tf.convert-to-tensor(数据名,dtype=数据类型(可选))
例:

import tensorflow as tf
import numpy as np
a=np.arange(0,5)
b=tf.convert-to-tensor(a,dtype=tf.int64)
print(a)
print(b)

在这里插入图片描述

生成正态分布随机数,默认均值为0,标准差为1:tf.random.normal(维度,mean=均值,stddev=标准差)
生成截断式正态分布随机数:tf.random.truncated-normal(维度,mean=均值,stddev=标准差)
在tf.truncated-normal中如果随机生成数据的取值在(μ-2σ,μ+2σ)之外则重新进行生成,保证了生成值在均值附近。
μ:均值, σ:标准差
在这里插入图片描述
例:

d=tf.random.normal([2,2],mean=0.5,stddev=1)
print(d)
e=tf.random.truncated-normal([2,2],mean=0.5,stddev=1)
print(e)

在这里插入图片描述

生成均匀分布随机数[minval,maxval):tf.random.uniform(维度,minval=最小值,maxval=最大值)
例:
f=tr.random.uniform([2,2],minval=0,maxval=1)
printf(f)
在这里插入图片描述

1.4TF2常用函数

强制tensor转换为该数据类型:tf.cast(张量名,dtype=数据类型)
计算张量维度上元素的最小值:tf.reduce-min(张量名)
计算张量维度上元素的最大值:tf.reduce-max(张量名)
例:

x1=tf.constant([1.,2.,3.],dtype=tf.float64)
printf(x1)
x2=tf.cast(x1,tf.int32)
print(x2)
print(tf.reduce-min(x2),tf.reduce-max(x2))

在这里插入图片描述

对axis的理解

  • 在一个二维张量或数组中,可以通过调整axis等于0或等于1控制执行维度。
  • axis=0代表跨行(经度,down)而axis=1代表跨列(维度,across)
  • 如果不指定axis,则所有元素参与计算。
    请添加图片描述

计算张量沿着指定维度的平均值:tf.reduce-mean(张量名,axis=操作轴)
计算张量沿着指定维度的和:tf.reduce-sum(张量名,axis=操作轴)
例:

x=tf.constant([[1,2,3],[2,2,3]])
printf(x)
printf(tf.reduce-mean(x))
printf(tf.reduce-sum(x,axis=1))

在这里插入图片描述

tf.Variable
tf.Variable()将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
tf.Variable(初始值)
例:
w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
对应元素的四则运算–只有维度相同的张量才可以做四则运算

  • 实现两个张量的对应元素相加tf.add(张量1,张量2)
  • 实现两个元素的对应元素相减tf.subtract(张量1,张量2)
  • 实现两个张量的对应元素相乘tf.multiply(张量1,张量2)
  • 实现两个张量的对应元素相除tf.divide(张量1,张量2)
    例:
a=tf.ones([1,3])
b=tf.fill([1,3],3)
printf(a)
printf(b)
printf(tf.add(a,b))
printf(tf.subtract(a,b))
printf(tf.multiply(a,b))
printf(tf.divide(b,a)

在这里插入图片描述
平方、次方与开方

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

例:

a=tf.fill([1,2],3.)
print(a)
print(tf.pow(a,3))
print(tf.square(a))
print(tf.sqrt(a))

在这里插入图片描述
矩阵乘tf.matmul
实现两个矩阵的相乘tf.matmul(矩阵1,矩阵2)
例:

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

在这里插入图片描述
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)   

在这里插入图片描述
enumerate
enumerate是python的内建函数,它可遍历每个元素(如列表\元组或字符串)组合为:索引元素,常在for循环使用。
enumerate(列表名)
例:

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

在这里插入图片描述

tf.one_hot
独热编码(one-hot encoding):在分类问题中,常用独热码做标签,标记类别:1表示是,0表示非。
   (0狗尾草鸢尾   1杂色鸢尾   2弗吉尼亚鸢尾)
标签: 1
独热码:0       1       0
tf.one_hot()函数将待转换数据,转换为one-hot形式的数据输出。
tf.one_hot(待转换数据,depth=几分类)
例:

chasses=3
labels =tf.constant([1,0,2])#输入的元素值最小为0,最大为2
output=tf.one_hot(labels,depth=classes)
print(output)

在这里插入图片描述

tf.nn.softmax
在这里插入图片描述
例:
在这里插入图片描述

y=tf.constant([1.01,2.01,-0.66])
y_pro=tf.nn.softmax(y)
print("After softmax,y_pro is:",y_pro)

在这里插入图片描述

assign_sub
赋值操作,更新参数的值并返回。
调用assign_sub前,先用tf。Variable定义变量w为可训练(可自更新)
w.assign_sub(w要自减的内容)

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

在这里插入图片描述

tf.argmax
返回张量沿指定维度最大值的索引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)#返回每一行(维度)最大值的索引

在这里插入图片描述

1.5神经网络实现鸢尾花分类

鸢尾花数据集

  • 数据集介绍:共有数据150组,每组包括花萼长、花萼宽、花瓣长、花瓣宽4个输入特征。同时给出了,这一组特征对应的鸢尾花类别。类别包括Setosa Iris(狗尾草鸢尾),Versicolour Iris(杂色鸢尾),Virginica Iris(弗吉尼亚鸢尾)三类,分别用数字0,1,2表示。
  • 从sklearn包datasels读入数据集,语法为:
from sklearn.datasetd import load_iris
x_data =datasets.load_iris().data #返回iris数据集所有输入特征
y_data=datasets.load_iris().target #返回iris数据集所有标签
  • 主要实现步骤:
    1.准备数据:数据集读入、数据集乱序、生成训练集和测试集(x_train/y_train)配成(输入特征,标签)对,每次读入一小撮。
    2.搭建网络:定义神经网路中的所有可训练参数
    3.参数优化:嵌套循环迭代,with结构更新参数,显示当前loss
    4.测试效果:计算当前参数前向传播的准确率,显示当前loss
    5.acc/loss可视化

  • 具体代码实现

1.数据集读入

从sklearn 包datasets读入数据集:
from sklearn.datasets import datasets
x_data=datasets.load_iris().data
y_data=datasets.load_iris
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值