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的过程。

posted @ 2022-04-25 13:04  饭果果  阅读(51)  评论(0)    收藏  举报