TensorFlow2.1(Anaconda)学习笔记二

损失函数、反向传播

损失函数:预测值和正确值的差距。
目的:想找到一组参数w和b,使得损失函数最小。
梯度:函数对各参数求偏导后的向量。函数梯度下隆方向是函数减小方向。
梯度下降法:沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。

上面这些概念在高数中已有接触了,但鄙人才疏学浅,还是不明白。

反向传播:从后向前,逐层求损失函数对每层神经元参数
的偏导数,迭代更新所有参数。

这里有个例子:

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次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环100次迭代。
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导

    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    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

在Anaconda中运行结果如图:
在这里插入图片描述
经过40次迭代,找到了是损失函数最小的w值。

张量

这里就简单总结一下:
0维张量到2维张量分别就是我们熟知的标量、向量、矩阵,对应阶是0、1、2。3维及更高阶的就称作n阶张量。

import tensorflow as tf

a = tf.constant([1, 5], dtype=tf.int64)
print("a:", a)
print("a.dtype:", a.dtype)
print("a.shape:", a.shape)

# 本机默认 tf.int32  可去掉dtype试一下 查看默认值

创建一个一维张量

import tensorflow as tf

a = tf.constant([1, 5], dtype=tf.int64)
print("a:", a)
print("a.dtype:", a.dtype)
print("a.shape:", a.shape)

# 本机默认 tf.int32  可去掉dtype试一下 查看默认值

输出
在这里插入图片描述
如果把代码中[1,5]改成1,那么创建的就是0阶张量,改成[1,2],[2,5] 就是二维。

三维张量如图:在这里插入图片描述
shape值为(2,2,1),第一个2表示第一个维度有两个元素,第二个2表示第二个维度有两个元素,1表示第三个维度有一个元素。

numpy数据类型转换成TensorFlow数据类型

import tensorflow as tf
import numpy as np

a = np.arange(0, 5)
b = tf.convert_to_tensor(a, dtype=tf.int64)
print("a:", a)
print("b:", b)

输出
在这里插入图片描述

创建特殊的张量

a = tf.zeros([2, 3])
b = tf.ones(4)
c = tf.fill([2, 2], 9)
print("a:", a)
print("b:", b)
print("c:", c)

输出
在这里插入图片描述
上面三个方法的圆括号内参数是维度:
一维直接写个数
二维用[行,列]
多维用[n,m,j…]
如:创建全为零的一维张量a = tf.zeros(4)
这样就创建了

生成正态分布的随机数,默认均值为0,标准差为1。tf. random.normal (维度,mean=均值, stddev=标准差)
r生成截断式正态分布的随机数tf. random.truncated normal (维度,mean=均值, stddev=标准差)

d = tf.random.normal([2, 2], mean=0.5, stddev=1)
print("d:", d)
e = tf.random.truncated_normal([2, 2], mean=0.5, stddev=1)
print("e:", e)

在这里插入图片描述
生成均匀分布随机数[ minval, maxval )
tf. random. uniform(维度,minval=最小值,maxval=最大值)

f= tf.random.uniform([2, 2], minval=0, maxval=1)
print(f)

输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值