TensorFlow笔记学习(一)

200 阅读2分钟

TensorFlow笔记学习(一)

这是我的第一篇笔记,主要是对于个人每日学习内容的一个记录
人工智能实践:Tensorflow笔记

对应视频第一讲第1.5小节

1.tf.GradientTape

这个函数可以自动地追踪with结构内所有可变张量的变化,也就是我们再反向传播过程中,需要对每个可变量进行一个求导,这个动作构成了误差梯度下降的过程

with tf.GradientTape() as Tape:
    w=tf.Variable(tf.constant(3.0))
    loss=tf.pow(w,2)
    grad=Tape.gradient(loss,w)
    print(grad)

运行结果: tf.Tensor(6.0, shape=(), dtype=float32)

我们的损失函数为loss=w_n^2 所以对于当w=3的时候我们的进行一次求导,它的结果就是 \frac{\partial w^2}{\partial w}=2w=2*3.0=6.0

这里接入一点如何用markdown打出分数,分数的英文名字是fraction,
在markdown中用\frac{分子}{分母}的打出一个分数,所有的公式都用?包裹起来,其中??独行公式,微分运算的标识为\partial,其中partial differential为偏微分的意思

2.tf.one_hot

表示独热码,它就是把输出的结果进行一个编码,变成一个类似于二进制数的形式,比如,要输出的分类为a,b,c 那么就用[1,0,0]表示a [0,1,0]表示b,这就是独热码的含义,参数depth表示几分类

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

运行结果:
tf.Tensor( [[0. 1. 0.] [1. 0. 0.] [0. 0. 1.]], shape=(3, 3), dtype=float32)

3. tf.nn.softmax

它可以把网络的输出变得符合一个概率分布,只有符合了概率分布才可以把输出的结果和独热码进行一个比较

Softmax(y_i)=\frac{e^{yi}}{\sum^n_{j=0}e^{yi}}

由此可见,softmax就是把所有的值重新映射到y=e^x上,似的所有的输出可以符合一个概率分布
\forall x P(X=x) \in[0,1] 且\sum_xP(X=x)=1

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

运行结果:
After softmax,y_pro is tf.Tensor([0.25598174 0.69583046 0.04818781], shape=(3,), dtype=float32) <tf.Variable 'Variable:0' shape=() dtype=int32, numpy=3>

4.assign_sub

用于实现参数的自更新,但是只能操作tf.Variable的数据

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

运行结果:
<tf.Variable 'Variable:0' shape=() dtype=int32, numpy=3>

5.tf.argmax

返回指定操作轴的最大值的索引,其中参数axis为轴,对于一个数组来说,如果axis=0,则在每一列上操作,如果axis=1,则在每一行上进行操作

#argmax axis是轴
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 2 3]
[2 3 4]
[5 4 3]
[8 7 2]]
tf.Tensor([3 3 1], shape=(3,), dtype=int64)
tf.Tensor([2 2 0 0], shape=(4,), dtype=int64)