TensorFlow读书笔记
import tensorflow as tf #设置参数w的随机初始值为5,设定为可训练(即vaiable形式?) w = tf.Variable(tf.constant(5, dtype=tf.float32)) #学习率 lr=0.2 #循环次数 epoch=40 for epoch in range(epoch): with tf.GradientTape() as tape:#with结构到grad框起到了梯度计算的过程 loss=tf.square(w+1) #损失函数定义为w+1的平方 grads=tape.gradient(loss,w)#gradinet函数告知对谁求导 w.assign_sub(lr*grads) #assign_sub做自减,即w-= print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))

张量生成
tensorflow中的tensor就是张量,是多维数组(多维列表),用阶来表示张量的维数,判断张量是几阶的可以看有几个方括号。
数据类型 : tf.int tf.float , tf.bool , tf.string
图和创建一个张量tensor
import tensorflow as tf a=tf.constant([1,5],dtype=tf.int64) #直接打印a,会输出a的所有信息 print(a) #打印a的数据类型 print(a.dtype) #打印a的形状 print(a.shape)

很多时候数据是用numpy给出的,可以通tf.convert_to_tensor(数据名,dtype=数据类型(可选))将其转化为tensor数据类型
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的张量 tf.zeros(维度) #创建全为1的张量 tf.ones(维度) #创建全为指定值的张量 tf.fill(维度,指定值)
生成随机数
生产正态分布的随机数,默认均值为0,标准差为1:tf.random.normal(维度,mean=均值,stddev=标准差)
生成截断式正态分布的随机数:tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
生成均匀分布随机数[minval,maxval),注意是前闭后开:tf.random.uniform(维度,minval=最小值,maxval=最大值)
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) f=tf.random.uniform([2,2],minval=0,maxval=1) print(f)

常用函数
强制tensor转换为该数据类型:tf.cast(张量名,dtype=数据类型 )
计算张量维度上元素的最小值:tf.reduce_min(张量名)
计算张量维度上的元素最大值:tf.reduce_max(张量名)
x1=tf.constant([1.,2.,3.],dtype=tf.float64) print(x1) x2=tf.cast(x1,tf.int32) print(tf.reduce_min(x2),'\n',tf.reduce_max(x2))

计算张量沿着指定方向的平均值:tf.reduce_mean(张量名,axis=操作轴)
计算张量沿着指定维度的和:tf.reduce_sum(张量名,axis=操作轴)
课后习题:
(1)全连接:层间神经元完全连接,每个输出神经元可以获取到所有神经元的信息,有利于信息汇总,常置于网络末尾;连接与连接之间独立参数,大量的连接大大增加模型的参数规模。局部连接:层间神经只有局部范围内的连接,在这个范围内采用全连接的方式,超过这个范围的神经元则没有连接;连接与连接之间独立参数,相比于去全连接减少了感受域外的连接,有效减少参数规模。
(2)卷积运算原理,最基本的就是单通道对应一个输出通道,那就用一个二维矩阵对输入图像进行运算,提取图像特征。但是单通道输入得到多通道(k个通道)输出,就需要k个滤波器,每个滤波器是就是一个二维的33矩阵,也就是每个滤波器包含一个卷积核。但是当输入是多通道(t)得到多通道(k个通道)输出,那这次卷积就包括k个滤波器,每个滤波器就是一个3维矩阵,33t,每个滤波器就包含t个卷积核。上面输出通道是k,那就得到了k个特征图,每个输出通道就是一个特征图。
(3)池化的目的:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。
激活函数的作用:如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
(4)1.归一化有助于快速收敛; 2.对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)梯度下降,依照所给数据,判断函数,随机给一个初值w,之后通过不断更改,一步步接近原函数的方法。更改的过程也就是根据梯度不断修改w的过程。

浙公网安备 33010602011771号